l_shr_r.s 489 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. .text
  2. .align 4
  3. .code 32
  4. .global L_shr_r
  5. .type L_shr_r, %function
  6. L_shr_r:
  7. MOV r2,r0
  8. CMP r0,#0
  9. BEQ END
  10. CMP r1,#0
  11. BEQ END
  12. BLT L_SHIFT
  13. R_SHIFT:
  14. CMP r1,#31
  15. MOVGT r0,#0
  16. BGT END
  17. ASRS r0,r0,r1
  18. ADDCS r0,r0,#1
  19. B END
  20. L_SHIFT:
  21. LSL r1,r1,#16
  22. SUB r1,#1
  23. EOR r1,r1,r1, ASR # 31
  24. ASR r1,r1,#16
  25. CMP r1,#31
  26. BGT OVERFLOW
  27. LSL r0,r0,r1
  28. CMP r2,r0,ASR r1
  29. BEQ END
  30. B OVERFLOW
  31. OVERFLOW:
  32. CMP r2,#0
  33. MOVGT r0,#0x7FFFFFFF
  34. MOVLT r0,#0x80000000
  35. B END
  36. END:
  37. BX lr