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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_mul_2 -- Multiply a n-limb number with a 2-limb number and store
  2. dnl  store the result to a (n+1)-limb number.
  3. dnl  Copyright 2004 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.15
  18. C Itanium 2:  1.625
  19. C Note that this is very similar to addmul_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(`u_0',`f44') define(`u_1',`f45')
  64. define(`u_2',`f46') define(`u_3',`f47')
  65. define(`ux',`f49')
  66. define(`uy',`f51')
  67. ASM_START()
  68. PROLOGUE(mpn_mul_2)
  69. .prologue
  70. .save ar.lc, r2
  71. .body
  72. ifdef(`HAVE_ABI_32',
  73. ` addp4 rp = 0, rp C M I
  74. addp4 up = 0, up C M I
  75. addp4 vp = 0, vp C M I
  76. zxt4 n = n C I
  77. ;;')
  78. {.mmi C 00
  79. ldf8 ux = [up], 8 C M
  80. ldf8 v0 = [vp], 8 C M
  81. mov.i r2 = ar.lc C I0
  82. }{.mmi
  83. nop 0 C M
  84. and r14 = 3, n C M I
  85. add n = -2, n C M I
  86. ;;
  87. }{.mmi C 01
  88. ldf8 uy = [up], 8 C M
  89. ldf8 v1 = [vp] C M
  90. shr.u n = n, 2 C I
  91. }{.mmi
  92. nop 0 C M
  93. cmp.eq p10, p0 = 1, r14 C M I
  94. cmp.eq p11, p0 = 2, r14 C M I
  95. ;;
  96. }{.mmi C 02
  97. nop 0 C M
  98. cmp.eq p12, p0 = 3, r14 C M I
  99. mov.i ar.lc = n C I0
  100. }{.bbb
  101.   (p10) br.dptk .Lb01 C B
  102.   (p11) br.dptk .Lb10 C B
  103.   (p12) br.dptk .Lb11 C B
  104. ;;
  105. }
  106. ALIGN(32)
  107. .Lb00: ldf8 u_1 = [up], 8
  108. mov acc1_2 = 0
  109. mov pr1_2 = 0
  110. mov pr0_3 = 0
  111. cmp.ne p8, p9 = r0, r0
  112. ;;
  113. xma.l fp0b_3 = ux, v0, f0
  114. cmp.ne p12, p13 = r0, r0
  115. ldf8 u_2 = [up], 8
  116. xma.hu fp1a_3 = ux, v0, f0
  117. br.cloop.dptk .grt4
  118. xma.l fp0b_0 = uy, v0, f0
  119. xma.hu fp1a_0 = uy, v0, f0
  120. ;;
  121. getf.sig acc0 = fp0b_3
  122. xma.l fp1b_3 = ux, v1, fp1a_3
  123. xma.hu fp2a_3 = ux, v1, fp1a_3
  124. ;;
  125. xma.l fp0b_1 = u_1, v0, f0
  126. xma.hu fp1a_1 = u_1, v0, f0
  127. ;;
  128. getf.sig pr0_0 = fp0b_0
  129. xma.l fp1b_0 = uy, v1, fp1a_0
  130. xma.hu fp2a_0 = uy, v1, fp1a_0
  131. ;;
  132. getf.sig pr1_3 = fp1b_3
  133. getf.sig acc1_3 = fp2a_3
  134. xma.l fp0b_2 = u_2, v0, f0
  135. xma.hu fp1a_2 = u_2, v0, f0
  136. br .Lcj4
  137. .grt4: xma.l fp0b_0 = uy, v0, f0
  138. xma.hu fp1a_0 = uy, v0, f0
  139. ;;
  140. getf.sig acc0 = fp0b_3
  141. xma.l fp1b_3 = ux, v1, fp1a_3
  142. ldf8 u_3 = [up], 8
  143. xma.hu fp2a_3 = ux, v1, fp1a_3
  144. ;;
  145. xma.l fp0b_1 = u_1, v0, f0
  146. xma.hu fp1a_1 = u_1, v0, f0
  147. ;;
  148. getf.sig pr0_0 = fp0b_0
  149. xma.l fp1b_0 = uy, v1, fp1a_0
  150. xma.hu fp2a_0 = uy, v1, fp1a_0
  151. ;;
  152. ldf8 u_0 = [up], 8
  153. getf.sig pr1_3 = fp1b_3
  154. ;;
  155. getf.sig acc1_3 = fp2a_3
  156. xma.l fp0b_2 = u_2, v0, f0
  157. xma.hu fp1a_2 = u_2, v0, f0
  158. br .LL00
  159. ALIGN(32)
  160. .Lb01: ldf8 u_0 = [up], 8 C M
  161. mov acc1_1 = 0 C M I
  162. mov pr1_1 = 0 C M I
  163. mov pr0_2 = 0 C M I
  164. cmp.ne p6, p7 = r0, r0 C M I
  165. ;;
  166. xma.l fp0b_2 = ux, v0, f0 C F
  167. cmp.ne p10, p11 = r0, r0 C M I
  168. ldf8 u_1 = [up], 8 C M
  169. xma.hu fp1a_2 = ux, v0, f0 C F
  170. ;;
  171. xma.l fp0b_3 = uy, v0, f0 C F
  172. xma.hu fp1a_3 = uy, v0, f0 C F
  173. ;;
  174. getf.sig acc0 = fp0b_2 C M
  175. xma.l fp1b_2 = ux, v1,fp1a_2 C F
  176. xma.hu fp2a_2 = ux, v1,fp1a_2 C F
  177. ldf8 u_2 = [up], 8 C M
  178. br.cloop.dptk .grt5
  179. xma.l fp0b_0 = u_0, v0, f0 C F
  180. xma.hu fp1a_0 = u_0, v0, f0 C F
  181. ;;
  182. getf.sig pr0_3 = fp0b_3 C M
  183. xma.l fp1b_3 = uy, v1,fp1a_3 C F
  184. xma.hu fp2a_3 = uy, v1,fp1a_3 C F
  185. ;;
  186. getf.sig pr1_2 = fp1b_2 C M
  187. getf.sig acc1_2 = fp2a_2 C M
  188. xma.l fp0b_1 = u_1, v0, f0 C F
  189. xma.hu fp1a_1 = u_1, v0, f0 C F
  190. br .Lcj5
  191. .grt5: xma.l fp0b_0 = u_0, v0, f0
  192. xma.hu fp1a_0 = u_0, v0, f0
  193. ;;
  194. getf.sig pr0_3 = fp0b_3
  195. xma.l fp1b_3 = uy, v1, fp1a_3
  196. xma.hu fp2a_3 = uy, v1, fp1a_3
  197. ;;
  198. ldf8 u_3 = [up], 8
  199. getf.sig pr1_2 = fp1b_2
  200. ;;
  201. getf.sig acc1_2 = fp2a_2
  202. xma.l fp0b_1 = u_1, v0, f0
  203. xma.hu fp1a_1 = u_1, v0, f0
  204. br .LL01
  205. C We have two variants for n = 2.  They turn out to run at exactly the same
  206. C speed.  But the first, odd variant might allow one cycle to be trimmed.
  207. ALIGN(32)
  208. ifdef(`',`
  209. .Lb10: C 03
  210. br.cloop.dptk .grt2
  211. C 04
  212. C 05
  213. C 06
  214. xma.l fp0b_1 = ux, v0, f0 C 0
  215. xma.hu fp1a_1 = ux, v0, f0 C 1
  216. ;; C 07
  217. xma.l fp0b_2 = uy, v0, f0 C 1
  218. xma.l fp1b_1 = ux, v1, f0 C 1
  219. ;; C 08
  220. xma.hu fp1a_2 = uy, v0, f0 C 2
  221. xma.hu fp2a_1 = ux, v1, f0 C 2
  222. ;; C 09
  223. xma.l fp1b_2 = uy, v1, f0 C 2
  224. xma.hu fp2a_2 = uy, v1, f0 C 3
  225. ;; C 10
  226. getf.sig r16 = fp1a_1
  227. stf8 [rp] = fp0b_1, 8
  228. ;; C 11
  229. getf.sig r17 = fp0b_2
  230. C 12
  231. getf.sig r18 = fp1b_1
  232. C 13
  233. getf.sig r19 = fp1a_2
  234. C 14
  235. getf.sig r20 = fp2a_1
  236. C 15
  237. getf.sig r21 = fp1b_2
  238. ;; C 16
  239. getf.sig r8 = fp2a_2
  240. add r24 = r16, r17
  241. ;; C 17
  242. cmp.ltu p6, p7 = r24, r16
  243. add r26 = r24, r18
  244. ;; C 18
  245. cmp.ltu p8, p9 = r26, r24
  246. ;; C 19
  247. st8 [rp] = r26, 8
  248.   (p6) add r25 = r19, r20, 1
  249.   (p7) add r25 = r19, r20
  250. ;; C 20
  251.   (p8) add r27 = r25, r21, 1
  252.   (p9) add r27 = r25, r21
  253.   (p6) cmp.leu p10, p0 = r25, r19
  254.   (p7) cmp.ltu p10, p0 = r25, r19
  255. ;; C 21
  256.   (p10) add r8 = 1, r8
  257.   (p8) cmp.leu p12, p0 = r27, r25
  258.   (p9) cmp.ltu p12, p0 = r27, r25
  259. ;; C 22
  260. st8 [rp] = r27, 8
  261. mov.i ar.lc = r2
  262.   (p12) add r8 = 1, r8
  263. br.ret.sptk.many b0
  264. ')
  265. .Lb10: C 03
  266. br.cloop.dptk .grt2
  267. C 04
  268. C 05
  269. C 06
  270. xma.l fp0b_1 = ux, v0, f0
  271. xma.hu fp1a_1 = ux, v0, f0
  272. ;; C 07
  273. xma.l fp0b_2 = uy, v0, f0
  274. xma.hu fp1a_2 = uy, v0, f0
  275. ;; C 08
  276. C 09
  277. C 10
  278. stf8 [rp] = fp0b_1, 8
  279. xma.l fp1b_1 = ux, v1, fp1a_1
  280. xma.hu fp2a_1 = ux, v1, fp1a_1
  281. ;; C 11
  282. getf.sig acc0 = fp0b_2
  283. xma.l fp1b_2 = uy, v1, fp1a_2
  284. xma.hu fp2a_2 = uy, v1, fp1a_2
  285. ;; C 12
  286. C 13
  287. C 14
  288. getf.sig pr1_1 = fp1b_1
  289. C 15
  290. getf.sig acc1_1 = fp2a_1
  291. C 16
  292. getf.sig pr1_2 = fp1b_2
  293. C 17
  294. getf.sig r8 = fp2a_2
  295. ;; C 18
  296. C 19
  297. add s0 = pr1_1, acc0
  298. ;; C 20
  299. st8 [rp] = s0, 8
  300. cmp.ltu p8, p9 = s0, pr1_1
  301. sub r31 = -1, acc1_1
  302. ;; C 21
  303. .pred.rel "mutex", p8, p9
  304.   (p8) add acc0 = pr1_2, acc1_1, 1
  305.   (p9) add acc0 = pr1_2, acc1_1
  306.   (p8) cmp.leu p10, p0 = r31, pr1_2
  307.   (p9) cmp.ltu p10, p0 = r31, pr1_2
  308. ;; C 22
  309. st8 [rp] = acc0, 8
  310. mov.i ar.lc = r2
  311.   (p10) add r8 = 1, r8
  312. br.ret.sptk.many b0
  313. .grt2: ldf8 u_3 = [up], 8
  314. mov acc1_0 = 0
  315. mov pr1_0 = 0
  316. ;;
  317. mov pr0_1 = 0
  318. xma.l fp0b_1 = ux, v0, f0
  319. ldf8 u_0 = [up], 8
  320. xma.hu fp1a_1 = ux, v0, f0
  321. ;;
  322. xma.l fp0b_2 = uy, v0, f0
  323. xma.hu fp1a_2 = uy, v0, f0
  324. ;;
  325. getf.sig acc0 = fp0b_1
  326. xma.l fp1b_1 = ux, v1, fp1a_1
  327. xma.hu fp2a_1 = ux, v1, fp1a_1
  328. ;;
  329. ldf8 u_1 = [up], 8
  330. xma.l fp0b_3 = u_3, v0, f0
  331. xma.hu fp1a_3 = u_3, v0, f0
  332. ;;
  333. getf.sig pr0_2 = fp0b_2
  334. xma.l fp1b_2 = uy, v1, fp1a_2
  335. xma.hu fp2a_2 = uy, v1, fp1a_2
  336. ;;
  337. ldf8 u_2 = [up], 8
  338. getf.sig pr1_1 = fp1b_1
  339. ;;
  340. getf.sig acc1_1 = fp2a_1
  341. xma.l fp0b_0 = u_0, v0, f0
  342. cmp.ne p8, p9 = r0, r0
  343. cmp.ne p12, p13 = r0, r0
  344. xma.hu fp1a_0 = u_0, v0, f0
  345. br .LL10
  346. ALIGN(32)
  347. .Lb11: mov acc1_3 = 0
  348. mov pr1_3 = 0
  349. mov pr0_0 = 0
  350. cmp.ne p6, p7 = r0, r0
  351. ;;
  352. ldf8 u_2 = [up], 8
  353. br.cloop.dptk .grt3
  354. ;;
  355. xma.l fp0b_0 = ux, v0, f0
  356. xma.hu fp1a_0 = ux, v0, f0
  357. ;;
  358. cmp.ne p10, p11 = r0, r0
  359. xma.l fp0b_1 = uy, v0, f0
  360. xma.hu fp1a_1 = uy, v0, f0
  361. ;;
  362. getf.sig acc0 = fp0b_0
  363. xma.l fp1b_0 = ux, v1, fp1a_0
  364. xma.hu fp2a_0 = ux, v1, fp1a_0
  365. ;;
  366. xma.l fp0b_2 = u_2, v0, f0
  367. xma.hu fp1a_2 = u_2, v0, f0
  368. ;;
  369. getf.sig pr0_1 = fp0b_1
  370. xma.l fp1b_1 = uy, v1, fp1a_1
  371. xma.hu fp2a_1 = uy, v1, fp1a_1
  372. ;;
  373. getf.sig pr1_0 = fp1b_0
  374. getf.sig acc1_0 = fp2a_0
  375. br .Lcj3
  376. .grt3: xma.l fp0b_0 = ux, v0, f0
  377. cmp.ne p10, p11 = r0, r0
  378. ldf8 u_3 = [up], 8
  379. xma.hu fp1a_0 = ux, v0, f0
  380. ;;
  381. xma.l fp0b_1 = uy, v0, f0
  382. xma.hu fp1a_1 = uy, v0, f0
  383. ;;
  384. getf.sig acc0 = fp0b_0
  385. xma.l fp1b_0 = ux, v1, fp1a_0
  386. ldf8 u_0 = [up], 8
  387. xma.hu fp2a_0 = ux, v1, fp1a_0
  388. ;;
  389. xma.l fp0b_2 = u_2, v0, f0
  390. xma.hu fp1a_2 = u_2, v0, f0
  391. ;;
  392. getf.sig pr0_1 = fp0b_1
  393. xma.l fp1b_1 = uy, v1, fp1a_1
  394. xma.hu fp2a_1 = uy, v1, fp1a_1
  395. ;;
  396. ldf8 u_1 = [up], 8
  397. getf.sig pr1_0 = fp1b_0
  398. ;;
  399. getf.sig acc1_0 = fp2a_0
  400. xma.l fp0b_3 = u_3, v0, f0
  401. xma.hu fp1a_3 = u_3, v0, f0
  402. br .LL11
  403. C *** MAIN LOOP START ***
  404. ALIGN(32)
  405. .Loop: C 00
  406. .pred.rel "mutex", p12, p13
  407. getf.sig pr0_3 = fp0b_3
  408. xma.l fp1b_3 = u_3, v1, fp1a_3
  409.   (p12) add s0 = pr1_0, acc0, 1
  410.   (p13) add s0 = pr1_0, acc0
  411. xma.hu fp2a_3 = u_3, v1, fp1a_3
  412. ;; C 01
  413. .pred.rel "mutex", p8, p9
  414. .pred.rel "mutex", p12, p13
  415. ldf8 u_3 = [up], 8
  416. getf.sig pr1_2 = fp1b_2
  417.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  418.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  419.   (p12) cmp.leu p10, p11 = s0, pr1_0
  420.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  421. ;; C 02
  422. .pred.rel "mutex", p6, p7
  423. getf.sig acc1_2 = fp2a_2
  424. st8 [rp] = s0, 8
  425. xma.l fp0b_1 = u_1, v0, f0
  426.   (p6) add acc0 = pr0_2, acc1_0, 1
  427.   (p7) add acc0 = pr0_2, acc1_0
  428. xma.hu fp1a_1 = u_1, v0, f0
  429. ;; C 03
  430. .LL01:
  431. .pred.rel "mutex", p10, p11
  432. getf.sig pr0_0 = fp0b_0
  433. xma.l fp1b_0 = u_0, v1, fp1a_0
  434.   (p10) add s0 = pr1_1, acc0, 1
  435.   (p11) add s0 = pr1_1, acc0
  436. xma.hu fp2a_0 = u_0, v1, fp1a_0
  437. ;; C 04
  438. .pred.rel "mutex", p6, p7
  439. .pred.rel "mutex", p10, p11
  440. ldf8 u_0 = [up], 8
  441. getf.sig pr1_3 = fp1b_3
  442.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  443.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  444.   (p10) cmp.leu p12, p13 = s0, pr1_1
  445.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  446. ;; C 05
  447. .pred.rel "mutex", p8, p9
  448. getf.sig acc1_3 = fp2a_3
  449. st8 [rp] = s0, 8
  450. xma.l fp0b_2 = u_2, v0, f0
  451.   (p8) add acc0 = pr0_3, acc1_1, 1
  452.   (p9) add acc0 = pr0_3, acc1_1
  453. xma.hu fp1a_2 = u_2, v0, f0
  454. ;; C 06
  455. .LL00:
  456. .pred.rel "mutex", p12, p13
  457. getf.sig pr0_1 = fp0b_1
  458. xma.l fp1b_1 = u_1, v1, fp1a_1
  459.   (p12) add s0 = pr1_2, acc0, 1
  460.   (p13) add s0 = pr1_2, acc0
  461. xma.hu fp2a_1 = u_1, v1, fp1a_1
  462. ;; C 07
  463. .pred.rel "mutex", p8, p9
  464. .pred.rel "mutex", p12, p13
  465. ldf8 u_1 = [up], 8
  466. getf.sig pr1_0 = fp1b_0
  467.   (p8) cmp.leu p6, p7 = acc0, pr0_3
  468.   (p9) cmp.ltu p6, p7 = acc0, pr0_3
  469.   (p12) cmp.leu p10, p11 = s0, pr1_2
  470.   (p13) cmp.ltu p10, p11 = s0, pr1_2
  471. ;; C 08
  472. .pred.rel "mutex", p6, p7
  473. getf.sig acc1_0 = fp2a_0
  474. st8 [rp] = s0, 8
  475. xma.l fp0b_3 = u_3, v0, f0
  476.   (p6) add acc0 = pr0_0, acc1_2, 1
  477.   (p7) add acc0 = pr0_0, acc1_2
  478. xma.hu fp1a_3 = u_3, v0, f0
  479. ;; C 09
  480. .LL11:
  481. .pred.rel "mutex", p10, p11
  482. getf.sig pr0_2 = fp0b_2
  483. xma.l fp1b_2 = u_2, v1, fp1a_2
  484.   (p10) add s0 = pr1_3, acc0, 1
  485.   (p11) add s0 = pr1_3, acc0
  486. xma.hu fp2a_2 = u_2, v1, fp1a_2
  487. ;; C 10
  488. .pred.rel "mutex", p6, p7
  489. .pred.rel "mutex", p10, p11
  490. ldf8 u_2 = [up], 8
  491. getf.sig pr1_1 = fp1b_1
  492.   (p6) cmp.leu p8, p9 = acc0, pr0_0
  493.   (p7) cmp.ltu p8, p9 = acc0, pr0_0
  494.   (p10) cmp.leu p12, p13 = s0, pr1_3
  495.   (p11) cmp.ltu p12, p13 = s0, pr1_3
  496. ;; C 11
  497. .pred.rel "mutex", p8, p9
  498. getf.sig acc1_1 = fp2a_1
  499. st8 [rp] = s0, 8
  500. xma.l fp0b_0 = u_0, v0, f0
  501.   (p8) add acc0 = pr0_1, acc1_3, 1
  502.   (p9) add acc0 = pr0_1, acc1_3
  503. xma.hu fp1a_0 = u_0, v0, f0
  504. .LL10: br.cloop.dptk .Loop C 12
  505. ;;
  506. C *** MAIN LOOP END ***
  507. .Lcj6:
  508. .pred.rel "mutex", p12, p13
  509. getf.sig pr0_3 = fp0b_3
  510. xma.l fp1b_3 = u_3, v1, fp1a_3
  511.   (p12) add s0 = pr1_0, acc0, 1
  512.   (p13) add s0 = pr1_0, acc0
  513. xma.hu fp2a_3 = u_3, v1, fp1a_3
  514. ;;
  515. .pred.rel "mutex", p8, p9
  516. .pred.rel "mutex", p12, p13
  517. getf.sig pr1_2 = fp1b_2
  518.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  519.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  520.   (p12) cmp.leu p10, p11 = s0, pr1_0
  521.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  522. ;;
  523. .pred.rel "mutex", p6, p7
  524. getf.sig acc1_2 = fp2a_2
  525. st8 [rp] = s0, 8
  526. xma.l fp0b_1 = u_1, v0, f0
  527.   (p6) add acc0 = pr0_2, acc1_0, 1
  528.   (p7) add acc0 = pr0_2, acc1_0
  529. xma.hu fp1a_1 = u_1, v0, f0
  530. ;;
  531. .Lcj5:
  532. .pred.rel "mutex", p10, p11
  533. getf.sig pr0_0 = fp0b_0
  534. xma.l fp1b_0 = u_0, v1, fp1a_0
  535.   (p10) add s0 = pr1_1, acc0, 1
  536.   (p11) add s0 = pr1_1, acc0
  537. xma.hu fp2a_0 = u_0, v1, fp1a_0
  538. ;;
  539. .pred.rel "mutex", p6, p7
  540. .pred.rel "mutex", p10, p11
  541. getf.sig pr1_3 = fp1b_3
  542.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  543.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  544.   (p10) cmp.leu p12, p13 = s0, pr1_1
  545.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  546. ;;
  547. .pred.rel "mutex", p8, p9
  548. getf.sig acc1_3 = fp2a_3
  549. st8 [rp] = s0, 8
  550. xma.l fp0b_2 = u_2, v0, f0
  551.   (p8) add acc0 = pr0_3, acc1_1, 1
  552.   (p9) add acc0 = pr0_3, acc1_1
  553. xma.hu fp1a_2 = u_2, v0, f0
  554. ;;
  555. .Lcj4:
  556. .pred.rel "mutex", p12, p13
  557. getf.sig pr0_1 = fp0b_1
  558. xma.l fp1b_1 = u_1, v1, fp1a_1
  559.   (p12) add s0 = pr1_2, acc0, 1
  560.   (p13) add s0 = pr1_2, acc0
  561. xma.hu fp2a_1 = u_1, v1, fp1a_1
  562. ;;
  563. .pred.rel "mutex", p8, p9
  564. .pred.rel "mutex", p12, p13
  565. getf.sig pr1_0 = fp1b_0
  566.   (p8) cmp.leu p6, p7 = acc0, pr0_3
  567.   (p9) cmp.ltu p6, p7 = acc0, pr0_3
  568.   (p12) cmp.leu p10, p11 = s0, pr1_2
  569.   (p13) cmp.ltu p10, p11 = s0, pr1_2
  570. ;;
  571. .pred.rel "mutex", p6, p7
  572. getf.sig acc1_0 = fp2a_0
  573. st8 [rp] = s0, 8
  574.   (p6) add acc0 = pr0_0, acc1_2, 1
  575.   (p7) add acc0 = pr0_0, acc1_2
  576. ;;
  577. .Lcj3:
  578. .pred.rel "mutex", p10, p11
  579. getf.sig pr0_2 = fp0b_2
  580. xma.l fp1b_2 = u_2, v1, fp1a_2
  581.   (p10) add s0 = pr1_3, acc0, 1
  582.   (p11) add s0 = pr1_3, acc0
  583. xma.hu fp2a_2 = u_2, v1, fp1a_2
  584. ;;
  585. .pred.rel "mutex", p6, p7
  586. .pred.rel "mutex", p10, p11
  587. getf.sig pr1_1 = fp1b_1
  588.   (p6) cmp.leu p8, p9 = acc0, pr0_0
  589.   (p7) cmp.ltu p8, p9 = acc0, pr0_0
  590.   (p10) cmp.leu p12, p13 = s0, pr1_3
  591.   (p11) cmp.ltu p12, p13 = s0, pr1_3
  592. ;;
  593. .pred.rel "mutex", p8, p9
  594. getf.sig acc1_1 = fp2a_1
  595. st8 [rp] = s0, 8
  596.   (p8) add acc0 = pr0_1, acc1_3, 1
  597.   (p9) add acc0 = pr0_1, acc1_3
  598. ;;
  599. .pred.rel "mutex", p12, p13
  600.   (p12) add s0 = pr1_0, acc0, 1
  601.   (p13) add s0 = pr1_0, acc0
  602. ;;
  603. .pred.rel "mutex", p8, p9
  604. .pred.rel "mutex", p12, p13
  605. getf.sig pr1_2 = fp1b_2
  606.   (p8) cmp.leu p6, p7 = acc0, pr0_1
  607.   (p9) cmp.ltu p6, p7 = acc0, pr0_1
  608.   (p12) cmp.leu p10, p11 = s0, pr1_0
  609.   (p13) cmp.ltu p10, p11 = s0, pr1_0
  610. ;;
  611. .pred.rel "mutex", p6, p7
  612. getf.sig acc1_2 = fp2a_2
  613. st8 [rp] = s0, 8
  614.   (p6) add acc0 = pr0_2, acc1_0, 1
  615.   (p7) add acc0 = pr0_2, acc1_0
  616. ;;
  617. .pred.rel "mutex", p10, p11
  618.   (p10) add s0 = pr1_1, acc0, 1
  619.   (p11) add s0 = pr1_1, acc0
  620. ;;
  621. .pred.rel "mutex", p6, p7
  622. .pred.rel "mutex", p10, p11
  623.   (p6) cmp.leu p8, p9 = acc0, pr0_2
  624.   (p7) cmp.ltu p8, p9 = acc0, pr0_2
  625.   (p10) cmp.leu p12, p13 = s0, pr1_1
  626.   (p11) cmp.ltu p12, p13 = s0, pr1_1
  627. ;;
  628. .pred.rel "mutex", p8, p9
  629. st8 [rp] = s0, 8
  630.   (p8) add acc0 = pr1_2, acc1_1, 1
  631.   (p9) add acc0 = pr1_2, acc1_1
  632. ;;
  633. .pred.rel "mutex", p8, p9
  634.   (p8) cmp.leu p10, p11 = acc0, pr1_2
  635.   (p9) cmp.ltu p10, p11 = acc0, pr1_2
  636.   (p12) add acc0 = 1, acc0
  637. ;;
  638. st8 [rp] = acc0, 8
  639.   (p12) cmp.eq.or p10, p0 = 0, acc0
  640. mov r8 = acc1_2
  641. ;;
  642. .pred.rel "mutex", p10, p11
  643.   (p10) add r8 = 1, r8
  644. mov.i ar.lc = r2
  645. br.ret.sptk.many b0
  646. EPILOGUE()
  647. ASM_END()