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.3 kB

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