You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

caxpy_power9.S 7.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. #define ASSEMBLER
  2. #include "common.h"
  3. /*
  4. .file "caxpy.c"
  5. .abiversion 2
  6. .section ".text"
  7. .align 2
  8. .p2align 4,,15
  9. .globl caxpy_k
  10. .type caxpy_k, @function
  11. */
  12. PROLOGUE
  13. #ifdef CONJ
  14. caxpyc_k:
  15. #else
  16. caxpy_k:
  17. #endif
  18. .LCF0:
  19. 0: addis 2,12,.TOC.-.LCF0@ha
  20. addi 2,2,.TOC.-.LCF0@l
  21. #ifdef CONJ
  22. .localentry caxpyc_k,.-caxpyc_k
  23. #else
  24. .localentry caxpy_k,.-caxpy_k
  25. #endif
  26. mr. 7,3
  27. ble 0,.L33
  28. cmpdi 7,9,1
  29. beq 7,.L37
  30. .L3:
  31. mtctr 7
  32. ld 7,96(1)
  33. sldi 9,9,3
  34. sldi 7,7,3
  35. .p2align 4,,15
  36. .L14:
  37. lfs 10,4(8)
  38. lfs 11,0(8)
  39. lfs 12,0(10)
  40. lfs 0,4(10)
  41. fmuls 10,2,10
  42. #ifdef CONJ
  43. fmadds 11,11,1,10
  44. #else
  45. fmsubs 11,11,1,10
  46. #endif
  47. fadds 12,12,11
  48. stfs 12,0(10)
  49. lfs 11,0(8)
  50. lfs 12,4(8)
  51. add 8,8,9
  52. fmuls 11,2,11
  53. #ifdef CONJ
  54. fmsubs 12,12,1,11
  55. fsubs 0,0,12
  56. #else
  57. fmadds 12,12,1,11
  58. fadds 0,0,12
  59. #endif
  60. stfs 0,4(10)
  61. add 10,10,7
  62. bdnz .L14
  63. .L33:
  64. li 3,0
  65. blr
  66. .p2align 4,,15
  67. .L37:
  68. ld 6,96(1)
  69. cmpdi 7,6,1
  70. bne 7,.L3
  71. rldicr. 4,7,0,59
  72. li 11,0
  73. bne 0,.L38
  74. .L4:
  75. addi 6,11,8
  76. subf 0,4,7
  77. sldi 6,6,2
  78. addi 9,6,-32
  79. add 5,10,6
  80. add 6,8,6
  81. add 3,8,9
  82. add 9,10,9
  83. subfc 5,5,3
  84. subfe 5,5,5
  85. subfc 6,6,9
  86. subfe 12,12,12
  87. addi 6,5,1
  88. addi 5,12,1
  89. or 6,6,5
  90. rlwinm 6,6,0,0xff
  91. cmpwi 7,6,0
  92. beq 7,.L7
  93. sradi 6,4,63
  94. srdi 5,7,63
  95. subfc 12,7,4
  96. adde 6,5,6
  97. subfic 12,0,4
  98. subfe 12,12,12
  99. xori 6,6,0x1
  100. neg 12,12
  101. and 6,6,12
  102. rlwinm 6,6,0,0xff
  103. cmpwi 7,6,0
  104. beq 7,.L7
  105. cmpd 7,4,7
  106. li 6,1
  107. blt 7,.L39
  108. .L9:
  109. addi 0,7,-1
  110. subf 0,4,0
  111. subfic 0,0,3
  112. subfe 12,12,12
  113. addi 0,12,1
  114. rlwinm 0,0,0,0xff
  115. cmpwi 7,0,0
  116. bne 7,.L10
  117. sradi 0,4,63
  118. subfc 12,7,4
  119. adde 5,5,0
  120. rlwinm 5,5,0,0xff
  121. cmpwi 7,5,0
  122. bne 7,.L10
  123. xscvdpspn 0,1
  124. xscvdpspn 12,2
  125. addi 0,6,-1
  126. std 31,-8(1)
  127. addis 12,2,.LC2@toc@ha
  128. addis 6,2,.LC3@toc@ha
  129. li 5,16
  130. srdi. 31,0,2
  131. addi 6,6,.LC3@toc@l
  132. addi 12,12,.LC2@toc@l
  133. mtctr 31
  134. lxv 41,0(6)
  135. lxv 42,0(12)
  136. li 6,0
  137. xxspltw 0,0,0
  138. xxspltw 12,12,0
  139. beq 0,.L40
  140. .p2align 4,,15
  141. .L11:
  142. #ifdef CONJ
  143. lxvx 33,3,5
  144. lxvx 44,3,6
  145. lxvx 43,9,6
  146. lxvx 32,9,5
  147. vperm 13,1,12,10
  148. vperm 12,1,12,9
  149. vperm 8,0,11,10
  150. vperm 0,0,11,9
  151. xvmulsp 33,12,44
  152. xvmulsp 11,12,45
  153. xvmaddasp 33,0,45
  154. xvmsubmsp 44,0,11
  155. xvaddsp 33,33,40
  156. xvsubsp 32,32,44
  157. #else
  158. lxvx 33,3,6
  159. lxvx 32,3,5
  160. lxvx 43,9,6
  161. lxvx 44,9,5
  162. vperm 13,0,1,10
  163. vperm 0,0,1,9
  164. vperm 8,12,11,10
  165. vperm 12,12,11,9
  166. xvmulsp 33,12,32
  167. xvmulsp 11,12,45
  168. xvmsubasp 33,0,45
  169. xvmaddmsp 32,0,11
  170. xvaddsp 33,33,40
  171. xvaddsp 32,32,44
  172. #endif
  173. vmrglw 13,0,1
  174. vmrghw 0,0,1
  175. stxvx 45,9,6
  176. stxvx 32,9,5
  177. addi 6,6,32
  178. addi 5,5,32
  179. bdnz .L11
  180. rldicr 0,0,0,61
  181. ld 31,-8(1)
  182. sldi 9,0,1
  183. add 4,4,0
  184. add 11,11,9
  185. .L10:
  186. sldi 5,11,2
  187. addi 6,4,1
  188. addi 9,11,2
  189. addi 3,5,4
  190. lfsx 12,8,5
  191. cmpd 7,7,6
  192. lfsx 0,10,5
  193. lfsx 11,8,3
  194. fmuls 11,2,11
  195. #ifdef CONJ
  196. fmadds 12,12,1,11
  197. #else
  198. fmsubs 12,12,1,11
  199. #endif
  200. fadds 0,0,12
  201. stfsx 0,10,5
  202. lfsx 11,8,5
  203. lfsx 12,8,3
  204. lfsx 0,10,3
  205. fmuls 11,2,11
  206. #ifdef CONJ
  207. fmsubs 12,12,1,11
  208. fsubs 0,0,12
  209. #else
  210. fmadds 12,12,1,11
  211. fadds 0,0,12
  212. #endif
  213. stfsx 0,10,3
  214. ble 7,.L33
  215. sldi 9,9,2
  216. addi 5,4,2
  217. addi 6,11,4
  218. addi 3,9,4
  219. lfsx 12,8,9
  220. cmpd 7,7,5
  221. lfsx 0,10,9
  222. lfsx 11,8,3
  223. fmuls 11,2,11
  224. #ifdef CONJ
  225. fmadds 12,1,12,11
  226. #else
  227. fmsubs 12,1,12,11
  228. #endif
  229. fadds 0,0,12
  230. stfsx 0,10,9
  231. lfsx 11,8,9
  232. lfsx 12,8,3
  233. lfsx 0,10,3
  234. fmuls 11,2,11
  235. #ifdef CONJ
  236. fmsubs 12,1,12,11
  237. fsubs 0,0,12
  238. #else
  239. fmadds 12,1,12,11
  240. fadds 0,0,12
  241. #endif
  242. stfsx 0,10,3
  243. ble 7,.L33
  244. sldi 6,6,2
  245. addi 4,4,3
  246. addi 9,11,6
  247. addi 5,6,4
  248. lfsx 12,8,6
  249. cmpd 7,7,4
  250. lfsx 0,10,6
  251. lfsx 11,8,5
  252. fmuls 11,2,11
  253. #ifdef CONJ
  254. fmadds 12,1,12,11
  255. #else
  256. fmsubs 12,1,12,11
  257. #endif
  258. fadds 0,0,12
  259. stfsx 0,10,6
  260. lfsx 11,8,6
  261. lfsx 12,8,5
  262. lfsx 0,10,5
  263. fmuls 11,2,11
  264. #ifdef CONJ
  265. fmsubs 12,1,12,11
  266. fsubs 0,0,12
  267. #else
  268. fmadds 12,1,12,11
  269. fadds 0,0,12
  270. #endif
  271. stfsx 0,10,5
  272. ble 7,.L33
  273. sldi 9,9,2
  274. addi 7,9,4
  275. lfsx 12,8,9
  276. lfsx 0,10,9
  277. lfsx 11,8,7
  278. fmuls 11,2,11
  279. #ifdef CONJ
  280. fmadds 12,1,12,11
  281. #else
  282. fmsubs 12,1,12,11
  283. #endif
  284. fadds 0,0,12
  285. stfsx 0,10,9
  286. lfsx 11,8,9
  287. lfsx 12,8,7
  288. lfsx 0,10,7
  289. fmuls 2,2,11
  290. #ifdef CONJ
  291. fmsubs 1,1,12,2
  292. fsubs 1,0,1
  293. #else
  294. fmadds 1,1,12,2
  295. fadds 1,0,1
  296. #endif
  297. stfsx 1,10,7
  298. b .L33
  299. .L39:
  300. mr 6,0
  301. b .L9
  302. .L38:
  303. #ifdef CONJ
  304. fneg 0,1
  305. xxpermdi 45,1,1,0
  306. xscvdpspn 12,2
  307. addis 9,2,.LANCHOR0@toc@ha
  308. sradi. 3,4,1
  309. xxpermdi 44,0,0,0
  310. addi 9,9,.LANCHOR0@toc@l
  311. xvcvdpsp 45,45
  312. lxv 33,0(9)
  313. xvcvdpsp 32,44
  314. xxspltw 12,12,0
  315. #else
  316. fneg 12,2
  317. xxpermdi 32,2,2,0
  318. xscvdpspn 0,1
  319. addis 9,2,.LANCHOR0@toc@ha
  320. sradi. 3,4,1
  321. xxpermdi 45,12,12,0
  322. addi 9,9,.LANCHOR0@toc@l
  323. xvcvdpsp 32,32
  324. lxv 33,0(9)
  325. xvcvdpsp 45,45
  326. xxspltw 0,0,0
  327. #endif
  328. vmrgew 0,0,13
  329. beq 0,.L5
  330. mr 6,8
  331. mr 9,10
  332. li 5,0
  333. .p2align 4,,15
  334. .L6:
  335. lxv 38,16(6)
  336. lxv 11,16(9)
  337. addi 5,5,8
  338. addi 6,6,128
  339. addi 9,9,128
  340. lxv 39,-96(6)
  341. lxv 40,-80(6)
  342. lxv 41,-64(6)
  343. lxv 42,-48(6)
  344. cmpd 7,3,5
  345. lxv 43,-32(6)
  346. lxv 45,-128(6)
  347. lxv 44,-16(6)
  348. #ifdef CONJ
  349. lxv 0,-128(9)
  350. vpermr 17,6,6,1
  351. xvmaddmsp 38,32,11
  352. lxv 11,-96(9)
  353. vpermr 18,7,7,1
  354. vpermr 19,8,8,1
  355. vpermr 2,9,9,1
  356. vpermr 3,10,10,1
  357. vpermr 4,11,11,1
  358. xvmaddasp 0,32,45
  359. vpermr 5,12,12,1
  360. xvmaddmsp 39,32,11
  361. lxv 11,-80(9)
  362. vpermr 13,13,13,1
  363. xvmaddasp 38,12,49
  364. xvmaddmsp 40,32,11
  365. lxv 11,-64(9)
  366. xvmaddmsp 45,12,0
  367. xvmaddasp 39,12,50
  368. stxv 38,-112(9)
  369. xvmaddmsp 41,32,11
  370. lxv 11,-48(9)
  371. xvmaddasp 40,12,51
  372. stxv 45,-128(9)
  373. stxv 39,-96(9)
  374. xvmaddmsp 42,32,11
  375. lxv 11,-32(9)
  376. xvmaddasp 41,12,34
  377. stxv 40,-80(9)
  378. xvmaddmsp 43,32,11
  379. lxv 11,-16(9)
  380. xvmaddasp 42,12,35
  381. stxv 41,-64(9)
  382. xvmaddmsp 44,32,11
  383. xvmaddasp 43,12,36
  384. stxv 42,-48(9)
  385. xvmaddasp 44,12,37
  386. #else
  387. lxv 12,-128(9)
  388. vpermr 17,6,6,1
  389. xvmaddmsp 38,0,11
  390. lxv 11,-96(9)
  391. vpermr 18,7,7,1
  392. vpermr 19,8,8,1
  393. vpermr 2,9,9,1
  394. vpermr 3,10,10,1
  395. vpermr 4,11,11,1
  396. xvmaddasp 12,0,45
  397. vpermr 5,12,12,1
  398. xvmaddmsp 39,0,11
  399. lxv 11,-80(9)
  400. vpermr 13,13,13,1
  401. xvmaddasp 38,32,49
  402. xvmaddmsp 40,0,11
  403. lxv 11,-64(9)
  404. xvmaddmsp 45,32,12
  405. xvmaddasp 39,32,50
  406. stxv 38,-112(9)
  407. xvmaddmsp 41,0,11
  408. lxv 11,-48(9)
  409. xvmaddasp 40,32,51
  410. stxv 45,-128(9)
  411. stxv 39,-96(9)
  412. xvmaddmsp 42,0,11
  413. lxv 11,-32(9)
  414. xvmaddasp 41,32,34
  415. stxv 40,-80(9)
  416. xvmaddmsp 43,0,11
  417. lxv 11,-16(9)
  418. xvmaddasp 42,32,35
  419. stxv 41,-64(9)
  420. xvmaddmsp 44,0,11
  421. xvmaddasp 43,32,36
  422. stxv 42,-48(9)
  423. xvmaddasp 44,32,37
  424. #endif
  425. stxv 43,-32(9)
  426. stxv 44,-16(9)
  427. bgt 7,.L6
  428. .L5:
  429. cmpd 7,7,4
  430. ble 7,.L33
  431. sldi 11,4,1
  432. b .L4
  433. .L7:
  434. addi 10,4,1
  435. subf 8,4,7
  436. cmpd 7,10,7
  437. mtctr 8
  438. bgt 7,.L26
  439. li 10,-1
  440. rldicr 10,10,0,0
  441. cmpd 7,7,10
  442. beq 7,.L26
  443. .p2align 4,,15
  444. .L13:
  445. lfs 10,4(3)
  446. lfs 11,0(3)
  447. lfs 12,0(9)
  448. lfs 0,4(9)
  449. addi 3,3,8
  450. addi 9,9,8
  451. fmuls 10,2,10
  452. #ifdef CONJ
  453. fmadds 11,1,11,10
  454. #else
  455. fmsubs 11,1,11,10
  456. #endif
  457. fadds 12,12,11
  458. stfs 12,-8(9)
  459. lfs 11,-8(3)
  460. lfs 12,-4(3)
  461. fmuls 11,2,11
  462. #ifdef CONJ
  463. fmsubs 12,1,12,11
  464. fsubs 0,0,12
  465. #else
  466. fmadds 12,1,12,11
  467. fadds 0,0,12
  468. #endif
  469. stfs 0,-4(9)
  470. bdnz .L13
  471. b .L33
  472. .L40:
  473. li 31,1
  474. mtctr 31
  475. b .L11
  476. .L26:
  477. li 10,1
  478. mtctr 10
  479. b .L13
  480. .long 0
  481. .byte 0,0,0,0,0,1,0,0
  482. #ifdef CONJ
  483. .size caxpyc_k,.-caxpyc_k
  484. #else
  485. .size caxpy_k,.-caxpy_k
  486. #endif
  487. .section .rodata
  488. .align 4
  489. .set .LANCHOR0,. + 0
  490. .type swap_mask_arr, @object
  491. .size swap_mask_arr, 16
  492. swap_mask_arr:
  493. .byte 4
  494. .byte 5
  495. .byte 6
  496. .byte 7
  497. .byte 0
  498. .byte 1
  499. .byte 2
  500. .byte 3
  501. .byte 12
  502. .byte 13
  503. .byte 14
  504. .byte 15
  505. .byte 8
  506. .byte 9
  507. .byte 10
  508. .byte 11
  509. .section .rodata.cst16,"aM",@progbits,16
  510. .align 4
  511. .LC2:
  512. .byte 31
  513. .byte 30
  514. .byte 29
  515. .byte 28
  516. .byte 23
  517. .byte 22
  518. .byte 21
  519. .byte 20
  520. .byte 15
  521. .byte 14
  522. .byte 13
  523. .byte 12
  524. .byte 7
  525. .byte 6
  526. .byte 5
  527. .byte 4
  528. .LC3:
  529. .byte 27
  530. .byte 26
  531. .byte 25
  532. .byte 24
  533. .byte 19
  534. .byte 18
  535. .byte 17
  536. .byte 16
  537. .byte 11
  538. .byte 10
  539. .byte 9
  540. .byte 8
  541. .byte 3
  542. .byte 2
  543. .byte 1
  544. .byte 0
  545. .ident "GCC: (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812]"
  546. .gnu_attribute 4, 1
  547. .section .note.GNU-stack,"",@progbits