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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  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. fmadds 11,11,1,10
  36. #else
  37. fmsubs 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. #ifdef CONJ
  243. fmsubs 12,1,12,11
  244. fsubs 0,0,12
  245. #else
  246. fmadds 12,1,12,11
  247. fadds 0,0,12
  248. #endif
  249. stfsx 0,10,5
  250. ble 7,.L39
  251. sldi 6,6,2
  252. addi 4,4,3
  253. addi 5,6,4
  254. cmpd 7,7,4
  255. lfsx 12,8,6
  256. lfsx 0,10,6
  257. addi 9,11,6
  258. lfsx 11,8,5
  259. fmuls 11,2,11
  260. #ifdef CONJ
  261. fmadds 12,1,12,11
  262. #else
  263. fmsubs 12,1,12,11
  264. #endif
  265. fadds 0,0,12
  266. stfsx 0,10,6
  267. lfsx 11,8,6
  268. lfsx 12,8,5
  269. lfsx 0,10,5
  270. fmuls 11,2,11
  271. #ifdef CONJ
  272. fmsubs 12,1,12,11
  273. fsubs 0,0,12
  274. #else
  275. fmadds 12,1,12,11
  276. fadds 0,0,12
  277. #endif
  278. stfsx 0,10,5
  279. ble 7,.L39
  280. sldi 9,9,2
  281. ld 31,-8(1)
  282. addi 7,9,4
  283. lfsx 12,8,9
  284. lfsx 0,10,9
  285. lfsx 11,8,7
  286. fmuls 11,2,11
  287. #ifdef CONJ
  288. fmadds 12,1,12,11
  289. #else
  290. fmsubs 12,1,12,11
  291. #endif
  292. fadds 0,0,12
  293. stfsx 0,10,9
  294. lfsx 11,8,9
  295. lfsx 12,8,7
  296. lfsx 0,10,7
  297. fmuls 2,2,11
  298. #ifdef CONJ
  299. fmsubs 1,1,12,2
  300. fsubs 1,0,1
  301. #else
  302. fmadds 1,1,12,2
  303. fadds 1,0,1
  304. #endif
  305. stfsx 1,10,7
  306. b .L33
  307. .L43:
  308. mr 6,0
  309. b .L9
  310. .L7:
  311. addi 10,4,1
  312. cmpd 7,10,7
  313. subf 10,4,7
  314. mtctr 10
  315. bgt 7,.L26
  316. li 10,-1
  317. rldicr 10,10,0,0
  318. cmpd 7,7,10
  319. beq 7,.L26
  320. .p2align 4,,15
  321. .L13:
  322. lfs 10,4(3)
  323. lfs 11,0(3)
  324. addi 9,9,8
  325. addi 3,3,8
  326. lfs 12,-8(9)
  327. lfs 0,-4(9)
  328. fmuls 10,2,10
  329. #ifdef CONJ
  330. fmadds 11,1,11,10
  331. #else
  332. fmsubs 11,1,11,10
  333. #endif
  334. fadds 12,12,11
  335. stfs 12,-8(9)
  336. lfs 11,-8(3)
  337. lfs 12,-4(3)
  338. fmuls 11,2,11
  339. #ifdef CONJ
  340. fmsubs 12,1,12,11
  341. fsubs 0,0,12
  342. #else
  343. fmadds 12,1,12,11
  344. fadds 0,0,12
  345. #endif
  346. stfs 0,-4(9)
  347. bdnz .L13
  348. .L39:
  349. ld 31,-8(1)
  350. b .L33
  351. .L42:
  352. #ifdef CONJ
  353. fneg 0,1
  354. xxpermdi 32,1,1,0
  355. addis 9,2,.LANCHOR0@toc@ha
  356. std 28,-32(1)
  357. sradi. 28,4,1
  358. addi 9,9,.LANCHOR0@toc@l
  359. xscvdpspn 5,2
  360. xvcvdpsp 32,32
  361. lxvd2x 12,0,9
  362. xxpermdi 39,0,0,0
  363. xxspltw 5,5,0
  364. xvcvdpsp 39,39
  365. #else
  366. fneg 0,2
  367. xxpermdi 39,2,2,0
  368. addis 9,2,.LANCHOR0@toc@ha
  369. std 28,-32(1)
  370. sradi. 28,4,1
  371. addi 9,9,.LANCHOR0@toc@l
  372. xscvdpspn 5,1
  373. xvcvdpsp 39,39
  374. lxvd2x 12,0,9
  375. xxpermdi 32,0,0,0
  376. xxspltw 5,5,0
  377. xvcvdpsp 32,32
  378. #endif
  379. xxpermdi 12,12,12,2
  380. vmrgew 7,7,0
  381. beq 0,.L5
  382. xxlnor 38,12,12
  383. std 29,-24(1)
  384. std 30,-16(1)
  385. mr 6,8
  386. mr 9,10
  387. li 29,0
  388. li 30,16
  389. li 31,32
  390. li 12,48
  391. li 0,64
  392. li 11,80
  393. li 3,96
  394. li 5,112
  395. .p2align 4,,15
  396. .L6:
  397. lxvd2x 6,0,9
  398. lxvd2x 40,0,6
  399. addi 29,29,8
  400. lxvd2x 41,6,30
  401. lxvd2x 42,6,31
  402. cmpd 7,28,29
  403. lxvd2x 43,6,12
  404. lxvd2x 44,6,0
  405. lxvd2x 45,6,11
  406. lxvd2x 33,6,3
  407. lxvd2x 32,6,5
  408. lxvd2x 7,9,30
  409. addi 6,6,128
  410. lxvd2x 8,9,31
  411. lxvd2x 9,9,12
  412. xxpermdi 40,40,40,2
  413. xxpermdi 6,6,6,2
  414. lxvd2x 10,9,0
  415. lxvd2x 11,9,11
  416. xxpermdi 41,41,41,2
  417. xxpermdi 42,42,42,2
  418. lxvd2x 12,9,3
  419. lxvd2x 0,9,5
  420. xxpermdi 43,43,43,2
  421. xxpermdi 44,44,44,2
  422. xxpermdi 45,45,45,2
  423. xxpermdi 33,33,33,2
  424. xxpermdi 32,32,32,2
  425. xxpermdi 7,7,7,2
  426. xxpermdi 8,8,8,2
  427. xxpermdi 9,9,9,2
  428. xxpermdi 10,10,10,2
  429. xxpermdi 11,11,11,2
  430. xxpermdi 12,12,12,2
  431. xxpermdi 0,0,0,2
  432. #ifndef CONJ
  433. xvmaddasp 6,5,40
  434. xvmaddasp 7,5,41
  435. xvmaddasp 8,5,42
  436. xvmaddasp 9,5,43
  437. xvmaddasp 10,5,44
  438. xvmaddasp 11,5,45
  439. xvmaddasp 12,5,33
  440. xvmaddasp 0,5,32
  441. vperm 8,8,8,6
  442. vperm 9,9,9,6
  443. vperm 10,10,10,6
  444. vperm 11,11,11,6
  445. vperm 12,12,12,6
  446. vperm 13,13,13,6
  447. vperm 1,1,1,6
  448. vperm 0,0,0,6
  449. #endif
  450. xvmaddasp 6,39,40
  451. xvmaddasp 7,39,41
  452. xvmaddasp 8,39,42
  453. xvmaddasp 9,39,43
  454. xvmaddasp 10,39,44
  455. xvmaddasp 11,39,45
  456. xvmaddasp 12,39,33
  457. xvmaddasp 0,39,32
  458. #ifdef CONJ
  459. vperm 8,8,8,6
  460. vperm 9,9,9,6
  461. vperm 10,10,10,6
  462. vperm 11,11,11,6
  463. vperm 12,12,12,6
  464. vperm 13,13,13,6
  465. vperm 1,1,1,6
  466. vperm 0,0,0,6
  467. xvmaddasp 6,5,40
  468. xvmaddasp 7,5,41
  469. xvmaddasp 8,5,42
  470. xvmaddasp 9,5,43
  471. xvmaddasp 10,5,44
  472. xvmaddasp 11,5,45
  473. xvmaddasp 12,5,33
  474. xvmaddasp 0,5,32
  475. #endif
  476. xxpermdi 6,6,6,2
  477. xxpermdi 7,7,7,2
  478. xxpermdi 8,8,8,2
  479. xxpermdi 9,9,9,2
  480. stxvd2x 6,0,9
  481. xxpermdi 10,10,10,2
  482. stxvd2x 7,9,30
  483. xxpermdi 11,11,11,2
  484. stxvd2x 8,9,31
  485. xxpermdi 12,12,12,2
  486. stxvd2x 9,9,12
  487. xxpermdi 0,0,0,2
  488. stxvd2x 10,9,0
  489. stxvd2x 11,9,11
  490. stxvd2x 12,9,3
  491. stxvd2x 0,9,5
  492. addi 9,9,128
  493. bgt 7,.L6
  494. ld 29,-24(1)
  495. ld 30,-16(1)
  496. .L5:
  497. cmpd 7,7,4
  498. ble 7,.L36
  499. sldi 11,4,1
  500. ld 28,-32(1)
  501. b .L4
  502. .L36:
  503. ld 28,-32(1)
  504. ld 31,-8(1)
  505. b .L33
  506. .L44:
  507. li 31,1
  508. mtctr 31
  509. b .L11
  510. .L26:
  511. li 10,1
  512. mtctr 10
  513. b .L13
  514. .long 0
  515. .byte 0,0,0,0,0,4,0,0
  516. .size caxpy_k,.-caxpy_k
  517. .section .rodata
  518. .align 4
  519. .set .LANCHOR0,. + 0
  520. .type swap_mask_arr, @object
  521. .size swap_mask_arr, 16
  522. swap_mask_arr:
  523. .byte 4
  524. .byte 5
  525. .byte 6
  526. .byte 7
  527. .byte 0
  528. .byte 1
  529. .byte 2
  530. .byte 3
  531. .byte 12
  532. .byte 13
  533. .byte 14
  534. .byte 15
  535. .byte 8
  536. .byte 9
  537. .byte 10
  538. .byte 11
  539. .section .rodata.cst16,"aM",@progbits,16
  540. .align 4
  541. .LC2:
  542. .byte 31
  543. .byte 30
  544. .byte 29
  545. .byte 28
  546. .byte 23
  547. .byte 22
  548. .byte 21
  549. .byte 20
  550. .byte 15
  551. .byte 14
  552. .byte 13
  553. .byte 12
  554. .byte 7
  555. .byte 6
  556. .byte 5
  557. .byte 4
  558. .LC3:
  559. .byte 27
  560. .byte 26
  561. .byte 25
  562. .byte 24
  563. .byte 19
  564. .byte 18
  565. .byte 17
  566. .byte 16
  567. .byte 11
  568. .byte 10
  569. .byte 9
  570. .byte 8
  571. .byte 3
  572. .byte 2
  573. .byte 1
  574. .byte 0
  575. .ident "GCC: (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812]"
  576. .gnu_attribute 4, 1
  577. .section .note.GNU-stack,"",@progbits