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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_addmul_2 -- Multiply a n-limb number with a 2-limb number and
  2. dnl  add the result to a (n+1)-limb number.
  3. dnl  Copyright 2004, 2005 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         cycles/limb
  17. C Itanium:    3.65
  18. C Itanium 2:  1.625
  19. C Note that this is very similar to mul_2.asm.  If you change this file,
  20. C please change that file too.
  21. C TODO
  22. C  * Clean up variable names, and try to decrease the number of distinct
  23. C    registers used.
  24. C  * Cleanup feed-in code to not require zeroing several registers.
  25. C  * Make sure we don't depend on uninitialized predicate registers.
  26. C  * We currently cross-jump very aggressively, at the expense of a few cycles
  27. C    per operation.  Consider changing that.
  28. C  * Could perhaps save a few cycles by using 1 c/l carry propagation in
  29. C    wind-down code.
  30. C  * Ultimately rewrite.  The problem with this code is that it first uses a
  31. C    loaded u value in one xma pair, then leaves it live over several unrelated
  32. C    xma pairs, before it uses it again.  It should actually be quite possible
  33. C    to just swap some aligned xma pairs around.  But we should then schedule
  34. C    u loads further from the first use.
  35. C INPUT PARAMETERS
  36. define(`rp',`r32')
  37. define(`up',`r33')
  38. define(`n',`r34')
  39. define(`vp',`r35')
  40. define(`srp',`r3')
  41. define(`v0',`f6')
  42. define(`v1',`f7')
  43. define(`s0',`r14')
  44. define(`acc0',`r15')
  45. define(`pr0_0',`r16') define(`pr0_1',`r17')
  46. define(`pr0_2',`r18') define(`pr0_3',`r19')
  47. define(`pr1_0',`r20') define(`pr1_1',`r21')
  48. define(`pr1_2',`r22') define(`pr1_3',`r23')
  49. define(`acc1_0',`r24') define(`acc1_1',`r25')
  50. define(`acc1_2',`r26') define(`acc1_3',`r27')
  51. dnl define(`',`r28')
  52. dnl define(`',`r29')
  53. dnl define(`',`r30')
  54. dnl define(`',`r31')
  55. define(`fp0b_0',`f8') define(`fp0b_1',`f9')
  56. define(`fp0b_2',`f10') define(`fp0b_3',`f11')
  57. define(`fp1a_0',`f12') define(`fp1a_1',`f13')
  58. define(`fp1a_2',`f14') define(`fp1a_3',`f15')
  59. define(`fp1b_0',`f32') define(`fp1b_1',`f33')
  60. define(`fp1b_2',`f34') define(`fp1b_3',`f35')
  61. define(`fp2a_0',`f36') define(`fp2a_1',`f37')
  62. define(`fp2a_2',`f38') define(`fp2a_3',`f39')
  63. define(`r_0',`f40') define(`r_1',`f41')
  64. define(`r_2',`f42') define(`r_3',`f43')
  65. define(`u_0',`f44') define(`u_1',`f45')
  66. define(`u_2',`f46') define(`u_3',`f47')
  67. define(`rx',`f48')
  68. define(`ux',`f49')
  69. define(`ry',`f50')
  70. define(`uy',`f51')
  71. ASM_START()
  72. PROLOGUE(mpn_addmul_2)
  73. .prologue
  74. .save ar.lc, r2
  75. .body
  76. ifdef(`HAVE_ABI_32',
  77. ` addp4 rp = 0, rp C M I
  78. addp4 up = 0, up C M I
  79. addp4 vp = 0, vp C M I
  80. zxt4 n = n C I
  81. ;;')
  82. {.mmi C 00
  83. ldf8 ux = [up], 8 C M
  84. ldf8 v0 = [vp], 8 C M
  85. mov.i r2 = ar.lc C I0
  86. }{.mmi
  87. ldf8 rx = [rp], 8 C M
  88. and r14 = 3, n C M I
  89. add n = -2, n C M I
  90. ;;
  91. }{.mmi C 01
  92. ldf8 uy = [up], 8 C M
  93. ldf8 v1 = [vp] C M
  94. shr.u n = n, 2 C I0
  95. }{.mmi
  96. ldf8 ry = [rp], -8 C M
  97. cmp.eq p10, p0 = 1, r14 C M I
  98. cmp.eq p11, p0 = 2, r14 C M I
  99. ;;
  100. }{.mmi C 02
  101. add srp = 16, rp C M I
  102. cmp.eq p12, p0 = 3, r14 C M I
  103. mov.i ar.lc = n C I0
  104. }{.bbb
  105.   (p10) br.dptk .Lb01 C B
  106.   (p11) br.dptk .Lb10 C B
  107.   (p12) br.dptk .Lb11 C B
  108. ;;
  109. }
  110. ALIGN(32)
  111. .Lb00: ldf8 r_1 = [srp], 8
  112. ldf8 u_1 = [up], 8
  113. mov acc1_2 = 0
  114. mov pr1_2 = 0
  115. mov pr0_3 = 0
  116. cmp.ne p8, p9 = r0, r0
  117. ;;
  118. ldf8 r_2 = [srp], 8
  119. xma.l fp0b_3 = ux, v0, rx
  120. cmp.ne p12, p13 = r0, r0
  121. ldf8 u_2 = [up], 8
  122. xma.hu fp1a_3 = ux, v0, rx
  123. br.cloop.dptk .grt4
  124. xma.l fp0b_0 = uy, v0, ry
  125. xma.hu fp1a_0 = uy, v0, ry
  126. ;;
  127. getf.sig acc0 = fp0b_3
  128. xma.l fp1b_3 = ux, v1, fp1a_3
  129. xma.hu fp2a_3 = ux, v1, fp1a_3
  130. ;;
  131. xma.l fp0b_1 = u_1, v0, r_1
  132. xma.hu fp1a_1 = u_1, v0, r_1
  133. ;;
  134. getf.sig pr0_0 = fp0b_0
  135. xma.l fp1b_0 = uy, v1, fp1a_0
  136. xma.hu fp2a_0 = uy, v1, fp1a_0
  137. ;;
  138. getf.sig pr1_3 = fp1b_3
  139. getf.sig acc1_3 = fp2a_3
  140. xma.l fp0b_2 = u_2, v0, r_2
  141. xma.hu fp1a_2 = u_2, v0, r_2
  142. br .Lcj4
  143. .grt4: xma.l fp0b_0 = uy, v0, ry
  144. xma.hu fp1a_0 = uy, v0, ry
  145. ;;
  146. ldf8 r_3 = [srp], 8
  147. getf.sig acc0 = fp0b_3
  148. xma.l fp1b_3 = ux, v1, fp1a_3
  149. ldf8 u_3 = [up], 8
  150. xma.hu fp2a_3 = ux, v1, fp1a_3
  151. ;;
  152. xma.l fp0b_1 = u_1, v0, r_1
  153. xma.hu fp1a_1 = u_1, v0, r_1
  154. ;;
  155. ldf8 r_0 = [srp], 8
  156. getf.sig pr0_0 = fp0b_0
  157. xma.l fp1b_0 = uy, v1, fp1a_0
  158. xma.hu fp2a_0 = uy, v1, fp1a_0
  159. ;;
  160. ldf8 u_0 = [up], 8
  161. getf.sig pr1_3 = fp1b_3
  162. ;;
  163. getf.sig acc1_3 = fp2a_3
  164. xma.l fp0b_2 = u_2, v0, r_2
  165. xma.hu fp1a_2 = u_2, v0, r_2
  166. br .LL00
  167. ALIGN(32)
  168. .Lb01: ldf8 r_0 = [srp], 8 C M
  169. ldf8 u_0 = [up], 8 C M
  170. mov acc1_1 = 0 C M I
  171. mov pr1_1 = 0 C M I
  172. mov pr0_2 = 0 C M I
  173. cmp.ne p6, p7 = r0, r0 C M I
  174. ;;
  175. ldf8 r_1 = [srp], 8 C M
  176. xma.l fp0b_2 = ux, v0, rx C F
  177. cmp.ne p10, p11 = r0, r0 C M I
  178. ldf8 u_1 = [up], 8 C M
  179. xma.hu fp1a_2 = ux, v0, rx C F
  180. ;;
  181. xma.l fp0b_3 = uy, v0, ry C F
  182. xma.hu fp1a_3 = uy, v0, ry C F
  183. ;;
  184. getf.sig acc0 = fp0b_2 C M
  185. ldf8 r_2 = [srp], 8 C M
  186. xma.l fp1b_2 = ux, v1,fp1a_2 C F
  187. xma.hu fp2a_2 = ux, v1,fp1a_2 C F
  188. ldf8 u_2 = [up], 8 C M
  189. br.cloop.dptk .grt5
  190. xma.l fp0b_0 = u_0, v0, r_0 C F
  191. xma.hu fp1a_0 = u_0, v0, r_0 C F
  192. ;;
  193. getf.sig pr0_3 = fp0b_3 C M
  194. xma.l fp1b_3 = uy, v1,fp1a_3 C F
  195. xma.hu fp2a_3 = uy, v1,fp1a_3 C F
  196. ;;
  197. getf.sig pr1_2 = fp1b_2 C M
  198. getf.sig acc1_2 = fp2a_2 C M
  199. xma.l fp0b_1 = u_1, v0, r_1 C F
  200. xma.hu fp1a_1 = u_1, v0, r_1 C F
  201. br .Lcj5
  202. .grt5: xma.l fp0b_0 = u_0, v0, r_0
  203. xma.hu fp1a_0 = u_0, v0, r_0
  204. ;;
  205. getf.sig pr0_3 = fp0b_3
  206. ldf8 r_3 = [srp], 8
  207. xma.l fp1b_3 = uy, v1, fp1a_3
  208. xma.hu fp2a_3 = uy, v1, fp1a_3
  209. ;;
  210. ldf8 u_3 = [up], 8
  211. getf.sig pr1_2 = fp1b_2
  212. ;;
  213. getf.sig acc1_2 = fp2a_2
  214. xma.l fp0b_1 = u_1, v0, r_1
  215. xma.hu fp1a_1 = u_1, v0, r_1
  216. br .LL01
  217. ALIGN(32)
  218. .Lb10: C 03
  219. br.cloop.dptk .grt2
  220. C 04
  221. C 05
  222. C 06
  223. xma.l fp0b_1 = ux, v0, rx
  224. xma.hu fp1a_1 = ux, v0, rx
  225. ;; C 07
  226. xma.l fp0b_2 = uy, v0, ry
  227. xma.hu fp1a_2 = uy, v0, ry
  228. ;; C 08
  229. C 09
  230. C 10
  231. stf8 [rp] = fp0b_1, 8
  232. xma.l fp1b_1 = ux, v1, fp1a_1
  233. xma.hu fp2a_1 = ux, v1, fp1a_1
  234. ;; C 11
  235. getf.sig acc0 = fp0b_2
  236. xma.l fp1b_2 = uy, v1, fp1a_2
  237. xma.hu fp2a_2 = uy, v1, fp1a_2
  238. ;; C 12
  239. C 13
  240. C 14
  241. getf.sig pr1_1 = fp1b_1
  242. C 15
  243. getf.sig acc1_1 = fp2a_1
  244. C 16
  245. getf.sig pr1_2 = fp1b_2
  246. C 17
  247. getf.sig r8 = fp2a_2
  248. ;; C 18
  249. C 19
  250. add s0 = pr1_1, acc0
  251. ;; C 20
  252. st8 [rp] = s0, 8
  253. cmp.ltu p8, p9 = s0, pr1_1
  254. sub r31 = -1, acc1_1
  255. ;; C 21
  256. .pred.rel "mutex", p8, p9
  257.   (p8) add acc0 = pr1_2, acc1_1, 1
  258.   (p9) add acc0 = pr1_2, acc1_1
  259.   (p8) cmp.leu p10, p0 = r31, pr1_2
  260.   (p9) cmp.ltu p10, p0 = r31, pr1_2
  261. ;; C 22
  262. st8 [rp] = acc0, 8
  263. mov.i ar.lc = r2
  264.   (p10) add r8 = 1, r8
  265. br.ret.sptk.many b0
  266. .grt2: ldf8 r_3 = [srp], 8
  267. ldf8 u_3 = [up], 8
  268. mov acc1_0 = 0
  269. ;;
  270. ldf8 r_0 = [srp], 8
  271. xma.l fp0b_1 = ux, v0, rx
  272. mov pr1_0 = 0
  273. ldf8 u_0 = [up], 8
  274. xma.hu fp1a_1 = ux, v0, rx
  275. mov pr0_1 = 0
  276. ;;
  277. xma.l fp0b_2 = uy, v0, ry
  278. xma.hu fp1a_2 = uy, v0, ry
  279. ;;
  280. getf.sig acc0 = fp0b_1
  281. ldf8 r_1 = [srp], 8
  282. xma.l fp1b_1 = ux, v1, fp1a_1
  283. xma.hu fp2a_1 = ux, v1, fp1a_1
  284. ;;
  285. ldf8 u_1 = [up], 8
  286. xma.l fp0b_3 = u_3, v0, r_3
  287. xma.hu fp1a_3 = u_3, v0, r_3
  288. ;;
  289. getf.sig pr0_2 = fp0b_2
  290. ldf8 r_2 = [srp], 8
  291. xma.l fp1b_2 = uy, v1, fp1a_2
  292. xma.hu fp2a_2 = uy, v1, fp1a_2
  293. ;;
  294. ldf8 u_2 = [up], 8
  295. getf.sig pr1_1 = fp1b_1
  296. ;;
  297. getf.sig acc1_1 = fp2a_1
  298. xma.l fp0b_0 = u_0, v0, r_0
  299. cmp.ne p8, p9 = r0, r0
  300. cmp.ne p12, p13 = r0, r0
  301. xma.hu fp1a_0 = u_0, v0, r_0
  302. br .LL10
  303. ALIGN(32)
  304. .Lb11: mov acc1_3 = 0
  305. mov pr1_3 = 0
  306. mov pr0_0 = 0
  307. cmp.ne p6, p7 = r0, r0
  308. ;;
  309. ldf8 r_2 = [srp], 8
  310. ldf8 u_2 = [up], 8
  311. br.cloop.dptk .grt3
  312. ;;
  313. xma.l fp0b_0 = ux, v0, rx
  314. xma.hu fp1a_0 = ux, v0, rx
  315. ;;
  316. cmp.ne p10, p11 = r0, r0
  317. xma.l fp0b_1 = uy, v0, ry
  318. xma.hu fp1a_1 = uy, v0, ry
  319. ;;
  320. getf.sig acc0 = fp0b_0
  321. xma.l fp1b_0 = ux, v1, fp1a_0
  322. xma.hu fp2a_0 = ux, v1, fp1a_0
  323. ;;
  324. xma.l fp0b_2 = u_2, v0, r_2
  325. xma.hu fp1a_2 = u_2, v0, r_2
  326. ;;
  327. getf.sig pr0_1 = fp0b_1
  328. xma.l fp1b_1 = uy, v1, fp1a_1
  329. xma.hu fp2a_1 = uy, v1, fp1a_1
  330. ;;
  331. getf.sig pr1_0 = fp1b_0
  332. getf.sig acc1_0 = fp2a_0
  333. br .Lcj3
  334. .grt3: ldf8 r_3 = [srp], 8
  335. xma.l fp0b_0 = ux, v0, rx
  336. cmp.ne p10, p11 = r0, r0
  337. ldf8 u_3 = [up], 8
  338. xma.hu fp1a_0 = ux, v0, rx
  339. ;;
  340. xma.l fp0b_1 = uy, v0, ry
  341. xma.hu fp1a_1 = uy, v0, ry
  342. ;;
  343. getf.sig acc0 = fp0b_0
  344. ldf8 r_0 = [srp], 8
  345. xma.l fp1b_0 = ux, v1, fp1a_0
  346. ldf8 u_0 = [up], 8
  347. xma.hu fp2a_0 = ux, v1, fp1a_0
  348. ;;
  349. xma.l fp0b_2 = u_2, v0, r_2
  350. xma.hu fp1a_2 = u_2, v0, r_2
  351. ;;
  352. getf.sig pr0_1 = fp0b_1
  353. ldf8 r_1 = [srp], 8
  354. xma.l fp1b_1 = uy, v1, fp1a_1
  355. xma.hu fp2a_1 = uy, v1, fp1a_1
  356. ;;
  357. ldf8 u_1 = [up], 8
  358. getf.sig pr1_0 = fp1b_0
  359. ;;
  360. getf.sig acc1_0 = fp2a_0
  361. xma.l fp0b_3 = u_3, v0, r_3
  362. xma.hu fp1a_3 = u_3, v0, r_3
  363. br .LL11
  364. C *** MAIN LOOP START ***
  365. ALIGN(32)
  366. .Loop: C 00
  367. .pred.rel "mutex", p12, p13
  368. getf.sig pr0_3 = fp0b_3
  369. ldf8 r_3 = [srp], 8
  370. xma.l fp1b_3 = u_3, v1, fp1a_3
  371.   (p12) add s0 = pr1_0, acc0, 1
  372.   (p13) add s0 = pr1_0, acc0
  373. xma.hu fp2a_3 = u_3, v1, fp1a_3
  374. ;; C 01
  375. .pred.rel "mutex", p8, p9
  376. .pred.rel "mutex", p12, p13
  377. ldf8 u_3 = [up], 8
  378. getf.sig pr1_2 = fp1b_2
  379.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  380.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  381.   (p12) cmp.leu p10, p11 = s0, pr1_0
  382.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  383. ;; C 02
  384. .pred.rel "mutex", p6, p7
  385. getf.sig acc1_2 = fp2a_2
  386. st8 [rp] = s0, 8
  387. xma.l fp0b_1 = u_1, v0, r_1
  388.   (p6) add acc0 = pr0_2, acc1_0, 1
  389.   (p7) add acc0 = pr0_2, acc1_0
  390. xma.hu fp1a_1 = u_1, v0, r_1
  391. ;; C 03
  392. .LL01:
  393. .pred.rel "mutex", p10, p11
  394. getf.sig pr0_0 = fp0b_0
  395. ldf8 r_0 = [srp], 8
  396. xma.l fp1b_0 = u_0, v1, fp1a_0
  397.   (p10) add s0 = pr1_1, acc0, 1
  398.   (p11) add s0 = pr1_1, acc0
  399. xma.hu fp2a_0 = u_0, v1, fp1a_0
  400. ;; C 04
  401. .pred.rel "mutex", p6, p7
  402. .pred.rel "mutex", p10, p11
  403. ldf8 u_0 = [up], 8
  404. getf.sig pr1_3 = fp1b_3
  405.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  406.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  407.   (p10) cmp.leu p12, p13 = s0, pr1_1
  408.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  409. ;; C 05
  410. .pred.rel "mutex", p8, p9
  411. getf.sig acc1_3 = fp2a_3
  412. st8 [rp] = s0, 8
  413. xma.l fp0b_2 = u_2, v0, r_2
  414.   (p8) add acc0 = pr0_3, acc1_1, 1
  415.   (p9) add acc0 = pr0_3, acc1_1
  416. xma.hu fp1a_2 = u_2, v0, r_2
  417. ;; C 06
  418. .LL00:
  419. .pred.rel "mutex", p12, p13
  420. getf.sig pr0_1 = fp0b_1
  421. ldf8 r_1 = [srp], 8
  422. xma.l fp1b_1 = u_1, v1, fp1a_1
  423.   (p12) add s0 = pr1_2, acc0, 1
  424.   (p13) add s0 = pr1_2, acc0
  425. xma.hu fp2a_1 = u_1, v1, fp1a_1
  426. ;; C 07
  427. .pred.rel "mutex", p8, p9
  428. .pred.rel "mutex", p12, p13
  429. ldf8 u_1 = [up], 8
  430. getf.sig pr1_0 = fp1b_0
  431.   (p8) cmp.leu p6, p7 = acc0, pr0_3
  432.   (p9) cmp.ltu p6, p7 = acc0, pr0_3
  433.   (p12) cmp.leu p10, p11 = s0, pr1_2
  434.   (p13) cmp.ltu p10, p11 = s0, pr1_2
  435. ;; C 08
  436. .pred.rel "mutex", p6, p7
  437. getf.sig acc1_0 = fp2a_0
  438. st8 [rp] = s0, 8
  439. xma.l fp0b_3 = u_3, v0, r_3
  440.   (p6) add acc0 = pr0_0, acc1_2, 1
  441.   (p7) add acc0 = pr0_0, acc1_2
  442. xma.hu fp1a_3 = u_3, v0, r_3
  443. ;; C 09
  444. .LL11:
  445. .pred.rel "mutex", p10, p11
  446. getf.sig pr0_2 = fp0b_2
  447. ldf8 r_2 = [srp], 8
  448. xma.l fp1b_2 = u_2, v1, fp1a_2
  449.   (p10) add s0 = pr1_3, acc0, 1
  450.   (p11) add s0 = pr1_3, acc0
  451. xma.hu fp2a_2 = u_2, v1, fp1a_2
  452. ;; C 10
  453. .pred.rel "mutex", p6, p7
  454. .pred.rel "mutex", p10, p11
  455. ldf8 u_2 = [up], 8
  456. getf.sig pr1_1 = fp1b_1
  457.   (p6) cmp.leu p8, p9 = acc0, pr0_0
  458.   (p7) cmp.ltu p8, p9 = acc0, pr0_0
  459.   (p10) cmp.leu p12, p13 = s0, pr1_3
  460.   (p11) cmp.ltu p12, p13 = s0, pr1_3
  461. ;; C 11
  462. .pred.rel "mutex", p8, p9
  463. getf.sig acc1_1 = fp2a_1
  464. st8 [rp] = s0, 8
  465. xma.l fp0b_0 = u_0, v0, r_0
  466.   (p8) add acc0 = pr0_1, acc1_3, 1
  467.   (p9) add acc0 = pr0_1, acc1_3
  468. xma.hu fp1a_0 = u_0, v0, r_0
  469. .LL10: br.cloop.dptk .Loop C 12
  470. ;;
  471. C *** MAIN LOOP END ***
  472. .Lcj6:
  473. .pred.rel "mutex", p12, p13
  474. getf.sig pr0_3 = fp0b_3
  475. xma.l fp1b_3 = u_3, v1, fp1a_3
  476.   (p12) add s0 = pr1_0, acc0, 1
  477.   (p13) add s0 = pr1_0, acc0
  478. xma.hu fp2a_3 = u_3, v1, fp1a_3
  479. ;;
  480. .pred.rel "mutex", p8, p9
  481. .pred.rel "mutex", p12, p13
  482. getf.sig pr1_2 = fp1b_2
  483.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  484.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  485.   (p12) cmp.leu p10, p11 = s0, pr1_0
  486.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  487. ;;
  488. .pred.rel "mutex", p6, p7
  489. getf.sig acc1_2 = fp2a_2
  490. st8 [rp] = s0, 8
  491. xma.l fp0b_1 = u_1, v0, r_1
  492.   (p6) add acc0 = pr0_2, acc1_0, 1
  493.   (p7) add acc0 = pr0_2, acc1_0
  494. xma.hu fp1a_1 = u_1, v0, r_1
  495. ;;
  496. .Lcj5:
  497. .pred.rel "mutex", p10, p11
  498. getf.sig pr0_0 = fp0b_0
  499. xma.l fp1b_0 = u_0, v1, fp1a_0
  500.   (p10) add s0 = pr1_1, acc0, 1
  501.   (p11) add s0 = pr1_1, acc0
  502. xma.hu fp2a_0 = u_0, v1, fp1a_0
  503. ;;
  504. .pred.rel "mutex", p6, p7
  505. .pred.rel "mutex", p10, p11
  506. getf.sig pr1_3 = fp1b_3
  507.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  508.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  509.   (p10) cmp.leu p12, p13 = s0, pr1_1
  510.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  511. ;;
  512. .pred.rel "mutex", p8, p9
  513. getf.sig acc1_3 = fp2a_3
  514. st8 [rp] = s0, 8
  515. xma.l fp0b_2 = u_2, v0, r_2
  516.   (p8) add acc0 = pr0_3, acc1_1, 1
  517.   (p9) add acc0 = pr0_3, acc1_1
  518. xma.hu fp1a_2 = u_2, v0, r_2
  519. ;;
  520. .Lcj4:
  521. .pred.rel "mutex", p12, p13
  522. getf.sig pr0_1 = fp0b_1
  523. xma.l fp1b_1 = u_1, v1, fp1a_1
  524.   (p12) add s0 = pr1_2, acc0, 1
  525.   (p13) add s0 = pr1_2, acc0
  526. xma.hu fp2a_1 = u_1, v1, fp1a_1
  527. ;;
  528. .pred.rel "mutex", p8, p9
  529. .pred.rel "mutex", p12, p13
  530. getf.sig pr1_0 = fp1b_0
  531.   (p8) cmp.leu p6, p7 = acc0, pr0_3
  532.   (p9) cmp.ltu p6, p7 = acc0, pr0_3
  533.   (p12) cmp.leu p10, p11 = s0, pr1_2
  534.   (p13) cmp.ltu p10, p11 = s0, pr1_2
  535. ;;
  536. .pred.rel "mutex", p6, p7
  537. getf.sig acc1_0 = fp2a_0
  538. st8 [rp] = s0, 8
  539.   (p6) add acc0 = pr0_0, acc1_2, 1
  540.   (p7) add acc0 = pr0_0, acc1_2
  541. ;;
  542. .Lcj3:
  543. .pred.rel "mutex", p10, p11
  544. getf.sig pr0_2 = fp0b_2
  545. xma.l fp1b_2 = u_2, v1, fp1a_2
  546.   (p10) add s0 = pr1_3, acc0, 1
  547.   (p11) add s0 = pr1_3, acc0
  548. xma.hu fp2a_2 = u_2, v1, fp1a_2
  549. ;;
  550. .pred.rel "mutex", p6, p7
  551. .pred.rel "mutex", p10, p11
  552. getf.sig pr1_1 = fp1b_1
  553.   (p6) cmp.leu p8, p9 = acc0, pr0_0
  554.   (p7) cmp.ltu p8, p9 = acc0, pr0_0
  555.   (p10) cmp.leu p12, p13 = s0, pr1_3
  556.   (p11) cmp.ltu p12, p13 = s0, pr1_3
  557. ;;
  558. .pred.rel "mutex", p8, p9
  559. getf.sig acc1_1 = fp2a_1
  560. st8 [rp] = s0, 8
  561.   (p8) add acc0 = pr0_1, acc1_3, 1
  562.   (p9) add acc0 = pr0_1, acc1_3
  563. ;;
  564. .Lcj2:
  565. .pred.rel "mutex", p12, p13
  566.   (p12) add s0 = pr1_0, acc0, 1
  567.   (p13) add s0 = pr1_0, acc0
  568. ;;
  569. .pred.rel "mutex", p8, p9
  570. .pred.rel "mutex", p12, p13
  571. getf.sig pr1_2 = fp1b_2
  572.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  573.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  574.   (p12) cmp.leu p10, p11 = s0, pr1_0
  575.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  576. ;;
  577. .pred.rel "mutex", p6, p7
  578. getf.sig acc1_2 = fp2a_2
  579. st8 [rp] = s0, 8
  580.   (p6) add acc0 = pr0_2, acc1_0, 1
  581.   (p7) add acc0 = pr0_2, acc1_0
  582. ;;
  583. .pred.rel "mutex", p10, p11
  584.   (p10) add s0 = pr1_1, acc0, 1
  585.   (p11) add s0 = pr1_1, acc0
  586. ;;
  587. .pred.rel "mutex", p6, p7
  588. .pred.rel "mutex", p10, p11
  589.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  590.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  591.   (p10) cmp.leu p12, p13 = s0, pr1_1
  592.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  593. ;;
  594. .pred.rel "mutex", p8, p9
  595. st8 [rp] = s0, 8
  596.   (p8) add acc0 = pr1_2, acc1_1, 1
  597.   (p9) add acc0 = pr1_2, acc1_1
  598. ;;
  599. .pred.rel "mutex", p8, p9
  600.   (p8) cmp.leu p10, p11 = acc0, pr1_2
  601.   (p9) cmp.ltu p10, p11 = acc0, pr1_2
  602.   (p12) add acc0 = 1, acc0
  603. ;;
  604. st8 [rp] = acc0, 8
  605.   (p12) cmp.eq.or p10, p0 = 0, acc0
  606. mov r8 = acc1_2
  607. ;;
  608. .pred.rel "mutex", p10, p11
  609.   (p10) add r8 = 1, r8
  610. mov.i ar.lc = r2
  611. br.ret.sptk.many b0
  612. EPILOGUE()
  613. ASM_END()