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.

cdot_power9.S 3.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #define ASSEMBLER
  2. #include "common.h"
  3. /*
  4. .file "cdot.c"
  5. .abiversion 2
  6. .section ".text"
  7. .align 2
  8. .p2align 4,,15
  9. .globl cdot_k
  10. .type cdot_k, @function
  11. */
  12. PROLOGUE
  13. cdot_k:
  14. .LCF0:
  15. 0: mr. 9,3
  16. ble 0,.L10
  17. cmpdi 7,5,1
  18. beq 7,.L18
  19. .L3:
  20. mtctr 9
  21. xxlxor 2,2,2
  22. sldi 5,5,3
  23. sldi 7,7,3
  24. #ifdef CONJ
  25. fmr 12,2
  26. #endif
  27. fmr 8,2
  28. #ifndef CONJ
  29. fmr 9,2
  30. #endif
  31. fmr 1,2
  32. .p2align 4,,15
  33. .L9:
  34. #ifdef CONJ
  35. lfs 9,0(4)
  36. lfs 11,0(6)
  37. lfs 10,4(6)
  38. lfs 0,4(4)
  39. add 6,6,7
  40. add 4,4,5
  41. fmadds 1,9,11,1
  42. fmadds 12,9,10,12
  43. fmadds 8,0,10,8
  44. fmadds 2,11,0,2
  45. #else
  46. lfs 10,0(4)
  47. lfs 12,0(6)
  48. lfs 11,4(6)
  49. lfs 0,4(4)
  50. add 6,6,7
  51. add 4,4,5
  52. fmadds 1,10,12,1
  53. fmadds 8,10,11,8
  54. fmadds 9,0,11,9
  55. fmadds 2,12,0,2
  56. #endif
  57. bdnz .L9
  58. .L7:
  59. #ifdef CONJ
  60. fsubs 2,12,2
  61. fadds 1,1,8
  62. #else
  63. fadds 2,2,8
  64. fsubs 1,1,9
  65. #endif
  66. blr
  67. .p2align 4,,15
  68. .L18:
  69. cmpdi 7,7,1
  70. bne 7,.L3
  71. rldicr. 10,9,0,60
  72. bne 0,.L19
  73. xxlxor 2,2,2
  74. li 8,0
  75. #ifdef CONJ
  76. fmr 12,2
  77. #endif
  78. fmr 8,2
  79. #ifndef CONJ
  80. fmr 9,2
  81. #endif
  82. fmr 1,2
  83. .L4:
  84. addi 7,10,1
  85. sldi 8,8,2
  86. subf 10,10,9
  87. cmpd 7,7,9
  88. mtctr 10
  89. add 4,4,8
  90. add 6,6,8
  91. bgt 7,.L16
  92. li 10,-1
  93. rldicr 10,10,0,0
  94. cmpd 7,9,10
  95. beq 7,.L16
  96. .p2align 4,,15
  97. .L8:
  98. #ifdef CONJ
  99. lfs 9,0(4)
  100. lfs 11,0(6)
  101. lfs 10,4(6)
  102. lfs 0,4(4)
  103. addi 6,6,8
  104. addi 4,4,8
  105. fmadds 1,9,11,1
  106. fmadds 12,9,10,12
  107. fmadds 8,0,10,8
  108. fmadds 2,11,0,2
  109. #else
  110. lfs 10,0(4)
  111. lfs 12,0(6)
  112. lfs 11,4(6)
  113. lfs 0,4(4)
  114. addi 6,6,8
  115. addi 4,4,8
  116. fmadds 1,10,12,1
  117. fmadds 8,10,11,8
  118. fmadds 9,0,11,9
  119. fmadds 2,12,0,2
  120. #endif
  121. bdnz .L8
  122. b .L7
  123. .p2align 4,,15
  124. .L10:
  125. xxlxor 1,1,1
  126. fmr 2,1
  127. blr
  128. .L19:
  129. addis 8,2,.LANCHOR0@toc@ha
  130. sradi. 3,10,1
  131. xxspltib 42,0
  132. addi 8,8,.LANCHOR0@toc@l
  133. lxv 32,0(8)
  134. beq 0,.L12
  135. xxlor 6,42,42
  136. xxlor 4,42,42
  137. xxlor 0,42,42
  138. xxlor 7,42,42
  139. xxlor 5,42,42
  140. xxlor 3,42,42
  141. xxlor 12,42,42
  142. mr 7,4
  143. mr 8,6
  144. li 5,0
  145. .p2align 4,,15
  146. .L6:
  147. lxv 43,0(8)
  148. lxv 44,16(8)
  149. addi 5,5,4
  150. addi 8,8,64
  151. addi 7,7,64
  152. lxv 45,-32(8)
  153. lxv 33,-16(8)
  154. lxv 8,-64(7)
  155. lxv 9,-48(7)
  156. cmpd 7,3,5
  157. lxv 10,-32(7)
  158. lxv 11,-16(7)
  159. vpermr 6,11,11,0
  160. vpermr 7,12,12,0
  161. vpermr 8,13,13,0
  162. vpermr 9,1,1,0
  163. xvmaddasp 12,43,8
  164. xvmaddasp 3,44,9
  165. xvmaddasp 0,8,38
  166. xvmaddasp 4,9,39
  167. xvmaddasp 6,10,40
  168. xvmaddasp 5,45,10
  169. xvmaddasp 42,11,41
  170. xvmaddasp 7,33,11
  171. bgt 7,.L6
  172. xvaddsp 12,12,3
  173. xvaddsp 0,0,4
  174. xvaddsp 12,12,5
  175. xvaddsp 0,0,6
  176. xvaddsp 12,12,7
  177. xvaddsp 42,0,42
  178. .L5:
  179. #ifdef CONJ
  180. xxpermdi 8,12,12,2
  181. xxpermdi 0,42,42,2
  182. cmpd 7,9,10
  183. sldi 8,10,1
  184. xvaddsp 8,8,12
  185. xvaddsp 0,0,42
  186. xxsldwi 1,8,8,3
  187. xxsldwi 12,0,0,3
  188. xxsldwi 8,8,8,2
  189. xxsldwi 0,0,0,2
  190. xscvspdp 1,1
  191. xscvspdp 12,12
  192. xscvspdp 8,8
  193. #else
  194. xxpermdi 9,12,12,2
  195. xxpermdi 0,42,42,2
  196. cmpd 7,9,10
  197. sldi 8,10,1
  198. xvaddsp 9,9,12
  199. xvaddsp 0,0,42
  200. xxsldwi 1,9,9,3
  201. xxsldwi 2,0,0,3
  202. xxsldwi 9,9,9,2
  203. xxsldwi 0,0,0,2
  204. xscvspdp 8,2
  205. xscvspdp 1,1
  206. xscvspdp 9,9
  207. #endif
  208. xscvspdp 2,0
  209. bgt 7,.L4
  210. b .L7
  211. .L12:
  212. xxlor 12,42,42
  213. b .L5
  214. .L16:
  215. li 9,1
  216. mtctr 9
  217. b .L8
  218. .long 0
  219. .byte 0,0,0,0,0,0,0,0
  220. .size cdot_k,.-cdot_k
  221. .section .rodata
  222. .align 4
  223. .set .LANCHOR0,. + 0
  224. .type swap_mask_arr, @object
  225. .size swap_mask_arr, 16
  226. swap_mask_arr:
  227. .byte 4
  228. .byte 5
  229. .byte 6
  230. .byte 7
  231. .byte 0
  232. .byte 1
  233. .byte 2
  234. .byte 3
  235. .byte 12
  236. .byte 13
  237. .byte 14
  238. .byte 15
  239. .byte 8
  240. .byte 9
  241. .byte 10
  242. .byte 11
  243. .ident "GCC: (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812]"
  244. .section .note.GNU-stack,"",@progbits