l_shr.s 482 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. .text
  2. .align 4
  3. .code 32
  4. .global L_shr
  5. .type L_shr, %function
  6. L_shr:
  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. BGT UNDERFLOW
  16. ASR r0,r0,r1
  17. B END
  18. L_SHIFT:
  19. SUB r1,#1
  20. EOR r1,r1,r1, ASR # 31
  21. CMP r1,#31
  22. BGT OVERFLOW
  23. LSL r0,r0,r1
  24. CMP r2,r0,ASR r1
  25. BEQ END
  26. B OVERFLOW
  27. OVERFLOW:
  28. CMP r2,#0
  29. MOVGT r0,#0x7FFFFFFF
  30. MOVLT r0,#0x80000000
  31. B END
  32. UNDERFLOW:
  33. CMP r2,#0
  34. MOVGT r0,#0
  35. MVNLT r0,#0
  36. B END
  37. END:
  38. BX lr