ashxdi3.S 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /*
  2. * linux/arch/m32r/lib/ashxdi3.S
  3. *
  4. * Copyright (C) 2001,2002 Hiroyuki Kondo, and Hirokazu Takata
  5. *
  6. */
  7. /* $Id$ */
  8. ;
  9. ; input (r0,r1) src
  10. ; input r2 shift val
  11. ; r3 scratch
  12. ; output (r0,r1)
  13. ;
  14. #ifdef CONFIG_ISA_DUAL_ISSUE
  15. #ifndef __LITTLE_ENDIAN__
  16. .text
  17. .align 4
  18. .globl __ashrdi3
  19. __ashrdi3:
  20. cmpz r2 || ldi r3, #32
  21. jc r14 || cmpu r2, r3
  22. bc 1f
  23. ; case 32 =< shift
  24. mv r1, r0 || srai r0, #31
  25. addi r2, #-32
  26. sra r1, r2
  27. jmp r14
  28. .fillinsn
  29. 1: ; case shift <32
  30. mv r3, r0 || srl r1, r2
  31. sra r0, r2 || neg r2, r2
  32. sll r3, r2
  33. or r1, r3 || jmp r14
  34. .align 4
  35. .globl __ashldi3
  36. .globl __lshldi3
  37. __ashldi3:
  38. __lshldi3:
  39. cmpz r2 || ldi r3, #32
  40. jc r14 || cmpu r2, r3
  41. bc 1f
  42. ; case 32 =< shift
  43. mv r0, r1 || addi r2, #-32
  44. sll r0, r2 || ldi r1, #0
  45. jmp r14
  46. .fillinsn
  47. 1: ; case shift <32
  48. mv r3, r1 || sll r0, r2
  49. sll r1, r2 || neg r2, r2
  50. srl r3, r2
  51. or r0, r3 || jmp r14
  52. .align 4
  53. .globl __lshrdi3
  54. __lshrdi3:
  55. cmpz r2 || ldi r3, #32
  56. jc r14 || cmpu r2, r3
  57. bc 1f
  58. ; case 32 =< shift
  59. mv r1, r0 || addi r2, #-32
  60. ldi r0, #0 || srl r1, r2
  61. jmp r14
  62. .fillinsn
  63. 1: ; case shift <32
  64. mv r3, r0 || srl r1, r2
  65. srl r0, r2 || neg r2, r2
  66. sll r3, r2
  67. or r1, r3 || jmp r14
  68. #else /* LITTLE_ENDIAN */
  69. .text
  70. .align 4
  71. .globl __ashrdi3
  72. __ashrdi3:
  73. cmpz r2 || ldi r3, #32
  74. jc r14 || cmpu r2, r3
  75. bc 1f
  76. ; case 32 =< shift
  77. mv r0, r1 || srai r1, #31
  78. addi r2, #-32
  79. sra r0, r2
  80. jmp r14
  81. .fillinsn
  82. 1: ; case shift <32
  83. mv r3, r1 || srl r0, r2
  84. sra r1, r2 || neg r2, r2
  85. sll r3, r2
  86. or r0, r3 || jmp r14
  87. .align 4
  88. .globl __ashldi3
  89. .globl __lshldi3
  90. __ashldi3:
  91. __lshldi3:
  92. cmpz r2 || ldi r3, #32
  93. jc r14 || cmpu r2, r3
  94. bc 1f
  95. ; case 32 =< shift
  96. mv r1, r0 || addi r2, #-32
  97. sll r1, r2 || ldi r0, #0
  98. jmp r14
  99. .fillinsn
  100. 1: ; case shift <32
  101. mv r3, r0 || sll r1, r2
  102. sll r0, r2 || neg r2, r2
  103. srl r3, r2
  104. or r1, r3 || jmp r14
  105. .align 4
  106. .globl __lshrdi3
  107. __lshrdi3:
  108. cmpz r2 || ldi r3, #32
  109. jc r14 || cmpu r2, r3
  110. bc 1f
  111. ; case 32 =< shift
  112. mv r0, r1 || addi r2, #-32
  113. ldi r1, #0 || srl r0, r2
  114. jmp r14
  115. .fillinsn
  116. 1: ; case shift <32
  117. mv r3, r1 || srl r0, r2
  118. srl r1, r2 || neg r2, r2
  119. sll r3, r2
  120. or r0, r3 || jmp r14
  121. #endif
  122. #else /* not CONFIG_ISA_DUAL_ISSUE */
  123. #ifndef __LITTLE_ENDIAN__
  124. .text
  125. .align 4
  126. .globl __ashrdi3
  127. __ashrdi3:
  128. beqz r2, 2f
  129. cmpui r2, #32
  130. bc 1f
  131. ; case 32 =< shift
  132. mv r1, r0
  133. srai r0, #31
  134. addi r2, #-32
  135. sra r1, r2
  136. jmp r14
  137. .fillinsn
  138. 1: ; case shift <32
  139. mv r3, r0
  140. srl r1, r2
  141. sra r0, r2
  142. neg r2, r2
  143. sll r3, r2
  144. or r1, r3
  145. .fillinsn
  146. 2:
  147. jmp r14
  148. .align 4
  149. .globl __ashldi3
  150. .globl __lshldi3
  151. __ashldi3:
  152. __lshldi3:
  153. beqz r2, 2f
  154. cmpui r2, #32
  155. bc 1f
  156. ; case 32 =< shift
  157. mv r0, r1
  158. addi r2, #-32
  159. sll r0, r2
  160. ldi r1, #0
  161. jmp r14
  162. .fillinsn
  163. 1: ; case shift <32
  164. mv r3, r1
  165. sll r0, r2
  166. sll r1, r2
  167. neg r2, r2
  168. srl r3, r2
  169. or r0, r3
  170. .fillinsn
  171. 2:
  172. jmp r14
  173. .align 4
  174. .globl __lshrdi3
  175. __lshrdi3:
  176. beqz r2, 2f
  177. cmpui r2, #32
  178. bc 1f
  179. ; case 32 =< shift
  180. mv r1, r0
  181. ldi r0, #0
  182. addi r2, #-32
  183. srl r1, r2
  184. jmp r14
  185. .fillinsn
  186. 1: ; case shift <32
  187. mv r3, r0
  188. srl r1, r2
  189. srl r0, r2
  190. neg r2, r2
  191. sll r3, r2
  192. or r1, r3
  193. .fillinsn
  194. 2:
  195. jmp r14
  196. #else
  197. .text
  198. .align 4
  199. .globl __ashrdi3
  200. __ashrdi3:
  201. beqz r2, 2f
  202. cmpui r2, #32
  203. bc 1f
  204. ; case 32 =< shift
  205. mv r0, r1
  206. srai r1, #31
  207. addi r2, #-32
  208. sra r0, r2
  209. jmp r14
  210. .fillinsn
  211. 1: ; case shift <32
  212. mv r3, r1
  213. srl r0, r2
  214. sra r1, r2
  215. neg r2, r2
  216. sll r3, r2
  217. or r0, r3
  218. .fillinsn
  219. 2:
  220. jmp r14
  221. .align 4
  222. .globl __ashldi3
  223. .globl __lshldi3
  224. __ashldi3:
  225. __lshldi3:
  226. beqz r2, 2f
  227. cmpui r2, #32
  228. bc 1f
  229. ; case 32 =< shift
  230. mv r1, r0
  231. addi r2, #-32
  232. sll r1, r2
  233. ldi r0, #0
  234. jmp r14
  235. .fillinsn
  236. 1: ; case shift <32
  237. mv r3, r0
  238. sll r1, r2
  239. sll r0, r2
  240. neg r2, r2
  241. srl r3, r2
  242. or r1, r3
  243. .fillinsn
  244. 2:
  245. jmp r14
  246. .align 4
  247. .globl __lshrdi3
  248. __lshrdi3:
  249. beqz r2, 2f
  250. cmpui r2, #32
  251. bc 1f
  252. ; case 32 =< shift
  253. mv r0, r1
  254. ldi r1, #0
  255. addi r2, #-32
  256. srl r0, r2
  257. jmp r14
  258. .fillinsn
  259. 1: ; case shift <32
  260. mv r3, r1
  261. srl r0, r2
  262. srl r1, r2
  263. neg r2, r2
  264. sll r3, r2
  265. or r0, r3
  266. .fillinsn
  267. 2:
  268. jmp r14
  269. #endif
  270. #endif /* not CONFIG_ISA_DUAL_ISSUE */
  271. .end