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

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