lshrsi3.S 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  3. 2004, 2005, 2006
  4. Free Software Foundation, Inc.
  5. */
  6. !! libgcc routines for the Renesas / SuperH SH CPUs.
  7. !! Contributed by Steve Chamberlain.
  8. !! sac@cygnus.com
  9. !! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
  10. !! recoded in assembly by Toshiyasu Morita
  11. !! tm@netcom.com
  12. /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
  13. ELF local label prefixes by J"orn Rennecke
  14. amylaar@cygnus.com */
  15. !
  16. ! __lshrsi3)
  17. !
  18. ! Entry:
  19. !
  20. ! r4: Value to shift
  21. ! r5: Shifts
  22. !
  23. ! Exit:
  24. !
  25. ! r0: Result
  26. !
  27. ! Destroys:
  28. !
  29. ! (none)
  30. !
  31. .global __lshrsi3
  32. .align 2
  33. __lshrsi3:
  34. mov #31,r0
  35. and r0,r5
  36. mova __lshrsi3_table,r0
  37. mov.b @(r0,r5),r5
  38. #ifdef __sh1__
  39. add r5,r0
  40. jmp @r0
  41. #else
  42. braf r5
  43. #endif
  44. mov r4,r0
  45. .align 2
  46. __lshrsi3_table:
  47. .byte __lshrsi3_0-__lshrsi3_table
  48. .byte __lshrsi3_1-__lshrsi3_table
  49. .byte __lshrsi3_2-__lshrsi3_table
  50. .byte __lshrsi3_3-__lshrsi3_table
  51. .byte __lshrsi3_4-__lshrsi3_table
  52. .byte __lshrsi3_5-__lshrsi3_table
  53. .byte __lshrsi3_6-__lshrsi3_table
  54. .byte __lshrsi3_7-__lshrsi3_table
  55. .byte __lshrsi3_8-__lshrsi3_table
  56. .byte __lshrsi3_9-__lshrsi3_table
  57. .byte __lshrsi3_10-__lshrsi3_table
  58. .byte __lshrsi3_11-__lshrsi3_table
  59. .byte __lshrsi3_12-__lshrsi3_table
  60. .byte __lshrsi3_13-__lshrsi3_table
  61. .byte __lshrsi3_14-__lshrsi3_table
  62. .byte __lshrsi3_15-__lshrsi3_table
  63. .byte __lshrsi3_16-__lshrsi3_table
  64. .byte __lshrsi3_17-__lshrsi3_table
  65. .byte __lshrsi3_18-__lshrsi3_table
  66. .byte __lshrsi3_19-__lshrsi3_table
  67. .byte __lshrsi3_20-__lshrsi3_table
  68. .byte __lshrsi3_21-__lshrsi3_table
  69. .byte __lshrsi3_22-__lshrsi3_table
  70. .byte __lshrsi3_23-__lshrsi3_table
  71. .byte __lshrsi3_24-__lshrsi3_table
  72. .byte __lshrsi3_25-__lshrsi3_table
  73. .byte __lshrsi3_26-__lshrsi3_table
  74. .byte __lshrsi3_27-__lshrsi3_table
  75. .byte __lshrsi3_28-__lshrsi3_table
  76. .byte __lshrsi3_29-__lshrsi3_table
  77. .byte __lshrsi3_30-__lshrsi3_table
  78. .byte __lshrsi3_31-__lshrsi3_table
  79. __lshrsi3_6:
  80. shlr2 r0
  81. __lshrsi3_4:
  82. shlr2 r0
  83. __lshrsi3_2:
  84. rts
  85. shlr2 r0
  86. __lshrsi3_7:
  87. shlr2 r0
  88. __lshrsi3_5:
  89. shlr2 r0
  90. __lshrsi3_3:
  91. shlr2 r0
  92. __lshrsi3_1:
  93. rts
  94. shlr r0
  95. __lshrsi3_14:
  96. shlr2 r0
  97. __lshrsi3_12:
  98. shlr2 r0
  99. __lshrsi3_10:
  100. shlr2 r0
  101. __lshrsi3_8:
  102. rts
  103. shlr8 r0
  104. __lshrsi3_15:
  105. shlr2 r0
  106. __lshrsi3_13:
  107. shlr2 r0
  108. __lshrsi3_11:
  109. shlr2 r0
  110. __lshrsi3_9:
  111. shlr8 r0
  112. rts
  113. shlr r0
  114. __lshrsi3_22:
  115. shlr2 r0
  116. __lshrsi3_20:
  117. shlr2 r0
  118. __lshrsi3_18:
  119. shlr2 r0
  120. __lshrsi3_16:
  121. rts
  122. shlr16 r0
  123. __lshrsi3_23:
  124. shlr2 r0
  125. __lshrsi3_21:
  126. shlr2 r0
  127. __lshrsi3_19:
  128. shlr2 r0
  129. __lshrsi3_17:
  130. shlr16 r0
  131. rts
  132. shlr r0
  133. __lshrsi3_30:
  134. shlr2 r0
  135. __lshrsi3_28:
  136. shlr2 r0
  137. __lshrsi3_26:
  138. shlr2 r0
  139. __lshrsi3_24:
  140. shlr16 r0
  141. rts
  142. shlr8 r0
  143. __lshrsi3_31:
  144. shlr2 r0
  145. __lshrsi3_29:
  146. shlr2 r0
  147. __lshrsi3_27:
  148. shlr2 r0
  149. __lshrsi3_25:
  150. shlr16 r0
  151. shlr8 r0
  152. rts
  153. shlr r0
  154. __lshrsi3_0:
  155. rts
  156. nop