l_shift_r.s 462 B

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