ashrsi3.S 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  2. 2004, 2005, 2006
  3. Free Software Foundation, Inc.
  4. * SPDX-License-Identifier: GPL-2.0+
  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. ! __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. .global __ashrsi3
  32. .align 2
  33. __ashrsi3:
  34. mov #31,r0
  35. and r0,r5
  36. mova ashrsi3_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. ashrsi3_table:
  47. .byte ashrsi3_0-ashrsi3_table
  48. .byte ashrsi3_1-ashrsi3_table
  49. .byte ashrsi3_2-ashrsi3_table
  50. .byte ashrsi3_3-ashrsi3_table
  51. .byte ashrsi3_4-ashrsi3_table
  52. .byte ashrsi3_5-ashrsi3_table
  53. .byte ashrsi3_6-ashrsi3_table
  54. .byte ashrsi3_7-ashrsi3_table
  55. .byte ashrsi3_8-ashrsi3_table
  56. .byte ashrsi3_9-ashrsi3_table
  57. .byte ashrsi3_10-ashrsi3_table
  58. .byte ashrsi3_11-ashrsi3_table
  59. .byte ashrsi3_12-ashrsi3_table
  60. .byte ashrsi3_13-ashrsi3_table
  61. .byte ashrsi3_14-ashrsi3_table
  62. .byte ashrsi3_15-ashrsi3_table
  63. .byte ashrsi3_16-ashrsi3_table
  64. .byte ashrsi3_17-ashrsi3_table
  65. .byte ashrsi3_18-ashrsi3_table
  66. .byte ashrsi3_19-ashrsi3_table
  67. .byte ashrsi3_20-ashrsi3_table
  68. .byte ashrsi3_21-ashrsi3_table
  69. .byte ashrsi3_22-ashrsi3_table
  70. .byte ashrsi3_23-ashrsi3_table
  71. .byte ashrsi3_24-ashrsi3_table
  72. .byte ashrsi3_25-ashrsi3_table
  73. .byte ashrsi3_26-ashrsi3_table
  74. .byte ashrsi3_27-ashrsi3_table
  75. .byte ashrsi3_28-ashrsi3_table
  76. .byte ashrsi3_29-ashrsi3_table
  77. .byte ashrsi3_30-ashrsi3_table
  78. .byte ashrsi3_31-ashrsi3_table
  79. ashrsi3_31:
  80. rotcl r0
  81. rts
  82. subc r0,r0
  83. ashrsi3_30:
  84. shar r0
  85. ashrsi3_29:
  86. shar r0
  87. ashrsi3_28:
  88. shar r0
  89. ashrsi3_27:
  90. shar r0
  91. ashrsi3_26:
  92. shar r0
  93. ashrsi3_25:
  94. shar r0
  95. ashrsi3_24:
  96. shlr16 r0
  97. shlr8 r0
  98. rts
  99. exts.b r0,r0
  100. ashrsi3_23:
  101. shar r0
  102. ashrsi3_22:
  103. shar r0
  104. ashrsi3_21:
  105. shar r0
  106. ashrsi3_20:
  107. shar r0
  108. ashrsi3_19:
  109. shar r0
  110. ashrsi3_18:
  111. shar r0
  112. ashrsi3_17:
  113. shar r0
  114. ashrsi3_16:
  115. shlr16 r0
  116. rts
  117. exts.w r0,r0
  118. ashrsi3_15:
  119. shar r0
  120. ashrsi3_14:
  121. shar r0
  122. ashrsi3_13:
  123. shar r0
  124. ashrsi3_12:
  125. shar r0
  126. ashrsi3_11:
  127. shar r0
  128. ashrsi3_10:
  129. shar r0
  130. ashrsi3_9:
  131. shar r0
  132. ashrsi3_8:
  133. shar r0
  134. ashrsi3_7:
  135. shar r0
  136. ashrsi3_6:
  137. shar r0
  138. ashrsi3_5:
  139. shar r0
  140. ashrsi3_4:
  141. shar r0
  142. ashrsi3_3:
  143. shar r0
  144. ashrsi3_2:
  145. shar r0
  146. ashrsi3_1:
  147. rts
  148. shar r0
  149. ashrsi3_0:
  150. rts
  151. nop