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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_bdiv_dbm1.
  2. dnl  Copyright 2008, 2009 Free Software Foundation, Inc.
  3. dnl  This file is part of the GNU MP Library.
  4. dnl  The GNU MP Library is free software; you can redistribute it and/or modify
  5. dnl  it under the terms of the GNU Lesser General Public License as published
  6. dnl  by the Free Software Foundation; either version 3 of the License, or (at
  7. dnl  your option) any later version.
  8. dnl  The GNU MP Library is distributed in the hope that it will be useful, but
  9. dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. dnl  License for more details.
  12. dnl  You should have received a copy of the GNU Lesser General Public License
  13. dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  14. include(`../config.m4')
  15. C         cycles/limb
  16. C Itanium:    4
  17. C Itanium 2:  2
  18. C TODO
  19. C  * Optimize feed-in and wind-down code, both for speed and code size.
  20. C INPUT PARAMETERS
  21. define(`rp', `r32')
  22. define(`up', `r33')
  23. define(`n', `r34')
  24. define(`bd', `r35')
  25. ASM_START()
  26. PROLOGUE(mpn_bdiv_dbm1c)
  27. .prologue
  28. .save ar.lc, r2
  29. .body
  30. ifdef(`HAVE_ABI_32',
  31. ` addp4 rp = 0, rp C M I
  32. addp4 up = 0, up C M I
  33. zxt4 n = n C I
  34. ;;
  35. ')
  36. {.mmb
  37. mov r15 = r36 C M I
  38. ldf8 f9 = [up], 8 C M
  39. nop.b 0 C B
  40. }
  41. .Lcommon:
  42. {.mii
  43. adds r16 = -1, n C M I
  44. mov r2 = ar.lc C I0
  45. and r14 = 3, n C M I
  46. ;;
  47. }
  48. {.mii
  49. setf.sig f6 = bd C M2 M3
  50. shr.u r31 = r16, 2 C I0
  51. cmp.eq p10, p0 = 0, r14 C M I
  52. }
  53. {.mii
  54. nop.m 0 C M
  55. cmp.eq p11, p0 = 2, r14 C M I
  56. cmp.eq p12, p0 = 3, r14 C M I
  57. ;;
  58. }
  59. {.mii
  60. cmp.ne p6, p7 = r0, r0 C M I
  61. mov.i ar.lc = r31 C I0
  62. cmp.ne p8, p9 = r0, r0 C M I
  63. }
  64. {.bbb
  65.   (p10) br.dptk .Lb00 C B
  66.   (p11) br.dptk .Lb10 C B
  67.   (p12) br.dptk .Lb11 C B
  68. ;;
  69. }
  70. .Lb01: br.cloop.dptk .grt1
  71. ;;
  72. xma.l f38 = f9, f6, f0
  73. xma.hu f39 = f9, f6, f0
  74. ;;
  75. getf.sig r26 = f38
  76. getf.sig r27 = f39
  77. br .Lcj1
  78. .grt1: ldf8 f10 = [r33], 8
  79. ;;
  80. ldf8 f11 = [r33], 8
  81. ;;
  82. ldf8 f12 = [r33], 8
  83. ;;
  84. xma.l f38 = f9, f6, f0
  85. xma.hu f39 = f9, f6, f0
  86. ;;
  87. ldf8 f13 = [r33], 8
  88. ;;
  89. xma.l f32 = f10, f6, f0
  90. xma.hu f33 = f10, f6, f0
  91. br.cloop.dptk .grt5
  92. ;;
  93. getf.sig r26 = f38
  94. xma.l f34 = f11, f6, f0
  95. xma.hu f35 = f11, f6, f0
  96. ;;
  97. getf.sig r27 = f39
  98. ;;
  99. getf.sig r20 = f32
  100. xma.l f36 = f12, f6, f0
  101. xma.hu f37 = f12, f6, f0
  102. ;;
  103. getf.sig r21 = f33
  104. ;;
  105. getf.sig r22 = f34
  106. xma.l f38 = f13, f6, f0
  107. xma.hu f39 = f13, f6, f0
  108. br .Lcj5
  109. .grt5: ldf8 f10 = [r33], 8
  110. ;;
  111. getf.sig r26 = f38
  112. xma.l f34 = f11, f6, f0
  113. xma.hu f35 = f11, f6, f0
  114. ;;
  115. getf.sig r27 = f39
  116. ldf8 f11 = [r33], 8
  117. ;;
  118. getf.sig r20 = f32
  119. xma.l f36 = f12, f6, f0
  120. xma.hu f37 = f12, f6, f0
  121. ;;
  122. getf.sig r21 = f33
  123. ldf8 f12 = [r33], 8
  124. ;;
  125. getf.sig r22 = f34
  126. xma.l f38 = f13, f6, f0
  127. xma.hu f39 = f13, f6, f0
  128. br .LL01
  129. .Lb10: ldf8 f13 = [r33], 8
  130. br.cloop.dptk .grt2
  131. ;;
  132. xma.l f36 = f9, f6, f0
  133. xma.hu f37 = f9, f6, f0
  134. ;;
  135. xma.l f38 = f13, f6, f0
  136. xma.hu f39 = f13, f6, f0
  137. ;;
  138. getf.sig r24 = f36
  139. ;;
  140. getf.sig r25 = f37
  141. ;;
  142. getf.sig r26 = f38
  143. ;;
  144. getf.sig r27 = f39
  145. br .Lcj2
  146. .grt2: ldf8 f10 = [r33], 8
  147. ;;
  148. ldf8 f11 = [r33], 8
  149. ;;
  150. xma.l f36 = f9, f6, f0
  151. xma.hu f37 = f9, f6, f0
  152. ;;
  153. ldf8 f12 = [r33], 8
  154. ;;
  155. xma.l f38 = f13, f6, f0
  156. xma.hu f39 = f13, f6, f0
  157. ;;
  158. ldf8 f13 = [r33], 8
  159. ;;
  160. getf.sig r24 = f36
  161. xma.l f32 = f10, f6, f0
  162. xma.hu f33 = f10, f6, f0
  163. br.cloop.dptk .grt6
  164. getf.sig r25 = f37
  165. ;;
  166. getf.sig r26 = f38
  167. xma.l f34 = f11, f6, f0
  168. xma.hu f35 = f11, f6, f0
  169. ;;
  170. getf.sig r27 = f39
  171. ;;
  172. getf.sig r20 = f32
  173. xma.l f36 = f12, f6, f0
  174. xma.hu f37 = f12, f6, f0
  175. br .Lcj6
  176. .grt6: getf.sig r25 = f37
  177. ldf8 f10 = [r33], 8
  178. ;;
  179. getf.sig r26 = f38
  180. xma.l f34 = f11, f6, f0
  181. xma.hu f35 = f11, f6, f0
  182. ;;
  183. getf.sig r27 = f39
  184. ldf8 f11 = [r33], 8
  185. ;;
  186. getf.sig r20 = f32
  187. xma.l f36 = f12, f6, f0
  188. xma.hu f37 = f12, f6, f0
  189. br .LL10
  190. .Lb11: ldf8 f12 = [r33], 8
  191. ;;
  192. ldf8 f13 = [r33], 8
  193. br.cloop.dptk .grt3
  194. ;;
  195. xma.l f34 = f9, f6, f0
  196. xma.hu f35 = f9, f6, f0
  197. ;;
  198. xma.l f36 = f12, f6, f0
  199. xma.hu f37 = f12, f6, f0
  200. ;;
  201. getf.sig r22 = f34
  202. xma.l f38 = f13, f6, f0
  203. xma.hu f39 = f13, f6, f0
  204. ;;
  205. getf.sig r23 = f35
  206. ;;
  207. getf.sig r24 = f36
  208. ;;
  209. getf.sig r25 = f37
  210. ;;
  211. getf.sig r26 = f38
  212. br .Lcj3
  213. .grt3: ldf8 f10 = [r33], 8
  214. ;;
  215. xma.l f34 = f9, f6, f0
  216. xma.hu f35 = f9, f6, f0
  217. ;;
  218. ldf8 f11 = [r33], 8
  219. ;;
  220. xma.l f36 = f12, f6, f0
  221. xma.hu f37 = f12, f6, f0
  222. ;;
  223. ldf8 f12 = [r33], 8
  224. ;;
  225. getf.sig r22 = f34
  226. xma.l f38 = f13, f6, f0
  227. xma.hu f39 = f13, f6, f0
  228. ;;
  229. getf.sig r23 = f35
  230. ldf8 f13 = [r33], 8
  231. ;;
  232. getf.sig r24 = f36
  233. xma.l f32 = f10, f6, f0
  234. xma.hu f33 = f10, f6, f0
  235. br.cloop.dptk .grt7
  236. getf.sig r25 = f37
  237. ;;
  238. getf.sig r26 = f38
  239. xma.l f34 = f11, f6, f0
  240. xma.hu f35 = f11, f6, f0
  241. br .Lcj7
  242. .grt7: getf.sig r25 = f37
  243. ldf8 f10 = [r33], 8
  244. ;;
  245. getf.sig r26 = f38
  246. xma.l f34 = f11, f6, f0
  247. xma.hu f35 = f11, f6, f0
  248. br .LL11
  249. .Lb00: ldf8 f11 = [r33], 8
  250. ;;
  251. ldf8 f12 = [r33], 8
  252. ;;
  253. ldf8 f13 = [r33], 8
  254. br.cloop.dptk .grt4
  255. ;;
  256. xma.l f32 = f9, f6, f0
  257. xma.hu f33 = f9, f6, f0
  258. ;;
  259. xma.l f34 = f11, f6, f0
  260. xma.hu f35 = f11, f6, f0
  261. ;;
  262. getf.sig r20 = f32
  263. xma.l f36 = f12, f6, f0
  264. xma.hu f37 = f12, f6, f0
  265. ;;
  266. getf.sig r21 = f33
  267. ;;
  268. getf.sig r22 = f34
  269. xma.l f38 = f13, f6, f0
  270. xma.hu f39 = f13, f6, f0
  271. ;;
  272. getf.sig r23 = f35
  273. ;;
  274. getf.sig r24 = f36
  275. br .Lcj4
  276. .grt4: xma.l f32 = f9, f6, f0
  277. xma.hu f33 = f9, f6, f0
  278. ;;
  279. ldf8 f10 = [r33], 8
  280. ;;
  281. xma.l f34 = f11, f6, f0
  282. xma.hu f35 = f11, f6, f0
  283. ;;
  284. ldf8 f11 = [r33], 8
  285. ;;
  286. getf.sig r20 = f32
  287. xma.l f36 = f12, f6, f0
  288. xma.hu f37 = f12, f6, f0
  289. ;;
  290. getf.sig r21 = f33
  291. ldf8 f12 = [r33], 8
  292. ;;
  293. getf.sig r22 = f34
  294. xma.l f38 = f13, f6, f0
  295. xma.hu f39 = f13, f6, f0
  296. ;;
  297. getf.sig r23 = f35
  298. ldf8 f13 = [r33], 8
  299. ;;
  300. getf.sig r24 = f36
  301. xma.l f32 = f10, f6, f0
  302. xma.hu f33 = f10, f6, f0
  303. br.cloop.dptk .LL00
  304. br .Lcj8
  305. C *** MAIN LOOP START ***
  306. ALIGN(32)
  307. .Ltop:
  308. .pred.rel "mutex",p6,p7
  309. C .mfi
  310. getf.sig r24 = f36
  311. xma.l f32 = f10, f6, f0
  312.   (p6) sub r15 = r19, r27, 1
  313. C .mfi
  314. st8 [r32] = r19, 8
  315. xma.hu f33 = f10, f6, f0
  316.   (p7) sub r15 = r19, r27
  317. ;;
  318. .LL00:
  319. C .mfi
  320. getf.sig r25 = f37
  321. nop.f 0
  322. cmp.ltu p6, p7 = r15, r20
  323. C .mib
  324. ldf8 f10 = [r33], 8
  325. sub r16 = r15, r20
  326. nop.b 0
  327. ;;
  328. C .mfi
  329. getf.sig r26 = f38
  330. xma.l f34 = f11, f6, f0
  331.   (p6) sub r15 = r16, r21, 1
  332. C .mfi
  333. st8 [r32] = r16, 8
  334. xma.hu f35 = f11, f6, f0
  335.   (p7) sub r15 = r16, r21
  336. ;;
  337. .LL11:
  338. C .mfi
  339. getf.sig r27 = f39
  340. nop.f 0
  341. cmp.ltu p6, p7 = r15, r22
  342. C .mib
  343. ldf8 f11 = [r33], 8
  344. sub r17 = r15, r22
  345. nop.b 0
  346. ;;
  347. C .mfi
  348. getf.sig r20 = f32
  349. xma.l f36 = f12, f6, f0
  350.   (p6) sub r15 = r17, r23, 1
  351. C .mfi
  352. st8 [r32] = r17, 8
  353. xma.hu f37 = f12, f6, f0
  354.   (p7) sub r15 = r17, r23
  355. ;;
  356. .LL10:
  357. C .mfi
  358. getf.sig r21 = f33
  359. nop.f 0
  360. cmp.ltu p6, p7 = r15, r24
  361. C .mib
  362. ldf8 f12 = [r33], 8
  363. sub r18 = r15, r24
  364. nop.b 0
  365. ;;
  366. C .mfi
  367. getf.sig r22 = f34
  368. xma.l f38 = f13, f6, f0
  369.   (p6) sub r15 = r18, r25, 1
  370. C .mfi
  371. st8 [r32] = r18, 8
  372. xma.hu f39 = f13, f6, f0
  373.   (p7) sub r15 = r18, r25
  374. ;;
  375. .LL01:
  376. C .mfi
  377. getf.sig r23 = f35
  378. nop.f 0
  379. cmp.ltu p6, p7 = r15, r26
  380. C .mib
  381. ldf8 f13 = [r33], 8
  382. sub r19 = r15, r26
  383. br.cloop.sptk.few .Ltop
  384. C *** MAIN LOOP END ***
  385. ;;
  386. getf.sig r24 = f36
  387. xma.l f32 = f10, f6, f0
  388.   (p6) sub r15 = r19, r27, 1
  389. st8 [r32] = r19, 8
  390. xma.hu f33 = f10, f6, f0
  391.   (p7) sub r15 = r19, r27
  392. ;;
  393. .Lcj8: getf.sig r25 = f37
  394. cmp.ltu p6, p7 = r15, r20
  395. sub r16 = r15, r20
  396. ;;
  397. getf.sig r26 = f38
  398. xma.l f34 = f11, f6, f0
  399.   (p6) sub r15 = r16, r21, 1
  400. st8 [r32] = r16, 8
  401. xma.hu f35 = f11, f6, f0
  402.   (p7) sub r15 = r16, r21
  403. ;;
  404. .Lcj7: getf.sig r27 = f39
  405. cmp.ltu p6, p7 = r15, r22
  406. sub r17 = r15, r22
  407. ;;
  408. getf.sig r20 = f32
  409. xma.l f36 = f12, f6, f0
  410.   (p6) sub r15 = r17, r23, 1
  411. st8 [r32] = r17, 8
  412. xma.hu f37 = f12, f6, f0
  413.   (p7) sub r15 = r17, r23
  414. ;;
  415. .Lcj6: getf.sig r21 = f33
  416. cmp.ltu p6, p7 = r15, r24
  417. sub r18 = r15, r24
  418. ;;
  419. getf.sig r22 = f34
  420. xma.l f38 = f13, f6, f0
  421.   (p6) sub r15 = r18, r25, 1
  422. st8 [r32] = r18, 8
  423. xma.hu f39 = f13, f6, f0
  424.   (p7) sub r15 = r18, r25
  425. ;;
  426. .Lcj5: getf.sig r23 = f35
  427. cmp.ltu p6, p7 = r15, r26
  428. sub r19 = r15, r26
  429. ;;
  430. getf.sig r24 = f36
  431.   (p6) sub r15 = r19, r27, 1
  432. st8 [r32] = r19, 8
  433.   (p7) sub r15 = r19, r27
  434. ;;
  435. .Lcj4: getf.sig r25 = f37
  436. cmp.ltu p6, p7 = r15, r20
  437. sub r16 = r15, r20
  438. ;;
  439. getf.sig r26 = f38
  440.   (p6) sub r15 = r16, r21, 1
  441. st8 [r32] = r16, 8
  442.   (p7) sub r15 = r16, r21
  443. ;;
  444. .Lcj3: getf.sig r27 = f39
  445. cmp.ltu p6, p7 = r15, r22
  446. sub r17 = r15, r22
  447. ;;
  448.   (p6) sub r15 = r17, r23, 1
  449. st8 [r32] = r17, 8
  450.   (p7) sub r15 = r17, r23
  451. ;;
  452. .Lcj2: cmp.ltu p6, p7 = r15, r24
  453. sub r18 = r15, r24
  454. ;;
  455.   (p6) sub r15 = r18, r25, 1
  456. st8 [r32] = r18, 8
  457.   (p7) sub r15 = r18, r25
  458. ;;
  459. .Lcj1: cmp.ltu p6, p7 = r15, r26
  460. sub r19 = r15, r26
  461. ;;
  462.   (p6) sub r8 = r19, r27, 1
  463. st8 [r32] = r19
  464.   (p7) sub r8 = r19, r27
  465. mov ar.lc = r2
  466. br.ret.sptk.many b0
  467. EPILOGUE()
  468. ASM_END()