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

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