ashrsi3.S 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. !! [email protected]
  9. !! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
  10. !! recoded in assembly by Toshiyasu Morita
  11. !! [email protected]
  12. /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
  13. ELF local label prefixes by J"orn Rennecke
  14. [email protected] */
  15. !
  16. ! __ashrsi3
  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. ! __ashrsi3_r0
  32. !
  33. ! Entry:
  34. !
  35. ! r4: Value to shift
  36. ! r0: Shifts
  37. !
  38. ! Exit:
  39. !
  40. ! r0: Result
  41. !
  42. ! Destroys:
  43. !
  44. ! (none)
  45. .global __ashrsi3
  46. .global __ashrsi3_r0
  47. .align 2
  48. __ashrsi3:
  49. mov r5,r0
  50. .align 2
  51. __ashrsi3_r0:
  52. and #31,r0
  53. mov.l r4,@-r15
  54. mov r0,r4
  55. mova ashrsi3_table,r0
  56. mov.b @(r0,r4),r4
  57. add r4,r0
  58. jmp @r0
  59. mov.l @r15+,r0
  60. .align 2
  61. ashrsi3_table:
  62. .byte ashrsi3_0-ashrsi3_table
  63. .byte ashrsi3_1-ashrsi3_table
  64. .byte ashrsi3_2-ashrsi3_table
  65. .byte ashrsi3_3-ashrsi3_table
  66. .byte ashrsi3_4-ashrsi3_table
  67. .byte ashrsi3_5-ashrsi3_table
  68. .byte ashrsi3_6-ashrsi3_table
  69. .byte ashrsi3_7-ashrsi3_table
  70. .byte ashrsi3_8-ashrsi3_table
  71. .byte ashrsi3_9-ashrsi3_table
  72. .byte ashrsi3_10-ashrsi3_table
  73. .byte ashrsi3_11-ashrsi3_table
  74. .byte ashrsi3_12-ashrsi3_table
  75. .byte ashrsi3_13-ashrsi3_table
  76. .byte ashrsi3_14-ashrsi3_table
  77. .byte ashrsi3_15-ashrsi3_table
  78. .byte ashrsi3_16-ashrsi3_table
  79. .byte ashrsi3_17-ashrsi3_table
  80. .byte ashrsi3_18-ashrsi3_table
  81. .byte ashrsi3_19-ashrsi3_table
  82. .byte ashrsi3_20-ashrsi3_table
  83. .byte ashrsi3_21-ashrsi3_table
  84. .byte ashrsi3_22-ashrsi3_table
  85. .byte ashrsi3_23-ashrsi3_table
  86. .byte ashrsi3_24-ashrsi3_table
  87. .byte ashrsi3_25-ashrsi3_table
  88. .byte ashrsi3_26-ashrsi3_table
  89. .byte ashrsi3_27-ashrsi3_table
  90. .byte ashrsi3_28-ashrsi3_table
  91. .byte ashrsi3_29-ashrsi3_table
  92. .byte ashrsi3_30-ashrsi3_table
  93. .byte ashrsi3_31-ashrsi3_table
  94. ashrsi3_31:
  95. rotcl r0
  96. rts
  97. subc r0,r0
  98. ashrsi3_30:
  99. shar r0
  100. ashrsi3_29:
  101. shar r0
  102. ashrsi3_28:
  103. shar r0
  104. ashrsi3_27:
  105. shar r0
  106. ashrsi3_26:
  107. shar r0
  108. ashrsi3_25:
  109. shar r0
  110. ashrsi3_24:
  111. shlr16 r0
  112. shlr8 r0
  113. rts
  114. exts.b r0,r0
  115. ashrsi3_23:
  116. shar r0
  117. ashrsi3_22:
  118. shar r0
  119. ashrsi3_21:
  120. shar r0
  121. ashrsi3_20:
  122. shar r0
  123. ashrsi3_19:
  124. shar r0
  125. ashrsi3_18:
  126. shar r0
  127. ashrsi3_17:
  128. shar r0
  129. ashrsi3_16:
  130. shlr16 r0
  131. rts
  132. exts.w r0,r0
  133. ashrsi3_15:
  134. shar r0
  135. ashrsi3_14:
  136. shar r0
  137. ashrsi3_13:
  138. shar r0
  139. ashrsi3_12:
  140. shar r0
  141. ashrsi3_11:
  142. shar r0
  143. ashrsi3_10:
  144. shar r0
  145. ashrsi3_9:
  146. shar r0
  147. ashrsi3_8:
  148. shar r0
  149. ashrsi3_7:
  150. shar r0
  151. ashrsi3_6:
  152. shar r0
  153. ashrsi3_5:
  154. shar r0
  155. ashrsi3_4:
  156. shar r0
  157. ashrsi3_3:
  158. shar r0
  159. ashrsi3_2:
  160. shar r0
  161. ashrsi3_1:
  162. rts
  163. shar r0
  164. ashrsi3_0:
  165. rts
  166. nop