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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_add_n/mpn_sub_n -- mpn addition and subtraction.
  2. dnl  Copyright 2003, 2004, 2005 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:      2.67
  17. C Itanium 2:    1.25
  18. C TODO
  19. C  * Consider using special code for small n, using something like
  20. C    "switch (8 * (n >= 8) + (n mod 8))" to enter it and feed-in code.
  21. C INPUT PARAMETERS
  22. define(`rp',`r32')
  23. define(`up',`r33')
  24. define(`vp',`r34')
  25. define(`n',`r35')
  26. ifdef(`OPERATION_add_n',`
  27.   define(ADDSUB, add)
  28.   define(PRED, ltu)
  29.   define(INCR, 1)
  30.   define(LIM, -1)
  31.   define(func, mpn_add_n)
  32. ')
  33. ifdef(`OPERATION_sub_n',`
  34.   define(ADDSUB, sub)
  35.   define(PRED, gtu)
  36.   define(INCR, -1)
  37.   define(LIM, 0)
  38.   define(func, mpn_sub_n)
  39. ')
  40. C Some useful aliases for registers we use
  41. define(`u0',`r14') define(`u1',`r15') define(`u2',`r16') define(`u3',`r17')
  42. define(`u4',`r18') define(`u5',`r19') define(`u6',`r20') define(`u7',`r21')
  43. define(`v0',`r24') define(`v1',`r25') define(`v2',`r26') define(`v3',`r27')
  44. define(`v4',`r28') define(`v5',`r29') define(`v6',`r30') define(`v7',`r31')
  45. define(`w0',`r22') define(`w1',`r9') define(`w2',`r8') define(`w3',`r23')
  46. define(`w4',`r22') define(`w5',`r9') define(`w6',`r8') define(`w7',`r23')
  47. define(`rpx',`r3')
  48. MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n)
  49. ASM_START()
  50. PROLOGUE(func)
  51. .prologue
  52. .save ar.lc, r2
  53. .body
  54. ifdef(`HAVE_ABI_32',`
  55. addp4 rp = 0, rp C M I
  56. addp4 up = 0, up C M I
  57. addp4 vp = 0, vp C M I
  58. zxt4 n = n C I
  59. ;;
  60. ')
  61. {.mmi C 00
  62. ld8 r11 = [vp], 8 C M01
  63. ld8 r10 = [up], 8 C M01
  64. mov.i r2 = ar.lc C I0
  65. }
  66. {.mmi
  67. and r14 = 7, n C M I
  68. cmp.lt p15, p14 = 8, n C M I
  69. add n = -8, n C M I
  70. ;;
  71. }
  72. {.mmi C 01
  73. cmp.eq p6, p0 = 1, r14 C M I
  74. cmp.eq p7, p0 = 2, r14 C M I
  75. cmp.eq p8, p0 = 3, r14 C M I
  76. }
  77. {.bbb
  78.    (p6) br.dptk .Lb001 C B
  79.    (p7) br.dptk .Lb010 C B
  80.    (p8) br.dptk .Lb011 C B
  81. ;;
  82. }
  83. {.mmi C 02
  84. cmp.eq p9, p0 = 4, r14 C M I
  85. cmp.eq p10, p0 = 5, r14 C M I
  86. cmp.eq p11, p0 = 6, r14 C M I
  87. }
  88. {.bbb
  89.    (p9) br.dptk .Lb100 C B
  90.   (p10) br.dptk .Lb101 C B
  91.   (p11) br.dptk .Lb110 C B
  92. ;;
  93. } C 03
  94. {.mmb
  95. cmp.eq p12, p0 = 7, r14 C M I
  96. add n = -1, n C loop count M I
  97.   (p12) br.dptk .Lb111 C B
  98. }
  99. .Lb000: ld8 v2 = [vp], 8 C M01
  100. ld8 u2 = [up], 8 C M01
  101. add rpx = 8, rp C M I
  102. ;;
  103. ld8 v3 = [vp], 8 C M01
  104. ld8 u3 = [up], 8 C M01
  105. ADDSUB w1 = r10, r11 C M I
  106. ;;
  107. ld8 v4 = [vp], 8 C M01
  108. ld8 u4 = [up], 8 C M01
  109. cmp.PRED p7, p0 = w1, r10 C M I
  110. ;;
  111. ld8 v5 = [vp], 8 C M01
  112. ld8 u5 = [up], 8 C M01
  113. ADDSUB w2 = u2, v2 C M I
  114. ;;
  115. ld8 v6 = [vp], 8 C M01
  116. ld8 u6 = [up], 8 C M01
  117. cmp.PRED p8, p0 = w2, u2 C M I
  118. ;;
  119. ld8 v7 = [vp], 8 C M01
  120. ld8 u7 = [up], 8 C M01
  121. ADDSUB w3 = u3, v3 C M I
  122. ;;
  123. ld8 v0 = [vp], 8 C M01
  124. ld8 u0 = [up], 8 C M01
  125. cmp.PRED p9, p0 = w3, u3 C M I
  126.    (p7) cmp.eq.or p8, p0 = LIM, w2 C M I
  127.    (p7) add w2 = INCR, w2 C M I
  128.   (p14) br.cond.dptk .Lcj8 C B
  129. ;;
  130. .grt8: ld8 v1 = [vp], 8 C M01
  131. ld8 u1 = [up], 8 C M01
  132. shr.u n = n, 3 C I0
  133. ;;
  134. add r11 = 512, vp
  135. ld8 v2 = [vp], 8 C M01
  136. add r10 = 512, up
  137. ld8 u2 = [up], 8 C M01
  138. nop.i 0
  139. nop.b 0
  140. ;;
  141. ld8 v3 = [vp], 8 C M01
  142. ld8 u3 = [up], 8 C M01
  143. mov.i ar.lc = n C I0
  144. br .LL000 C B
  145. .Lb001: add rpx = 16, rp C M I
  146. ADDSUB w0 = r10, r11 C M I
  147.   (p15) br.cond.dpnt .grt1 C B
  148. ;;
  149. cmp.PRED p6, p0 = w0, r10 C M I
  150. mov r8 = 0 C M I
  151. br .Lcj1 C B
  152. .grt1: ld8 v1 = [vp], 8 C M01
  153. ld8 u1 = [up], 8 C M01
  154. shr.u n = n, 3 C I0
  155. ;;
  156. ld8 v2 = [vp], 8 C M01
  157. ld8 u2 = [up], 8 C M01
  158. cmp.ne p9, p0 = r0, r0 C read near Loop
  159. ;;
  160. ld8 v3 = [vp], 8 C M01
  161. ld8 u3 = [up], 8 C M01
  162. mov.i ar.lc = n C I0
  163. ;;
  164. ld8 v4 = [vp], 8 C M01
  165. ld8 u4 = [up], 8 C M01
  166. cmp.PRED p6, p0 = w0, r10 C M I
  167. ;;
  168. ld8 v5 = [vp], 8 C M01
  169. ld8 u5 = [up], 8 C M01
  170. ADDSUB w1 = u1, v1 C M I
  171. ;;
  172. ld8 v6 = [vp], 8 C M01
  173. ld8 u6 = [up], 8 C M01
  174. cmp.PRED p7, p0 = w1, u1 C M I
  175. ;;
  176. ld8 v7 = [vp], 8 C M01
  177. ld8 u7 = [up], 8 C M01
  178. ADDSUB w2 = u2, v2 C M I
  179. ;;
  180. add r11 = 512, vp
  181. ld8 v0 = [vp], 8 C M01
  182. add r10 = 512, up
  183. ld8 u0 = [up], 8 C M01
  184. br.cloop.dptk .Loop C B
  185. br .Lcj9 C B
  186. .Lb010: ld8 v0 = [vp], 8 C M01
  187. ld8 u0 = [up], 8 C M01
  188. add rpx = 24, rp C M I
  189. ADDSUB w7 = r10, r11 C M I
  190.   (p15) br.cond.dpnt .grt2 C B
  191. ;;
  192. cmp.PRED p9, p0 = w7, r10 C M I
  193. ADDSUB w0 = u0, v0 C M I
  194. br .Lcj2 C B
  195. .grt2: ld8 v1 = [vp], 8 C M01
  196. ld8 u1 = [up], 8 C M01
  197. shr.u n = n, 3 C I0
  198. ;;
  199. ld8 v2 = [vp], 8 C M01
  200. ld8 u2 = [up], 8 C M01
  201. ;;
  202. ld8 v3 = [vp], 8 C M01
  203. ld8 u3 = [up], 8 C M01
  204. mov.i ar.lc = n C I0
  205. ;;
  206. ld8 v4 = [vp], 8 C M01
  207. ld8 u4 = [up], 8 C M01
  208. ;;
  209. ld8 v5 = [vp], 8 C M01
  210. ld8 u5 = [up], 8 C M01
  211. cmp.PRED p9, p0 = w7, r10 C M I
  212. ;;
  213. ld8 v6 = [vp], 8 C M01
  214. ld8 u6 = [up], 8 C M01
  215. ADDSUB w0 = u0, v0 C M I
  216. ;;
  217. add r11 = 512, vp
  218. ld8 v7 = [vp], 8 C M01
  219. add r10 = 512, up
  220. ld8 u7 = [up], 8 C M01
  221. br .LL01x C B
  222. .Lb011: ld8 v7 = [vp], 8 C M01
  223. ld8 u7 = [up], 8 C M01
  224. ADDSUB w6 = r10, r11 C M I
  225. ;;
  226. ld8 v0 = [vp], 8 C M01
  227. ld8 u0 = [up], 8 C M01
  228.   (p15) br.cond.dpnt .grt3 C B
  229. ;;
  230. cmp.PRED p8, p0 = w6, r10 C M I
  231. ADDSUB w7 = u7, v7 C M I
  232. ;;
  233. st8 [rp] = w6, 8 C M23
  234. cmp.PRED p9, p0 = w7, u7 C M I
  235. br .Lcj3 C B
  236. .grt3: ld8 v1 = [vp], 8 C M01
  237. ld8 u1 = [up], 8 C M01
  238. add rpx = 32, rp C M I
  239. ;;
  240. ld8 v2 = [vp], 8 C M01
  241. ld8 u2 = [up], 8 C M01
  242. shr.u n = n, 3 C I0
  243. ;;
  244. ld8 v3 = [vp], 8 C M01
  245. ld8 u3 = [up], 8 C M01
  246. cmp.PRED p8, p0 = w6, r10 C M I
  247. ;;
  248. ld8 v4 = [vp], 8 C M01
  249. ld8 u4 = [up], 8 C M01
  250. mov.i ar.lc = n C I0
  251. ADDSUB w7 = u7, v7 C M I
  252. nop.i 0
  253. nop.b 0
  254. ;;
  255. ld8 v5 = [vp], 8 C M01
  256. ld8 u5 = [up], 8 C M01
  257. cmp.PRED p9, p0 = w7, u7 C M I
  258. ;;
  259. add r11 = 512, vp
  260. ld8 v6 = [vp], 8 C M01
  261. add r10 = 512, up
  262. ld8 u6 = [up], 8 C M01
  263.    (p8) cmp.eq.or p9, p0 = LIM, w7 C M I
  264. ;;
  265. ld8 v7 = [vp], 8 C M01
  266. ld8 u7 = [up], 8 C M01
  267.    (p8) add w7 = INCR, w7 C M I
  268. st8 [rp] = w6, 8 C M23
  269. ADDSUB w0 = u0, v0 C M I
  270. br .LL01x C B
  271. .Lb100: ld8 v6 = [vp], 8 C M01
  272. ld8 u6 = [up], 8 C M01
  273. add rpx = 8, rp C M I
  274. ;;
  275. ld8 v7 = [vp], 8 C M01
  276. ld8 u7 = [up], 8 C M01
  277. ADDSUB w5 = r10, r11 C M I
  278. ;;
  279. ld8 v0 = [vp], 8 C M01
  280. ld8 u0 = [up], 8 C M01
  281.   (p15) br.cond.dpnt .grt4 C B
  282. ;;
  283. cmp.PRED p7, p0 = w5, r10 C M I
  284. ADDSUB w6 = u6, v6 C M I
  285. ;;
  286. cmp.PRED p8, p0 = w6, u6 C M I
  287. ADDSUB w7 = u7, v7 C M I
  288. br .Lcj4 C B
  289. .grt4: ld8 v1 = [vp], 8 C M01
  290. ld8 u1 = [up], 8 C M01
  291. shr.u n = n, 3 C I0
  292. cmp.PRED p7, p0 = w5, r10 C M I
  293. ;;
  294. ld8 v2 = [vp], 8 C M01
  295. ld8 u2 = [up], 8 C M01
  296. ADDSUB w6 = u6, v6 C M I
  297. ;;
  298. ld8 v3 = [vp], 8 C M01
  299. ld8 u3 = [up], 8 C M01
  300. cmp.PRED p8, p0 = w6, u6 C M I
  301. ;;
  302. ld8 v4 = [vp], 8 C M01
  303. ld8 u4 = [up], 8 C M01
  304. mov.i ar.lc = n C I0
  305. ;;
  306. ld8 v5 = [vp], 8 C M01
  307. ld8 u5 = [up], 8 C M01
  308. ADDSUB w7 = u7, v7 C M I
  309. ;;
  310. add r11 = 512, vp
  311. ld8 v6 = [vp], 8 C M01
  312. add r10 = 512, up
  313. ld8 u6 = [up], 8 C M01
  314. cmp.PRED p9, p0 = w7, u7 C M I
  315. ;;
  316. ld8 v7 = [vp], 8 C M01
  317. ld8 u7 = [up], 8 C M01
  318.    (p7) cmp.eq.or p8, p0 = LIM, w6 C M I
  319.    (p7) add w6 = INCR, w6 C M I
  320. br .LL100 C B
  321. .Lb101: ld8 v5 = [vp], 8 C M01
  322. ld8 u5 = [up], 8 C M01
  323. add rpx = 16, rp C M I
  324. ;;
  325. ld8 v6 = [vp], 8 C M01
  326. ld8 u6 = [up], 8 C M01
  327. ADDSUB w4 = r10, r11 C M I
  328. ;;
  329. ld8 v7 = [vp], 8 C M01
  330. ld8 u7 = [up], 8 C M01
  331. cmp.PRED p6, p0 = w4, r10 C M I
  332. ;;
  333. ld8 v0 = [vp], 8 C M01
  334. ld8 u0 = [up], 8 C M01
  335. ADDSUB w5 = u5, v5 C M I
  336. shr.u n = n, 3 C I0
  337.   (p15) br.cond.dpnt .grt5 C B
  338. ;;
  339. cmp.PRED p7, p0 = w5, u5 C M I
  340. ADDSUB w6 = u6, v6 C M I
  341. br .Lcj5 C B
  342. .grt5: ld8 v1 = [vp], 8 C M01
  343. ld8 u1 = [up], 8 C M01
  344. ;;
  345. ld8 v2 = [vp], 8 C M01
  346. ld8 u2 = [up], 8 C M01
  347. mov.i ar.lc = n C I0
  348. ;;
  349. ld8 v3 = [vp], 8 C M01
  350. ld8 u3 = [up], 8 C M01
  351. cmp.PRED p7, p0 = w5, u5 C M I
  352. ;;
  353. ld8 v4 = [vp], 8 C M01
  354. ld8 u4 = [up], 8 C M01
  355. ADDSUB w6 = u6, v6 C M I
  356. ;;
  357. add r11 = 512, vp
  358. ld8 v5 = [vp], 8 C M01
  359. add r10 = 512, up
  360. ld8 u5 = [up], 8 C M01
  361. br .LL101 C B
  362. .Lb110: ld8 v4 = [vp], 8 C M01
  363. ld8 u4 = [up], 8 C M01
  364. add rpx = 24, rp C M I
  365. ;;
  366. ld8 v5 = [vp], 8 C M01
  367. ld8 u5 = [up], 8 C M01
  368. ADDSUB w3 = r10, r11 C M I
  369. ;;
  370. ld8 v6 = [vp], 8 C M01
  371. ld8 u6 = [up], 8 C M01
  372. shr.u n = n, 3 C I0
  373. ;;
  374. ld8 v7 = [vp], 8 C M01
  375. ld8 u7 = [up], 8 C M01
  376. cmp.PRED p9, p0 = w3, r10 C M I
  377. ;;
  378. ld8 v0 = [vp], 8 C M01
  379. ld8 u0 = [up], 8 C M01
  380. ADDSUB w4 = u4, v4 C M I
  381.   (p14) br.cond.dptk .Lcj67 C B
  382. ;;
  383. .grt6: ld8 v1 = [vp], 8 C M01
  384. ld8 u1 = [up], 8 C M01
  385. mov.i ar.lc = n C I0
  386. cmp.PRED p9, p0 = w3, r10 C M I
  387. nop.i 0
  388. nop.b 0
  389. ;;
  390. ld8 v2 = [vp], 8 C M01
  391. ld8 u2 = [up], 8 C M01
  392. ADDSUB w4 = u4, v4 C M I
  393. ;;
  394. add r11 = 512, vp
  395. ld8 v3 = [vp], 8 C M01
  396. add r10 = 512, up
  397. ld8 u3 = [up], 8 C M01
  398. br .LL11x C B
  399. .Lb111: ld8 v3 = [vp], 8 C M01
  400. ld8 u3 = [up], 8 C M01
  401. add rpx = 32, rp C M I
  402. ;;
  403. ld8 v4 = [vp], 8 C M01
  404. ld8 u4 = [up], 8 C M01
  405. ADDSUB w2 = r10, r11 C M I
  406. ;;
  407. ld8 v5 = [vp], 8 C M01
  408. ld8 u5 = [up], 8 C M01
  409. cmp.PRED p8, p0 = w2, r10 C M I
  410. ;;
  411. ld8 v6 = [vp], 8 C M01
  412. ld8 u6 = [up], 8 C M01
  413. ADDSUB w3 = u3, v3 C M I
  414. ;;
  415. ld8 v7 = [vp], 8 C M01
  416. ld8 u7 = [up], 8 C M01
  417. cmp.PRED p9, p0 = w3, u3 C M I
  418. ;;
  419. ld8 v0 = [vp], 8 C M01
  420. ld8 u0 = [up], 8 C M01
  421.   (p15) br.cond.dpnt .grt7 C B
  422. ;;
  423. st8 [rp] = w2, 8 C M23
  424.    (p8) cmp.eq.or p9, p0 = LIM, w3 C M I
  425.    (p8) add w3 = INCR, w3 C M I
  426. ADDSUB w4 = u4, v4 C M I
  427. br .Lcj67 C B
  428. .grt7: ld8 v1 = [vp], 8 C M01
  429. ld8 u1 = [up], 8 C M01
  430. shr.u n = n, 3 C I0
  431.    (p8) cmp.eq.or p9, p0 = LIM, w3 C M I
  432. nop.i 0
  433. nop.b 0
  434. ;;
  435. add r11 = 512, vp
  436. ld8 v2 = [vp], 8 C M01
  437. add r10 = 512, up
  438. ld8 u2 = [up], 8 C M01
  439.    (p8) add w3 = INCR, w3 C M I
  440. nop.b 0
  441. ;;
  442. ld8 v3 = [vp], 8 C M01
  443. ld8 u3 = [up], 8 C M01
  444. mov.i ar.lc = n C I0
  445. st8 [rp] = w2, 8 C M23
  446. ADDSUB w4 = u4, v4 C M I
  447. br .LL11x C B
  448. C *** MAIN LOOP START ***
  449. ALIGN(32)
  450. .Loop: ld8 v1 = [vp], 8 C M01
  451. cmp.PRED p7, p0 = w1, u1 C M I
  452.    (p9) cmp.eq.or p6, p0 = LIM, w0 C M I
  453. ld8 u1 = [up], 8 C M01
  454.    (p9) add w0 = INCR, w0 C M I
  455. ADDSUB w2 = u2, v2 C M I
  456. ;;
  457. ld8 v2 = [vp], 8 C M01
  458. cmp.PRED p8, p0 = w2, u2 C M I
  459.    (p6) cmp.eq.or p7, p0 = LIM, w1 C M I
  460. ld8 u2 = [up], 8 C M01
  461.    (p6) add w1 = INCR, w1 C M I
  462. ADDSUB w3 = u3, v3 C M I
  463. ;;
  464. st8 [rp] = w0, 8 C M23
  465. ld8 v3 = [vp], 8 C M01
  466. cmp.PRED p9, p0 = w3, u3 C M I
  467.    (p7) cmp.eq.or p8, p0 = LIM, w2 C M I
  468. ld8 u3 = [up], 8 C M01
  469.    (p7) add w2 = INCR, w2 C M I
  470. ;;
  471. .LL000: st8 [rp] = w1, 16 C M23
  472. st8 [rpx] = w2, 32 C M23
  473.    (p8) cmp.eq.or p9, p0 = LIM, w3 C M I
  474. lfetch [r10], 64
  475.    (p8) add w3 = INCR, w3 C M I
  476. ADDSUB w4 = u4, v4 C M I
  477. ;;
  478. .LL11x: st8 [rp] = w3, 8 C M23
  479. ld8 v4 = [vp], 8 C M01
  480. cmp.PRED p6, p0 = w4, u4 C M I
  481. ld8 u4 = [up], 8 C M01
  482. ADDSUB w5 = u5, v5 C M I
  483. ;;
  484. ld8 v5 = [vp], 8 C M01
  485. cmp.PRED p7, p0 = w5, u5 C M I
  486.    (p9) cmp.eq.or p6, p0 = LIM, w4 C M I
  487. ld8 u5 = [up], 8 C M01
  488.    (p9) add w4 = INCR, w4 C M I
  489. ADDSUB w6 = u6, v6 C M I
  490. ;;
  491. .LL101: ld8 v6 = [vp], 8 C M01
  492. cmp.PRED p8, p0 = w6, u6 C M I
  493.    (p6) cmp.eq.or p7, p0 = LIM, w5 C M I
  494. ld8 u6 = [up], 8 C M01
  495.    (p6) add w5 = INCR, w5 C M I
  496. ADDSUB w7 = u7, v7 C M I
  497. ;;
  498. st8 [rp] = w4, 8 C M23
  499. ld8 v7 = [vp], 8 C M01
  500. cmp.PRED p9, p0 = w7, u7 C M I
  501.    (p7) cmp.eq.or p8, p0 = LIM, w6 C M I
  502. ld8 u7 = [up], 8 C M01
  503.    (p7) add w6 = INCR, w6 C M I
  504. ;;
  505. .LL100: st8 [rp] = w5, 16 C M23
  506. st8 [rpx] = w6, 32 C M23
  507.    (p8) cmp.eq.or p9, p0 = LIM, w7 C M I
  508. lfetch [r11], 64
  509.    (p8) add w7 = INCR, w7 C M I
  510. ADDSUB w0 = u0, v0 C M I
  511. ;;
  512. .LL01x: st8 [rp] = w7, 8 C M23
  513. ld8 v0 = [vp], 8 C M01
  514. cmp.PRED p6, p0 = w0, u0 C M I
  515. ld8 u0 = [up], 8 C M01
  516. ADDSUB w1 = u1, v1 C M I
  517. br.cloop.dptk .Loop C B
  518. ;;
  519. C *** MAIN LOOP END ***
  520. cmp.PRED p7, p0 = w1, u1 C M I
  521.    (p9) cmp.eq.or p6, p0 = LIM, w0 C M I
  522.    (p9) add w0 = INCR, w0 C M I
  523. ADDSUB w2 = u2, v2 C M I
  524. ;;
  525. .Lcj9: cmp.PRED p8, p0 = w2, u2 C M I
  526.    (p6) cmp.eq.or p7, p0 = LIM, w1 C M I
  527. st8 [rp] = w0, 8 C M23
  528.    (p6) add w1 = INCR, w1 C M I
  529. ADDSUB w3 = u3, v3 C M I
  530. ;;
  531. cmp.PRED p9, p0 = w3, u3 C M I
  532.    (p7) cmp.eq.or p8, p0 = LIM, w2 C M I
  533.    (p7) add w2 = INCR, w2 C M I
  534. ;;
  535. .Lcj8: st8 [rp] = w1, 16 C M23
  536. st8 [rpx] = w2, 32 C M23
  537.    (p8) cmp.eq.or p9, p0 = LIM, w3 C M I
  538.    (p8) add w3 = INCR, w3 C M I
  539. ADDSUB w4 = u4, v4 C M I
  540. ;;
  541. .Lcj67: st8 [rp] = w3, 8 C M23
  542. cmp.PRED p6, p0 = w4, u4 C M I
  543. ADDSUB w5 = u5, v5 C M I
  544. ;;
  545. cmp.PRED p7, p0 = w5, u5 C M I
  546.    (p9) cmp.eq.or p6, p0 = LIM, w4 C M I
  547.    (p9) add w4 = INCR, w4 C M I
  548. ADDSUB w6 = u6, v6 C M I
  549. ;;
  550. .Lcj5: cmp.PRED p8, p0 = w6, u6 C M I
  551.    (p6) cmp.eq.or p7, p0 = LIM, w5 C M I
  552. st8 [rp] = w4, 8 C M23
  553.    (p6) add w5 = INCR, w5 C M I
  554. ADDSUB w7 = u7, v7 C M I
  555. ;;
  556. .Lcj4: cmp.PRED p9, p0 = w7, u7 C M I
  557.    (p7) cmp.eq.or p8, p0 = LIM, w6 C M I
  558.    (p7) add w6 = INCR, w6 C M I
  559. ;;
  560. st8 [rp] = w5, 16 C M23
  561. st8 [rpx] = w6, 32 C M23
  562. .Lcj3:
  563.    (p8) cmp.eq.or p9, p0 = LIM, w7 C M I
  564.    (p8) add w7 = INCR, w7 C M I
  565. ADDSUB w0 = u0, v0 C M I
  566. ;;
  567. .Lcj2: st8 [rp] = w7, 8 C M23
  568. cmp.PRED p6, p0 = w0, u0 C M I
  569. ;;
  570.    (p9) cmp.eq.or p6, p0 = LIM, w0 C M I
  571.    (p9) add w0 = INCR, w0 C M I
  572. mov r8 = 0 C M I
  573. ;;
  574. .Lcj1: st8 [rp] = w0, 8 C M23
  575. mov.i ar.lc = r2 C I0
  576.    (p6) mov r8 = 1 C M I
  577. br.ret.sptk.many b0 C B
  578. EPILOGUE()
  579. ASM_END()