udiv.asm
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:6k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. dnl  HP-PA  __udiv_qrnnd division support, used from longlong.h.
  2. dnl  This version runs fast on pre-PA7000 CPUs.
  3. dnl  Copyright 1993, 1994, 2000, 2001, 2002 Free Software Foundation, Inc.
  4. dnl  This file is part of the GNU MP Library.
  5. dnl  The GNU MP Library is free software; you can redistribute it and/or modify
  6. dnl  it under the terms of the GNU Lesser General Public License as published
  7. dnl  by the Free Software Foundation; either version 3 of the License, or (at
  8. dnl  your option) any later version.
  9. dnl  The GNU MP Library is distributed in the hope that it will be useful, but
  10. dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  12. dnl  License for more details.
  13. dnl  You should have received a copy of the GNU Lesser General Public License
  14. dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  15. include(`../config.m4')
  16. C INPUT PARAMETERS
  17. C rem_ptr gr26
  18. C n1 gr25
  19. C n0 gr24
  20. C d gr23
  21. C The code size is a bit excessive.  We could merge the last two ds;addc
  22. C sequences by simply moving the "bb,< Odd" instruction down.  The only
  23. C trouble is the FFFFFFFF code that would need some hacking.
  24. ASM_START()
  25. PROLOGUE(mpn_udiv_qrnnd)
  26. comb,< %r23,0,L(largedivisor)
  27.  sub %r0,%r23,%r1 C clear cy as side-effect
  28. ds %r0,%r1,%r0
  29. addc %r24,%r24,%r24
  30. ds %r25,%r23,%r25
  31. addc %r24,%r24,%r24
  32. ds %r25,%r23,%r25
  33. addc %r24,%r24,%r24
  34. ds %r25,%r23,%r25
  35. addc %r24,%r24,%r24
  36. ds %r25,%r23,%r25
  37. addc %r24,%r24,%r24
  38. ds %r25,%r23,%r25
  39. addc %r24,%r24,%r24
  40. ds %r25,%r23,%r25
  41. addc %r24,%r24,%r24
  42. ds %r25,%r23,%r25
  43. addc %r24,%r24,%r24
  44. ds %r25,%r23,%r25
  45. addc %r24,%r24,%r24
  46. ds %r25,%r23,%r25
  47. addc %r24,%r24,%r24
  48. ds %r25,%r23,%r25
  49. addc %r24,%r24,%r24
  50. ds %r25,%r23,%r25
  51. addc %r24,%r24,%r24
  52. ds %r25,%r23,%r25
  53. addc %r24,%r24,%r24
  54. ds %r25,%r23,%r25
  55. addc %r24,%r24,%r24
  56. ds %r25,%r23,%r25
  57. addc %r24,%r24,%r24
  58. ds %r25,%r23,%r25
  59. addc %r24,%r24,%r24
  60. ds %r25,%r23,%r25
  61. addc %r24,%r24,%r24
  62. ds %r25,%r23,%r25
  63. addc %r24,%r24,%r24
  64. ds %r25,%r23,%r25
  65. addc %r24,%r24,%r24
  66. ds %r25,%r23,%r25
  67. addc %r24,%r24,%r24
  68. ds %r25,%r23,%r25
  69. addc %r24,%r24,%r24
  70. ds %r25,%r23,%r25
  71. addc %r24,%r24,%r24
  72. ds %r25,%r23,%r25
  73. addc %r24,%r24,%r24
  74. ds %r25,%r23,%r25
  75. addc %r24,%r24,%r24
  76. ds %r25,%r23,%r25
  77. addc %r24,%r24,%r24
  78. ds %r25,%r23,%r25
  79. addc %r24,%r24,%r24
  80. ds %r25,%r23,%r25
  81. addc %r24,%r24,%r24
  82. ds %r25,%r23,%r25
  83. addc %r24,%r24,%r24
  84. ds %r25,%r23,%r25
  85. addc %r24,%r24,%r24
  86. ds %r25,%r23,%r25
  87. addc %r24,%r24,%r24
  88. ds %r25,%r23,%r25
  89. addc %r24,%r24,%r24
  90. ds %r25,%r23,%r25
  91. addc %r24,%r24,%r28
  92. ds %r25,%r23,%r25
  93. comclr,>= %r25,%r0,%r0
  94. addl %r25,%r23,%r25
  95. stws %r25,0(0,%r26)
  96. bv 0(%r2)
  97.  addc %r28,%r28,%r28
  98. LDEF(largedivisor)
  99. extru %r24,31,1,%r19 C r19 = n0 & 1
  100. bb,< %r23,31,L(odd)
  101.  extru %r23,30,31,%r22 C r22 = d >> 1
  102. shd %r25,%r24,1,%r24 C r24 = new n0
  103. extru %r25,30,31,%r25 C r25 = new n1
  104. sub %r0,%r22,%r21
  105. ds %r0,%r21,%r0
  106. addc %r24,%r24,%r24
  107. ds %r25,%r22,%r25
  108. addc %r24,%r24,%r24
  109. ds %r25,%r22,%r25
  110. addc %r24,%r24,%r24
  111. ds %r25,%r22,%r25
  112. addc %r24,%r24,%r24
  113. ds %r25,%r22,%r25
  114. addc %r24,%r24,%r24
  115. ds %r25,%r22,%r25
  116. addc %r24,%r24,%r24
  117. ds %r25,%r22,%r25
  118. addc %r24,%r24,%r24
  119. ds %r25,%r22,%r25
  120. addc %r24,%r24,%r24
  121. ds %r25,%r22,%r25
  122. addc %r24,%r24,%r24
  123. ds %r25,%r22,%r25
  124. addc %r24,%r24,%r24
  125. ds %r25,%r22,%r25
  126. addc %r24,%r24,%r24
  127. ds %r25,%r22,%r25
  128. addc %r24,%r24,%r24
  129. ds %r25,%r22,%r25
  130. addc %r24,%r24,%r24
  131. ds %r25,%r22,%r25
  132. addc %r24,%r24,%r24
  133. ds %r25,%r22,%r25
  134. addc %r24,%r24,%r24
  135. ds %r25,%r22,%r25
  136. addc %r24,%r24,%r24
  137. ds %r25,%r22,%r25
  138. addc %r24,%r24,%r24
  139. ds %r25,%r22,%r25
  140. addc %r24,%r24,%r24
  141. ds %r25,%r22,%r25
  142. addc %r24,%r24,%r24
  143. ds %r25,%r22,%r25
  144. addc %r24,%r24,%r24
  145. ds %r25,%r22,%r25
  146. addc %r24,%r24,%r24
  147. ds %r25,%r22,%r25
  148. addc %r24,%r24,%r24
  149. ds %r25,%r22,%r25
  150. addc %r24,%r24,%r24
  151. ds %r25,%r22,%r25
  152. addc %r24,%r24,%r24
  153. ds %r25,%r22,%r25
  154. addc %r24,%r24,%r24
  155. ds %r25,%r22,%r25
  156. addc %r24,%r24,%r24
  157. ds %r25,%r22,%r25
  158. addc %r24,%r24,%r24
  159. ds %r25,%r22,%r25
  160. addc %r24,%r24,%r24
  161. ds %r25,%r22,%r25
  162. addc %r24,%r24,%r24
  163. ds %r25,%r22,%r25
  164. addc %r24,%r24,%r24
  165. ds %r25,%r22,%r25
  166. addc %r24,%r24,%r24
  167. ds %r25,%r22,%r25
  168. addc %r24,%r24,%r24
  169. ds %r25,%r22,%r25
  170. comclr,>= %r25,%r0,%r0
  171. addl %r25,%r22,%r25
  172. sh1addl %r25,%r19,%r25
  173. stws %r25,0(0,%r26)
  174. bv 0(%r2)
  175.  addc %r24,%r24,%r28
  176. LDEF(odd)
  177. addib,sv,n 1,%r22,L(FFFFFFFF) C r22 = (d / 2 + 1)
  178. shd %r25,%r24,1,%r24 C r24 = new n0
  179. extru %r25,30,31,%r25 C r25 = new n1
  180. sub %r0,%r22,%r21
  181. ds %r0,%r21,%r0
  182. addc %r24,%r24,%r24
  183. ds %r25,%r22,%r25
  184. addc %r24,%r24,%r24
  185. ds %r25,%r22,%r25
  186. addc %r24,%r24,%r24
  187. ds %r25,%r22,%r25
  188. addc %r24,%r24,%r24
  189. ds %r25,%r22,%r25
  190. addc %r24,%r24,%r24
  191. ds %r25,%r22,%r25
  192. addc %r24,%r24,%r24
  193. ds %r25,%r22,%r25
  194. addc %r24,%r24,%r24
  195. ds %r25,%r22,%r25
  196. addc %r24,%r24,%r24
  197. ds %r25,%r22,%r25
  198. addc %r24,%r24,%r24
  199. ds %r25,%r22,%r25
  200. addc %r24,%r24,%r24
  201. ds %r25,%r22,%r25
  202. addc %r24,%r24,%r24
  203. ds %r25,%r22,%r25
  204. addc %r24,%r24,%r24
  205. ds %r25,%r22,%r25
  206. addc %r24,%r24,%r24
  207. ds %r25,%r22,%r25
  208. addc %r24,%r24,%r24
  209. ds %r25,%r22,%r25
  210. addc %r24,%r24,%r24
  211. ds %r25,%r22,%r25
  212. addc %r24,%r24,%r24
  213. ds %r25,%r22,%r25
  214. addc %r24,%r24,%r24
  215. ds %r25,%r22,%r25
  216. addc %r24,%r24,%r24
  217. ds %r25,%r22,%r25
  218. addc %r24,%r24,%r24
  219. ds %r25,%r22,%r25
  220. addc %r24,%r24,%r24
  221. ds %r25,%r22,%r25
  222. addc %r24,%r24,%r24
  223. ds %r25,%r22,%r25
  224. addc %r24,%r24,%r24
  225. ds %r25,%r22,%r25
  226. addc %r24,%r24,%r24
  227. ds %r25,%r22,%r25
  228. addc %r24,%r24,%r24
  229. ds %r25,%r22,%r25
  230. addc %r24,%r24,%r24
  231. ds %r25,%r22,%r25
  232. addc %r24,%r24,%r24
  233. ds %r25,%r22,%r25
  234. addc %r24,%r24,%r24
  235. ds %r25,%r22,%r25
  236. addc %r24,%r24,%r24
  237. ds %r25,%r22,%r25
  238. addc %r24,%r24,%r24
  239. ds %r25,%r22,%r25
  240. addc %r24,%r24,%r24
  241. ds %r25,%r22,%r25
  242. addc %r24,%r24,%r24
  243. ds %r25,%r22,%r25
  244. addc %r24,%r24,%r24
  245. ds %r25,%r22,%r25
  246. addc %r24,%r24,%r28
  247. comclr,>= %r25,%r0,%r0
  248. addl %r25,%r22,%r25
  249. sh1addl %r25,%r19,%r25
  250. C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
  251. add,nuv %r28,%r25,%r25
  252. addl %r25,%r1,%r25
  253. addc %r0,%r28,%r28
  254. sub,<< %r25,%r23,%r0
  255. addl %r25,%r1,%r25
  256. stws %r25,0(0,%r26)
  257. bv 0(%r2)
  258.  addc %r0,%r28,%r28
  259. C This is just a special case of the code above.
  260. C We come here when d == 0xFFFFFFFF
  261. LDEF(FFFFFFFF)
  262. add,uv %r25,%r24,%r24
  263. sub,<< %r24,%r23,%r0
  264. ldo 1(%r24),%r24
  265. stws %r24,0(0,%r26)
  266. bv 0(%r2)
  267.  addc %r0,%r25,%r28
  268. EPILOGUE()