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_power8.S 8.1 kB

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