lshrsi3.S 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-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. ! __lshrsi3_r0
  32. !
  33. ! Entry:
  34. !
  35. ! r0: Value to shift
  36. ! r5: Shifts
  37. !
  38. ! Exit:
  39. !
  40. ! r0: Result
  41. !
  42. ! Destroys:
  43. !
  44. ! (none)
  45. !
  46. .global __lshrsi3
  47. .global __lshrsi3_r0
  48. .align 2
  49. __lshrsi3:
  50. mov r5,r0
  51. .align 2
  52. __lshrsi3_r0:
  53. and #31,r0
  54. mov.l r4,@-r15
  55. mov r0,r4
  56. mova lshrsi3_table,r0
  57. mov.b @(r0,r4),r4
  58. add r4,r0
  59. jmp @r0
  60. mov.l @r15+,r0
  61. .align 2
  62. lshrsi3_table:
  63. .byte lshrsi3_0-lshrsi3_table
  64. .byte lshrsi3_1-lshrsi3_table
  65. .byte lshrsi3_2-lshrsi3_table
  66. .byte lshrsi3_3-lshrsi3_table
  67. .byte lshrsi3_4-lshrsi3_table
  68. .byte lshrsi3_5-lshrsi3_table
  69. .byte lshrsi3_6-lshrsi3_table
  70. .byte lshrsi3_7-lshrsi3_table
  71. .byte lshrsi3_8-lshrsi3_table
  72. .byte lshrsi3_9-lshrsi3_table
  73. .byte lshrsi3_10-lshrsi3_table
  74. .byte lshrsi3_11-lshrsi3_table
  75. .byte lshrsi3_12-lshrsi3_table
  76. .byte lshrsi3_13-lshrsi3_table
  77. .byte lshrsi3_14-lshrsi3_table
  78. .byte lshrsi3_15-lshrsi3_table
  79. .byte lshrsi3_16-lshrsi3_table
  80. .byte lshrsi3_17-lshrsi3_table
  81. .byte lshrsi3_18-lshrsi3_table
  82. .byte lshrsi3_19-lshrsi3_table
  83. .byte lshrsi3_20-lshrsi3_table
  84. .byte lshrsi3_21-lshrsi3_table
  85. .byte lshrsi3_22-lshrsi3_table
  86. .byte lshrsi3_23-lshrsi3_table
  87. .byte lshrsi3_24-lshrsi3_table
  88. .byte lshrsi3_25-lshrsi3_table
  89. .byte lshrsi3_26-lshrsi3_table
  90. .byte lshrsi3_27-lshrsi3_table
  91. .byte lshrsi3_28-lshrsi3_table
  92. .byte lshrsi3_29-lshrsi3_table
  93. .byte lshrsi3_30-lshrsi3_table
  94. .byte lshrsi3_31-lshrsi3_table
  95. lshrsi3_6:
  96. shlr2 r0
  97. lshrsi3_4:
  98. shlr2 r0
  99. lshrsi3_2:
  100. rts
  101. shlr2 r0
  102. lshrsi3_7:
  103. shlr2 r0
  104. lshrsi3_5:
  105. shlr2 r0
  106. lshrsi3_3:
  107. shlr2 r0
  108. lshrsi3_1:
  109. rts
  110. shlr r0
  111. lshrsi3_14:
  112. shlr2 r0
  113. lshrsi3_12:
  114. shlr2 r0
  115. lshrsi3_10:
  116. shlr2 r0
  117. lshrsi3_8:
  118. rts
  119. shlr8 r0
  120. lshrsi3_15:
  121. shlr2 r0
  122. lshrsi3_13:
  123. shlr2 r0
  124. lshrsi3_11:
  125. shlr2 r0
  126. lshrsi3_9:
  127. shlr8 r0
  128. rts
  129. shlr r0
  130. lshrsi3_22:
  131. shlr2 r0
  132. lshrsi3_20:
  133. shlr2 r0
  134. lshrsi3_18:
  135. shlr2 r0
  136. lshrsi3_16:
  137. rts
  138. shlr16 r0
  139. lshrsi3_23:
  140. shlr2 r0
  141. lshrsi3_21:
  142. shlr2 r0
  143. lshrsi3_19:
  144. shlr2 r0
  145. lshrsi3_17:
  146. shlr16 r0
  147. rts
  148. shlr r0
  149. lshrsi3_30:
  150. shlr2 r0
  151. lshrsi3_28:
  152. shlr2 r0
  153. lshrsi3_26:
  154. shlr2 r0
  155. lshrsi3_24:
  156. shlr16 r0
  157. rts
  158. shlr8 r0
  159. lshrsi3_31:
  160. shlr2 r0
  161. lshrsi3_29:
  162. shlr2 r0
  163. lshrsi3_27:
  164. shlr2 r0
  165. lshrsi3_25:
  166. shlr16 r0
  167. shlr8 r0
  168. rts
  169. shlr r0
  170. lshrsi3_0:
  171. rts
  172. nop