ashxdi3.S 4.9 KB

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