ashxdi3.S 4.9 KB

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