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.

caxpby_lasx.S 25 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. #define ASSEMBLER
  2. #include "common.h"
  3. #define N $r4
  4. #define ALPHAR $f0
  5. #define ALPHAI $f1
  6. #define X $r5
  7. #define INCX $r6
  8. #define BETAR $f2
  9. #define BETAI $f3
  10. #define Y $r7
  11. #define INCY $r8
  12. #define I $r12
  13. #define TEMP $r13
  14. #define t1 $r14
  15. #define t2 $r16
  16. #define t3 $r15
  17. #define t4 $r17
  18. #define XX $r18
  19. #define YY $r19
  20. #define a1 $f12
  21. #define a2 $f13
  22. #define a3 $f14
  23. #define a4 $f15
  24. #define s1 $f16
  25. #define s2 $f17
  26. #define s3 $f18
  27. #define s4 $f19
  28. #define VX0 $xr8
  29. #define VX1 $xr20
  30. #define VX2 $xr21
  31. #define VX3 $xr22
  32. #define VXAR $xr23
  33. #define VXAI $xr19
  34. #define VXBR $xr14
  35. #define VXBI $xr13
  36. #define VXZ $xr12
  37. #define x1 $xr18
  38. #define x2 $xr17
  39. #define x3 $xr16
  40. #define x4 $xr15
  41. PROLOGUE
  42. bge $r0, N, .L999
  43. movgr2fr.d a1, $r0
  44. FFINT a1, a1
  45. slli.d INCX, INCX, ZBASE_SHIFT
  46. slli.d INCY, INCY, ZBASE_SHIFT
  47. MTG t1, ALPHAR
  48. MTG t2, ALPHAI
  49. MTG t3, BETAR
  50. MTG t4, BETAI
  51. #ifdef DOUBLE
  52. xvreplgr2vr.d VXAR, t1
  53. xvreplgr2vr.d VXAI, t2
  54. xvreplgr2vr.d VXBR, t3
  55. xvreplgr2vr.d VXBI, t4
  56. #else
  57. xvreplgr2vr.w VXAR, t1
  58. xvreplgr2vr.w VXAI, t2
  59. xvreplgr2vr.w VXBR, t3
  60. xvreplgr2vr.w VXBI, t4
  61. #endif
  62. xvxor.v VXZ, VXZ, VXZ
  63. // If incx == 0 || incy == 0, do one by one
  64. and TEMP, INCX, INCY
  65. or I, N, N
  66. beqz TEMP, .L998
  67. li.d TEMP, 1
  68. slli.d TEMP, TEMP, ZBASE_SHIFT
  69. #ifdef DOUBLE
  70. srai.d I, N, 2
  71. #else
  72. srai.d I, N, 3
  73. #endif
  74. bne INCX, TEMP, .L20
  75. bne INCY, TEMP, .L12 // INCX==1 and INCY!=1
  76. b .L11 // INCX==1 and INCY==1
  77. .L20:
  78. bne INCY, TEMP, .L22 // INCX!=1 and INCY!=1
  79. b .L21 // INCX!=1 and INCY==1
  80. .L11:
  81. bge $r0, I, .L997
  82. CMPEQ $fcc0, BETAR, a1
  83. CMPEQ $fcc1, BETAI, a1
  84. CMPEQ $fcc2, ALPHAR, a1
  85. CMPEQ $fcc3, ALPHAI, a1
  86. bceqz $fcc0, .L13
  87. bceqz $fcc1, .L13
  88. b .L14
  89. .align 3
  90. .L13:
  91. bceqz $fcc2, .L114
  92. bceqz $fcc3, .L114 //!(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  93. b .L113 //!(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  94. .L14:
  95. bceqz $fcc2, .L112
  96. bceqz $fcc3, .L112 //(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  97. b .L111 //(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  98. .align 3
  99. .L111: //(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  100. xvst VXZ, Y, 0 * SIZE
  101. #ifdef DOUBLE
  102. xvst VXZ, Y, 4 * SIZE
  103. addi.d Y, Y, 8 * SIZE
  104. #else
  105. xvst VXZ, Y, 8 * SIZE
  106. addi.d Y, Y, 16 * SIZE
  107. #endif
  108. addi.d I, I, -1
  109. blt $r0, I, .L111
  110. b .L997
  111. .align 3
  112. .L112: //(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  113. #ifdef DOUBLE
  114. xvld VX0, X, 0 * SIZE
  115. xvld VX1, X, 4 * SIZE
  116. xvpickev.d x1, VX1, VX0
  117. xvpickod.d x2, VX1, VX0
  118. #else
  119. xvld VX0, X, 0 * SIZE
  120. xvld VX1, X, 8 * SIZE
  121. xvpickev.w x1, VX1, VX0
  122. xvpickod.w x2, VX1, VX0
  123. #endif
  124. XVFMUL x3, VXAI, x2
  125. XVFMUL x4, VXAI, x1
  126. XVMSUB x3, VXAR, x1, x3
  127. XVFMADD x4, VXAR, x2, x4
  128. #ifdef DOUBLE
  129. xvilvl.d VX2, x4 ,x3
  130. xvilvh.d VX3, x4, x3
  131. xvst VX2, Y, 0 * SIZE
  132. xvst VX3, Y, 4 * SIZE
  133. addi.d X, X, 8 * SIZE
  134. addi.d Y, Y, 8 * SIZE
  135. #else
  136. xvilvl.w VX2, x4 ,x3
  137. xvilvh.w VX3, x4, x3
  138. xvst VX2, Y, 0 * SIZE
  139. xvst VX3, Y, 8 * SIZE
  140. addi.d X, X, 16 * SIZE
  141. addi.d Y, Y, 16 * SIZE
  142. #endif
  143. addi.d I, I, -1
  144. blt $r0, I, .L112
  145. b .L997
  146. .align 3
  147. .L113: //!(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  148. #ifdef DOUBLE
  149. xvld VX0, Y, 0 * SIZE
  150. xvld VX1, Y, 4 * SIZE
  151. xvpickev.d x1, VX1, VX0
  152. xvpickod.d x2, VX1, VX0
  153. #else
  154. xvld VX0, Y, 0 * SIZE
  155. xvld VX1, Y, 8 * SIZE
  156. xvpickev.w x1, VX1, VX0
  157. xvpickod.w x2, VX1, VX0
  158. #endif
  159. XVFMUL x3, VXBI, x2
  160. XVFMUL x4, VXBI, x1
  161. XVMSUB x3, VXBR, x1, x3
  162. XVFMADD x4, VXBR, x2, x4
  163. #ifdef DOUBLE
  164. xvilvl.d VX2, x4 ,x3
  165. xvilvh.d VX3, x4, x3
  166. xvst VX2, Y, 0 * SIZE
  167. xvst VX3, Y, 4 * SIZE
  168. addi.d Y, Y, 8 * SIZE
  169. #else
  170. xvilvl.w VX2, x4 ,x3
  171. xvilvh.w VX3, x4, x3
  172. xvst VX2, Y, 0 * SIZE
  173. xvst VX3, Y, 8 * SIZE
  174. addi.d Y, Y, 16 * SIZE
  175. #endif
  176. addi.d I, I, -1
  177. blt $r0, I, .L113
  178. b .L997
  179. .align 3
  180. .L114:
  181. #ifdef DOUBLE
  182. xvld VX0, X, 0 * SIZE
  183. xvld VX1, X, 4 * SIZE
  184. xvld VX2, Y, 0 * SIZE
  185. xvld VX3, Y, 4 * SIZE
  186. xvpickev.d x1, VX1, VX0
  187. xvpickod.d x2, VX1, VX0
  188. xvpickev.d x3, VX3, VX2
  189. xvpickod.d x4, VX3, VX2
  190. #else
  191. xvld VX0, X, 0 * SIZE
  192. xvld VX1, X, 8 * SIZE
  193. xvld VX2, Y, 0 * SIZE
  194. xvld VX3, Y, 8 * SIZE
  195. xvpickev.w x1, VX1, VX0
  196. xvpickod.w x2, VX1, VX0
  197. xvpickev.w x3, VX3, VX2
  198. xvpickod.w x4, VX3, VX2
  199. #endif
  200. XVFMUL VX0, VXAI, x2
  201. XVFMUL VX1, VXAI, x1
  202. XVFMUL VX2, VXBI, x4
  203. XVFMUL VX3, VXBI, x3
  204. XVMSUB VX0, VXAR, x1, VX0
  205. XVFMADD VX1, VXAR, x2, VX1
  206. XVMSUB VX2, VXBR, x3, VX2
  207. XVFMADD VX3, VXBR, x4, VX3
  208. XVFADD x3, VX0, VX2
  209. XVFADD x4, VX1, VX3
  210. #ifdef DOUBLE
  211. xvilvl.d VX2, x4 ,x3
  212. xvilvh.d VX3, x4, x3
  213. xvst VX2, Y, 0 * SIZE
  214. xvst VX3, Y, 4 * SIZE
  215. addi.d X, X, 8 * SIZE
  216. addi.d Y, Y, 8 * SIZE
  217. #else
  218. xvilvl.w VX2, x4 ,x3
  219. xvilvh.w VX3, x4, x3
  220. xvst VX2, Y, 0 * SIZE
  221. xvst VX3, Y, 8 * SIZE
  222. addi.d X, X, 16 * SIZE
  223. addi.d Y, Y, 16 * SIZE
  224. #endif
  225. addi.d I, I, -1
  226. blt $r0, I, .L114
  227. b .L997
  228. .align 3
  229. .L12: // INCX==1 and INCY!=1
  230. bge $r0, I, .L997
  231. move YY, Y
  232. .align 3
  233. .L121:
  234. #ifdef DOUBLE
  235. xvld VX0, X, 0 * SIZE
  236. ld.d t1, Y, 0 * SIZE
  237. ld.d t2, Y, 1 * SIZE
  238. add.d Y, Y, INCY
  239. ld.d t3, Y, 0 * SIZE
  240. ld.d t4, Y, 1 * SIZE
  241. add.d Y, Y, INCY
  242. xvinsgr2vr.d x3, t1, 0
  243. xvinsgr2vr.d x4, t2, 0
  244. xvinsgr2vr.d x3, t3, 2
  245. xvinsgr2vr.d x4, t4, 2
  246. xvld VX1, X, 4 * SIZE
  247. ld.d t1, Y, 0 * SIZE
  248. ld.d t2, Y, 1 * SIZE
  249. add.d Y, Y, INCY
  250. ld.d t3, Y, 0 * SIZE
  251. ld.d t4, Y, 1 * SIZE
  252. xvinsgr2vr.d x3, t1, 1
  253. xvinsgr2vr.d x4, t2, 1
  254. xvinsgr2vr.d x3, t3, 3
  255. xvinsgr2vr.d x4, t4, 3
  256. add.d Y, Y, INCY
  257. xvpickev.d x1, VX1, VX0
  258. xvpickod.d x2, VX1, VX0
  259. xvfmul.d VX0, VXAI, x2
  260. xvfmul.d VX1, VXAI, x1
  261. xvfmul.d VX2, VXBI, x4
  262. xvfmul.d VX3, VXBI, x3
  263. xvfmsub.d VX0, VXAR, x1, VX0
  264. xvfmadd.d VX1, VXAR, x2, VX1
  265. xvfmsub.d VX2, VXBR, x3, VX2
  266. xvfmadd.d VX3, VXBR, x4, VX3
  267. xvfadd.d x3, VX0, VX2
  268. xvfadd.d x4, VX1, VX3
  269. addi.d I, I, -1
  270. xvstelm.d x3, YY, 0 * SIZE, 0
  271. xvstelm.d x4, YY, 1 * SIZE, 0
  272. add.d YY, YY, INCY
  273. xvstelm.d x3, YY, 0 * SIZE, 2
  274. xvstelm.d x4, YY, 1 * SIZE, 2
  275. add.d YY, YY, INCY
  276. xvstelm.d x3, YY, 0 * SIZE, 1
  277. xvstelm.d x4, YY, 1 * SIZE, 1
  278. add.d YY, YY, INCY
  279. xvstelm.d x3, YY, 0 * SIZE, 3
  280. xvstelm.d x4, YY, 1 * SIZE, 3
  281. add.d YY, YY, INCY
  282. addi.d X, X, 8 * SIZE
  283. blt $r0, I, .L121
  284. b .L997
  285. .align 3
  286. #else
  287. xvld VX0, X, 0 * SIZE
  288. ld.d t1, Y, 0 * SIZE
  289. ld.d t2, Y, 1 * SIZE
  290. add.d Y, Y, INCY
  291. ld.d t3, Y, 0 * SIZE
  292. ld.d t4, Y, 1 * SIZE
  293. add.d Y, Y, INCY
  294. xvinsgr2vr.w x3, t1, 0
  295. xvinsgr2vr.w x4, t2, 0
  296. xvinsgr2vr.w x3, t3, 1
  297. xvinsgr2vr.w x4, t4, 1
  298. xvld VX1, X, 8 * SIZE
  299. ld.d t1, Y, 0 * SIZE
  300. ld.d t2, Y, 1 * SIZE
  301. add.d Y, Y, INCY
  302. ld.d t3, Y, 0 * SIZE
  303. ld.d t4, Y, 1 * SIZE
  304. xvinsgr2vr.w x3, t1, 4
  305. xvinsgr2vr.w x4, t2, 4
  306. xvinsgr2vr.w x3, t3, 5
  307. xvinsgr2vr.w x4, t4, 5
  308. add.d Y, Y, INCY
  309. ld.d t1, Y, 0 * SIZE
  310. ld.d t2, Y, 1 * SIZE
  311. add.d Y, Y, INCY
  312. ld.d t3, Y, 0 * SIZE
  313. ld.d t4, Y, 1 * SIZE
  314. add.d Y, Y, INCY
  315. xvinsgr2vr.w x3, t1, 2
  316. xvinsgr2vr.w x4, t2, 2
  317. xvinsgr2vr.w x3, t3, 3
  318. xvinsgr2vr.w x4, t4, 3
  319. ld.d t1, Y, 0 * SIZE
  320. ld.d t2, Y, 1 * SIZE
  321. add.d Y, Y, INCY
  322. ld.d t3, Y, 0 * SIZE
  323. ld.d t4, Y, 1 * SIZE
  324. xvinsgr2vr.w x3, t1, 6
  325. xvinsgr2vr.w x4, t2, 6
  326. xvinsgr2vr.w x3, t3, 7
  327. xvinsgr2vr.w x4, t4, 7
  328. add.d Y, Y, INCY
  329. xvpickev.w x1, VX1, VX0
  330. xvpickod.w x2, VX1, VX0
  331. XVFMUL VX0, VXAI, x2
  332. XVFMUL VX1, VXAI, x1
  333. XVFMUL VX2, VXBI, x4
  334. XVFMUL VX3, VXBI, x3
  335. XVMSUB VX0, VXAR, x1, VX0
  336. XVFMADD VX1, VXAR, x2, VX1
  337. XVMSUB VX2, VXBR, x3, VX2
  338. XVFMADD VX3, VXBR, x4, VX3
  339. XVFADD x3, VX0, VX2
  340. XVFADD x4, VX1, VX3
  341. addi.d I, I, -1
  342. xvstelm.w x3, YY, 0 * SIZE, 0
  343. xvstelm.w x4, YY, 1 * SIZE, 0
  344. add.d YY, YY, INCY
  345. xvstelm.w x3, YY, 0 * SIZE, 1
  346. xvstelm.w x4, YY, 1 * SIZE, 1
  347. add.d YY, YY, INCY
  348. xvstelm.w x3, YY, 0 * SIZE, 4
  349. xvstelm.w x4, YY, 1 * SIZE, 4
  350. add.d YY, YY, INCY
  351. xvstelm.w x3, YY, 0 * SIZE, 5
  352. xvstelm.w x4, YY, 1 * SIZE, 5
  353. add.d YY, YY, INCY
  354. xvstelm.w x3, YY, 0 * SIZE, 2
  355. xvstelm.w x4, YY, 1 * SIZE, 2
  356. add.d YY, YY, INCY
  357. xvstelm.w x3, YY, 0 * SIZE, 3
  358. xvstelm.w x4, YY, 1 * SIZE, 3
  359. add.d YY, YY, INCY
  360. xvstelm.w x3, YY, 0 * SIZE, 6
  361. xvstelm.w x4, YY, 1 * SIZE, 6
  362. add.d YY, YY, INCY
  363. xvstelm.w x3, YY, 0 * SIZE, 7
  364. xvstelm.w x4, YY, 1 * SIZE, 7
  365. add.d YY, YY, INCY
  366. addi.d X, X, 16 * SIZE
  367. blt $r0, I, .L121
  368. b .L997
  369. .align 3
  370. #endif
  371. .L21:// INCX!=1 and INCY==1
  372. bge $r0, I, .L997
  373. .align 3
  374. .L211:
  375. #ifdef DOUBLE
  376. xvld VX2, Y, 0 * SIZE
  377. ld.d t1, X, 0 * SIZE
  378. ld.d t2, X, 1 * SIZE
  379. add.d X, X, INCX
  380. ld.d t3, X, 0 * SIZE
  381. ld.d t4, X, 1 * SIZE
  382. add.d X, X, INCX
  383. xvinsgr2vr.d x1, t1, 0
  384. xvinsgr2vr.d x2, t2, 0
  385. xvinsgr2vr.d x1, t3, 2
  386. xvinsgr2vr.d x2, t4, 2
  387. xvld VX3, Y, 4 * SIZE
  388. ld.d t1, X, 0 * SIZE
  389. ld.d t2, X, 1 * SIZE
  390. add.d X, X, INCX
  391. ld.d t3, X, 0 * SIZE
  392. ld.d t4, X, 1 * SIZE
  393. xvinsgr2vr.d x1, t1, 1
  394. xvinsgr2vr.d x2, t2, 1
  395. xvinsgr2vr.d x1, t3, 3
  396. xvinsgr2vr.d x2, t4, 3
  397. add.d X, X, INCX
  398. xvpickev.d x3, VX3, VX2
  399. xvpickod.d x4, VX3, VX2
  400. xvfmul.d VX0, VXAI, x2
  401. xvfmul.d VX1, VXAI, x1
  402. xvfmul.d VX2, VXBI, x4
  403. xvfmul.d VX3, VXBI, x3
  404. xvfmsub.d VX0, VXAR, x1, VX0
  405. xvfmadd.d VX1, VXAR, x2, VX1
  406. xvfmsub.d VX2, VXBR, x3, VX2
  407. xvfmadd.d VX3, VXBR, x4, VX3
  408. xvfadd.d x3, VX0, VX2
  409. xvfadd.d x4, VX1, VX3
  410. xvilvl.d VX2, x4 ,x3
  411. xvilvh.d VX3, x4, x3
  412. addi.d I, I, -1
  413. xvst VX2, Y, 0 * SIZE
  414. xvst VX3, Y, 4 * SIZE
  415. addi.d Y, Y, 8 * SIZE
  416. blt $r0, I, .L211
  417. b .L997
  418. .align 3
  419. #else
  420. xvld VX2, Y, 0 * SIZE
  421. ld.d t1, X, 0 * SIZE
  422. ld.d t2, X, 1 * SIZE
  423. add.d X, X, INCX
  424. ld.d t3, X, 0 * SIZE
  425. ld.d t4, X, 1 * SIZE
  426. add.d X, X, INCX
  427. xvinsgr2vr.w x1, t1, 0
  428. xvinsgr2vr.w x2, t2, 0
  429. xvinsgr2vr.w x1, t3, 1
  430. xvinsgr2vr.w x2, t4, 1
  431. xvld VX3, Y, 8 * SIZE
  432. ld.d t1, X, 0 * SIZE
  433. ld.d t2, X, 1 * SIZE
  434. add.d X, X, INCX
  435. ld.d t3, X, 0 * SIZE
  436. ld.d t4, X, 1 * SIZE
  437. add.d X, X, INCX
  438. xvinsgr2vr.w x1, t1, 4
  439. xvinsgr2vr.w x2, t2, 4
  440. xvinsgr2vr.w x1, t3, 5
  441. xvinsgr2vr.w x2, t4, 5
  442. ld.d t1, X, 0 * SIZE
  443. ld.d t2, X, 1 * SIZE
  444. add.d X, X, INCX
  445. ld.d t3, X, 0 * SIZE
  446. ld.d t4, X, 1 * SIZE
  447. add.d X, X, INCX
  448. xvinsgr2vr.w x1, t1, 2
  449. xvinsgr2vr.w x2, t2, 2
  450. xvinsgr2vr.w x1, t3, 3
  451. xvinsgr2vr.w x2, t4, 3
  452. ld.d t1, X, 0 * SIZE
  453. ld.d t2, X, 1 * SIZE
  454. add.d X, X, INCX
  455. ld.d t3, X, 0 * SIZE
  456. ld.d t4, X, 1 * SIZE
  457. xvinsgr2vr.w x1, t1, 6
  458. xvinsgr2vr.w x2, t2, 6
  459. xvinsgr2vr.w x1, t3, 7
  460. xvinsgr2vr.w x2, t4, 7
  461. add.d X, X, INCX
  462. xvpickev.w x3, VX3, VX2
  463. xvpickod.w x4, VX3, VX2
  464. XVFMUL VX0, VXAI, x2
  465. XVFMUL VX1, VXAI, x1
  466. XVFMUL VX2, VXBI, x4
  467. XVFMUL VX3, VXBI, x3
  468. XVMSUB VX0, VXAR, x1, VX0
  469. XVFMADD VX1, VXAR, x2, VX1
  470. XVMSUB VX2, VXBR, x3, VX2
  471. XVFMADD VX3, VXBR, x4, VX3
  472. XVFADD x3, VX0, VX2
  473. XVFADD x4, VX1, VX3
  474. xvilvl.w VX2, x4 ,x3
  475. xvilvh.w VX3, x4, x3
  476. addi.d I, I, -1
  477. xvst VX2, Y, 0 * SIZE
  478. xvst VX3, Y, 8 * SIZE
  479. addi.d Y, Y, 16 * SIZE
  480. blt $r0, I, .L211
  481. b .L997
  482. .align 3
  483. #endif
  484. .L22:
  485. bge $r0, I, .L997
  486. move YY, Y
  487. CMPEQ $fcc0, BETAR, a1
  488. CMPEQ $fcc1, BETAI, a1
  489. CMPEQ $fcc2, ALPHAR, a1
  490. CMPEQ $fcc3, ALPHAI, a1
  491. bceqz $fcc0, .L23
  492. bceqz $fcc1, .L23
  493. b .L24
  494. .align 3
  495. .L23:
  496. bceqz $fcc2, .L224
  497. bceqz $fcc3, .L224 //!(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  498. b .L223 //!(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  499. .align 3
  500. .L24:
  501. bceqz $fcc2, .L222
  502. bceqz $fcc3, .L222 //(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  503. b .L221 //(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  504. .align 3
  505. .L221: //(beta_r == 0.0 && beta_i == 0.0) and (alpha_r == 0.0 && alpha_i == 0.0)
  506. #ifdef DOUBLE
  507. xvstelm.d VXZ, Y, 0, 0
  508. xvstelm.d VXZ, Y, 0, 0
  509. add.d Y, Y, INCY
  510. xvstelm.d VXZ, Y, 0, 0
  511. xvstelm.d VXZ, Y, 0, 0
  512. add.d Y, Y, INCY
  513. xvstelm.d VXZ, Y, 0, 0
  514. xvstelm.d VXZ, Y, 0, 0
  515. add.d Y, Y, INCY
  516. xvstelm.d VXZ, Y, 0, 0
  517. xvstelm.d VXZ, Y, 0, 0
  518. add.d Y, Y, INCY
  519. addi.d I, I, -1
  520. blt $r0, I, .L221
  521. b .L997
  522. .align 3
  523. #else
  524. xvstelm.w VXZ, Y, 0, 0
  525. xvstelm.w VXZ, Y, 0, 0
  526. add.d Y, Y, INCY
  527. xvstelm.w VXZ, Y, 0, 0
  528. xvstelm.w VXZ, Y, 0, 0
  529. add.d Y, Y, INCY
  530. xvstelm.w VXZ, Y, 0, 0
  531. xvstelm.w VXZ, Y, 0, 0
  532. add.d Y, Y, INCY
  533. xvstelm.w VXZ, YY, 0, 0
  534. xvstelm.w VXZ, YY, 0, 0
  535. add.d Y, Y, INCY
  536. xvstelm.w VXZ, Y, 0, 0
  537. xvstelm.w VXZ, Y, 0, 0
  538. add.d Y, Y, INCY
  539. xvstelm.w VXZ, Y, 0, 0
  540. xvstelm.w VXZ, Y, 0, 0
  541. add.d Y, Y, INCY
  542. xvstelm.w VXZ, Y, 0, 0
  543. xvstelm.w VXZ, Y, 0, 0
  544. add.d Y, Y, INCY
  545. xvstelm.w VXZ, Y, 0, 0
  546. xvstelm.w VXZ, Y, 0, 0
  547. add.d Y, Y, INCY
  548. addi.d I, I, -1
  549. blt $r0, I, .L221
  550. b .L997
  551. .align 3
  552. #endif
  553. .L222: //(beta_r == 0.0 && beta_i == 0.0) and !(alpha_r == 0.0 && alpha_i == 0.0)
  554. #ifdef DOUBLE
  555. ld.d t1, X, 0 * SIZE
  556. ld.d t2, X, 1 * SIZE
  557. add.d X, X, INCX
  558. ld.d t3, X, 0 * SIZE
  559. ld.d t4, X, 1 * SIZE
  560. add.d X, X, INCX
  561. xvinsgr2vr.d x1, t1, 0
  562. xvinsgr2vr.d x2, t2, 0
  563. xvinsgr2vr.d x1, t3, 1
  564. xvinsgr2vr.d x2, t4, 1
  565. ld.d t1, X, 0 * SIZE
  566. ld.d t2, X, 1 * SIZE
  567. add.d X, X, INCX
  568. ld.d t3, X, 0 * SIZE
  569. ld.d t4, X, 1 * SIZE
  570. xvinsgr2vr.d x1, t1, 2
  571. xvinsgr2vr.d x2, t2, 2
  572. xvinsgr2vr.d x1, t3, 3
  573. xvinsgr2vr.d x2, t4, 3
  574. add.d X, X, INCX
  575. xvfmul.d x3, VXAI, x2
  576. xvfmul.d x4, VXAI, x1
  577. xvfmsub.d x3, VXAR, x1, x3
  578. xvfmadd.d x4, VXAR, x2, x4
  579. addi.d I, I, -1
  580. xvstelm.d x3, YY, 0 * SIZE, 0
  581. xvstelm.d x4, YY, 1 * SIZE, 0
  582. add.d YY, YY, INCY
  583. xvstelm.d x3, YY, 0 * SIZE, 1
  584. xvstelm.d x4, YY, 1 * SIZE, 1
  585. add.d YY, YY, INCY
  586. xvstelm.d x3, YY, 0 * SIZE, 2
  587. xvstelm.d x4, YY, 1 * SIZE, 2
  588. add.d YY, YY, INCY
  589. xvstelm.d x3, YY, 0 * SIZE, 3
  590. xvstelm.d x4, YY, 1 * SIZE, 3
  591. add.d YY, YY, INCY
  592. blt $r0, I, .L222
  593. move Y, YY
  594. b .L997
  595. .align 3
  596. #else
  597. ld.d t1, X, 0 * SIZE
  598. ld.d t2, X, 1 * SIZE
  599. add.d X, X, INCX
  600. ld.d t3, X, 0 * SIZE
  601. ld.d t4, X, 1 * SIZE
  602. add.d X, X, INCX
  603. xvinsgr2vr.w x1, t1, 0
  604. xvinsgr2vr.w x2, t2, 0
  605. xvinsgr2vr.w x1, t3, 1
  606. xvinsgr2vr.w x2, t4, 1
  607. ld.d t1, X, 0 * SIZE
  608. ld.d t2, X, 1 * SIZE
  609. add.d X, X, INCX
  610. ld.d t3, X, 0 * SIZE
  611. ld.d t4, X, 1 * SIZE
  612. add.d X, X, INCX
  613. xvinsgr2vr.w x1, t1, 2
  614. xvinsgr2vr.w x2, t2, 2
  615. xvinsgr2vr.w x1, t3, 3
  616. xvinsgr2vr.w x2, t4, 3
  617. ld.d t1, X, 0 * SIZE
  618. ld.d t2, X, 1 * SIZE
  619. add.d X, X, INCX
  620. ld.d t3, X, 0 * SIZE
  621. ld.d t4, X, 1 * SIZE
  622. add.d X, X, INCX
  623. xvinsgr2vr.w x1, t1, 4
  624. xvinsgr2vr.w x2, t2, 4
  625. xvinsgr2vr.w x1, t3, 5
  626. xvinsgr2vr.w x2, t4, 5
  627. ld.d t1, X, 0 * SIZE
  628. ld.d t2, X, 1 * SIZE
  629. add.d X, X, INCX
  630. ld.d t3, X, 0 * SIZE
  631. ld.d t4, X, 1 * SIZE
  632. xvinsgr2vr.w x1, t1, 6
  633. xvinsgr2vr.w x2, t2, 6
  634. xvinsgr2vr.w x1, t3, 7
  635. xvinsgr2vr.w x2, t4, 7
  636. add.d X, X, INCX
  637. XVFMUL x3, VXAI, x2
  638. XVFMUL x4, VXAI, x1
  639. XVMSUB x3, VXAR, x1, x3
  640. XVFMADD x4, VXAR, x2, x4
  641. addi.d I, I, -1
  642. xvstelm.w x3, YY, 0 * SIZE, 0
  643. xvstelm.w x4, YY, 1 * SIZE, 0
  644. add.d YY, YY, INCY
  645. xvstelm.w x3, YY, 0 * SIZE, 1
  646. xvstelm.w x4, YY, 1 * SIZE, 1
  647. add.d YY, YY, INCY
  648. xvstelm.w x3, YY, 0 * SIZE, 2
  649. xvstelm.w x4, YY, 1 * SIZE, 2
  650. add.d YY, YY, INCY
  651. xvstelm.w x3, YY, 0 * SIZE, 3
  652. xvstelm.w x4, YY, 1 * SIZE, 3
  653. add.d YY, YY, INCY
  654. xvstelm.w x3, YY, 0 * SIZE, 4
  655. xvstelm.w x4, YY, 1 * SIZE, 4
  656. add.d YY, YY, INCY
  657. xvstelm.w x3, YY, 0 * SIZE, 5
  658. xvstelm.w x4, YY, 1 * SIZE, 5
  659. add.d YY, YY, INCY
  660. xvstelm.w x3, YY, 0 * SIZE, 6
  661. xvstelm.w x4, YY, 1 * SIZE, 6
  662. add.d YY, YY, INCY
  663. xvstelm.w x3, YY, 0 * SIZE, 7
  664. xvstelm.w x4, YY, 1 * SIZE, 7
  665. add.d YY, YY, INCY
  666. blt $r0, I, .L222
  667. move Y, YY
  668. b .L997
  669. .align 3
  670. #endif
  671. .L223:
  672. #ifdef DOUBLE
  673. ld.d t1, Y, 0 * SIZE
  674. ld.d t2, Y, 1 * SIZE
  675. add.d Y, Y, INCY
  676. ld.d t3, Y, 0 * SIZE
  677. ld.d t4, Y, 1 * SIZE
  678. add.d Y, Y, INCY
  679. xvinsgr2vr.d x1, t1, 0
  680. xvinsgr2vr.d x2, t2, 0
  681. xvinsgr2vr.d x1, t3, 1
  682. xvinsgr2vr.d x2, t4, 1
  683. ld.d t1, Y, 0 * SIZE
  684. ld.d t2, Y, 1 * SIZE
  685. add.d Y, Y, INCY
  686. ld.d t3, Y, 0 * SIZE
  687. ld.d t4, Y, 1 * SIZE
  688. xvinsgr2vr.d x1, t1, 2
  689. xvinsgr2vr.d x2, t2, 2
  690. xvinsgr2vr.d x1, t3, 3
  691. xvinsgr2vr.d x2, t4, 3
  692. add.d Y, Y, INCY
  693. xvfmul.d x3, VXBI, x2
  694. xvfmul.d x4, VXBI, x1
  695. xvfmsub.d x3, VXBR, x1, x3
  696. xvfmadd.d x4, VXBR, x2, x4
  697. addi.d I, I, -1
  698. xvstelm.d x3, YY, 0 * SIZE, 0
  699. xvstelm.d x4, YY, 1 * SIZE, 0
  700. add.d YY, YY, INCY
  701. xvstelm.d x3, YY, 0 * SIZE, 1
  702. xvstelm.d x4, YY, 1 * SIZE, 1
  703. add.d YY, YY, INCY
  704. xvstelm.d x3, YY, 0 * SIZE, 2
  705. xvstelm.d x4, YY, 1 * SIZE, 2
  706. add.d YY, YY, INCY
  707. xvstelm.d x3, YY, 0 * SIZE, 3
  708. xvstelm.d x4, YY, 1 * SIZE, 3
  709. add.d YY, YY, INCY
  710. blt $r0, I, .L223
  711. b .L997
  712. .align 3
  713. #else
  714. ld.d t1, Y, 0 * SIZE
  715. ld.d t2, Y, 1 * SIZE
  716. add.d Y, Y, INCY
  717. ld.d t3, Y, 0 * SIZE
  718. ld.d t4, Y, 1 * SIZE
  719. add.d Y, Y, INCY
  720. xvinsgr2vr.w x1, t1, 0
  721. xvinsgr2vr.w x2, t2, 0
  722. xvinsgr2vr.w x1, t3, 1
  723. xvinsgr2vr.w x2, t4, 1
  724. ld.d t1, Y, 0 * SIZE
  725. ld.d t2, Y, 1 * SIZE
  726. add.d Y, Y, INCY
  727. ld.d t3, Y, 0 * SIZE
  728. ld.d t4, Y, 1 * SIZE
  729. add.d Y, Y, INCY
  730. xvinsgr2vr.w x1, t1, 2
  731. xvinsgr2vr.w x2, t2, 2
  732. xvinsgr2vr.w x1, t3, 3
  733. xvinsgr2vr.w x2, t4, 3
  734. ld.d t1, Y, 0 * SIZE
  735. ld.d t2, Y, 1 * SIZE
  736. add.d Y, Y, INCY
  737. ld.d t3, Y, 0 * SIZE
  738. ld.d t4, Y, 1 * SIZE
  739. add.d Y, Y, INCY
  740. xvinsgr2vr.w x1, t1, 4
  741. xvinsgr2vr.w x2, t2, 4
  742. xvinsgr2vr.w x1, t3, 5
  743. xvinsgr2vr.w x2, t4, 5
  744. ld.d t1, Y, 0 * SIZE
  745. ld.d t2, Y, 1 * SIZE
  746. add.d Y, Y, INCY
  747. ld.d t3, Y, 0 * SIZE
  748. ld.d t4, Y, 1 * SIZE
  749. xvinsgr2vr.w x1, t1, 6
  750. xvinsgr2vr.w x2, t2, 6
  751. xvinsgr2vr.w x1, t3, 7
  752. xvinsgr2vr.w x2, t4, 7
  753. add.d Y, Y, INCY
  754. XVFMUL x3, VXBI, x2
  755. XVFMUL x4, VXBI, x1
  756. XVMSUB x3, VXBR, x1, x3
  757. XVFMADD x4, VXBR, x2, x4
  758. addi.d I, I, -1
  759. xvstelm.w x3, YY, 0 * SIZE, 0
  760. xvstelm.w x4, YY, 1 * SIZE, 0
  761. add.d YY, YY, INCY
  762. xvstelm.w x3, YY, 0 * SIZE, 1
  763. xvstelm.w x4, YY, 1 * SIZE, 1
  764. add.d YY, YY, INCY
  765. xvstelm.w x3, YY, 0 * SIZE, 2
  766. xvstelm.w x4, YY, 1 * SIZE, 2
  767. add.d YY, YY, INCY
  768. xvstelm.w x3, YY, 0 * SIZE, 3
  769. xvstelm.w x4, YY, 1 * SIZE, 3
  770. add.d YY, YY, INCY
  771. xvstelm.w x3, YY, 0 * SIZE, 4
  772. xvstelm.w x4, YY, 1 * SIZE, 4
  773. add.d YY, YY, INCY
  774. xvstelm.w x3, YY, 0 * SIZE, 5
  775. xvstelm.w x4, YY, 1 * SIZE, 5
  776. add.d YY, YY, INCY
  777. xvstelm.w x3, YY, 0 * SIZE, 6
  778. xvstelm.w x4, YY, 1 * SIZE, 6
  779. add.d YY, YY, INCY
  780. xvstelm.w x3, YY, 0 * SIZE, 7
  781. xvstelm.w x4, YY, 1 * SIZE, 7
  782. add.d YY, YY, INCY
  783. blt $r0, I, .L223
  784. b .L997
  785. .align 3
  786. #endif
  787. .L224:
  788. #ifdef DOUBLE
  789. ld.d t1, X, 0 * SIZE
  790. ld.d t2, X, 1 * SIZE
  791. add.d X, X, INCX
  792. ld.d t3, X, 0 * SIZE
  793. ld.d t4, X, 1 * SIZE
  794. add.d X, X, INCX
  795. xvinsgr2vr.d x1, t1, 0
  796. xvinsgr2vr.d x2, t2, 0
  797. xvinsgr2vr.d x1, t3, 1
  798. xvinsgr2vr.d x2, t4, 1
  799. ld.d t1, X, 0 * SIZE
  800. ld.d t2, X, 1 * SIZE
  801. add.d X, X, INCX
  802. ld.d t3, X, 0 * SIZE
  803. ld.d t4, X, 1 * SIZE
  804. add.d X, X, INCX
  805. xvinsgr2vr.d x1, t1, 2
  806. xvinsgr2vr.d x2, t2, 2
  807. xvinsgr2vr.d x1, t3, 3
  808. xvinsgr2vr.d x2, t4, 3
  809. ld.d t1, Y, 0 * SIZE
  810. ld.d t2, Y, 1 * SIZE
  811. add.d Y, Y, INCY
  812. ld.d t3, Y, 0 * SIZE
  813. ld.d t4, Y, 1 * SIZE
  814. add.d Y, Y, INCY
  815. xvinsgr2vr.d x3, t1, 0
  816. xvinsgr2vr.d x4, t2, 0
  817. xvinsgr2vr.d x3, t3, 1
  818. xvinsgr2vr.d x4, t4, 1
  819. ld.d t1, Y, 0 * SIZE
  820. ld.d t2, Y, 1 * SIZE
  821. add.d Y, Y, INCY
  822. ld.d t3, Y, 0 * SIZE
  823. ld.d t4, Y, 1 * SIZE
  824. xvinsgr2vr.d x3, t1, 2
  825. xvinsgr2vr.d x4, t2, 2
  826. xvinsgr2vr.d x3, t3, 3
  827. xvinsgr2vr.d x4, t4, 3
  828. add.d Y, Y, INCY
  829. xvfmul.d VX0, VXAI, x2
  830. xvfmul.d VX1, VXAI, x1
  831. xvfmul.d VX2, VXBI, x4
  832. xvfmul.d VX3, VXBI, x3
  833. xvfmsub.d VX0, VXAR, x1, VX0
  834. xvfmadd.d VX1, VXAR, x2, VX1
  835. xvfmsub.d VX2, VXBR, x3, VX2
  836. xvfmadd.d VX3, VXBR, x4, VX3
  837. xvfadd.d x3, VX0, VX2
  838. xvfadd.d x4, VX1, VX3
  839. addi.d I, I, -1
  840. xvstelm.d x3, YY, 0 * SIZE, 0
  841. xvstelm.d x4, YY, 1 * SIZE, 0
  842. add.d YY, YY, INCY
  843. xvstelm.d x3, YY, 0 * SIZE, 1
  844. xvstelm.d x4, YY, 1 * SIZE, 1
  845. add.d YY, YY, INCY
  846. xvstelm.d x3, YY, 0 * SIZE, 2
  847. xvstelm.d x4, YY, 1 * SIZE, 2
  848. add.d YY, YY, INCY
  849. xvstelm.d x3, YY, 0 * SIZE, 3
  850. xvstelm.d x4, YY, 1 * SIZE, 3
  851. add.d YY, YY, INCY
  852. blt $r0, I, .L224
  853. b .L997
  854. .align 3
  855. #else
  856. ld.d t1, X, 0 * SIZE
  857. ld.d t2, X, 1 * SIZE
  858. add.d X, X, INCX
  859. ld.d t3, X, 0 * SIZE
  860. ld.d t4, X, 1 * SIZE
  861. add.d X, X, INCX
  862. xvinsgr2vr.w x1, t1, 0
  863. xvinsgr2vr.w x2, t2, 0
  864. xvinsgr2vr.w x1, t3, 1
  865. xvinsgr2vr.w x2, t4, 1
  866. ld.d t1, X, 0 * SIZE
  867. ld.d t2, X, 1 * SIZE
  868. add.d X, X, INCX
  869. ld.d t3, X, 0 * SIZE
  870. ld.d t4, X, 1 * SIZE
  871. add.d X, X, INCX
  872. xvinsgr2vr.w x1, t1, 2
  873. xvinsgr2vr.w x2, t2, 2
  874. xvinsgr2vr.w x1, t3, 3
  875. xvinsgr2vr.w x2, t4, 3
  876. ld.d t1, X, 0 * SIZE
  877. ld.d t2, X, 1 * SIZE
  878. add.d X, X, INCX
  879. ld.d t3, X, 0 * SIZE
  880. ld.d t4, X, 1 * SIZE
  881. add.d X, X, INCX
  882. xvinsgr2vr.w x1, t1, 4
  883. xvinsgr2vr.w x2, t2, 4
  884. xvinsgr2vr.w x1, t3, 5
  885. xvinsgr2vr.w x2, t4, 5
  886. ld.d t1, X, 0 * SIZE
  887. ld.d t2, X, 1 * SIZE
  888. add.d X, X, INCX
  889. ld.d t3, X, 0 * SIZE
  890. ld.d t4, X, 1 * SIZE
  891. add.d X, X, INCX
  892. xvinsgr2vr.w x1, t1, 6
  893. xvinsgr2vr.w x2, t2, 6
  894. xvinsgr2vr.w x1, t3, 7
  895. xvinsgr2vr.w x2, t4, 7
  896. ld.d t1, Y, 0 * SIZE
  897. ld.d t2, Y, 1 * SIZE
  898. add.d Y, Y, INCY
  899. ld.d t3, Y, 0 * SIZE
  900. ld.d t4, Y, 1 * SIZE
  901. add.d Y, Y, INCY
  902. xvinsgr2vr.w x3, t1, 0
  903. xvinsgr2vr.w x4, t2, 0
  904. xvinsgr2vr.w x3, t3, 1
  905. xvinsgr2vr.w x4, t4, 1
  906. ld.d t1, Y, 0 * SIZE
  907. ld.d t2, Y, 1 * SIZE
  908. add.d Y, Y, INCY
  909. ld.d t3, Y, 0 * SIZE
  910. ld.d t4, Y, 1 * SIZE
  911. add.d Y, Y, INCY
  912. xvinsgr2vr.w x3, t1, 2
  913. xvinsgr2vr.w x4, t2, 2
  914. xvinsgr2vr.w x3, t3, 3
  915. xvinsgr2vr.w x4, t4, 3
  916. ld.d t1, Y, 0 * SIZE
  917. ld.d t2, Y, 1 * SIZE
  918. add.d Y, Y, INCY
  919. ld.d t3, Y, 0 * SIZE
  920. ld.d t4, Y, 1 * SIZE
  921. add.d Y, Y, INCY
  922. xvinsgr2vr.w x3, t1, 4
  923. xvinsgr2vr.w x4, t2, 4
  924. xvinsgr2vr.w x3, t3, 5
  925. xvinsgr2vr.w x4, t4, 5
  926. ld.d t1, Y, 0 * SIZE
  927. ld.d t2, Y, 1 * SIZE
  928. add.d Y, Y, INCY
  929. ld.d t3, Y, 0 * SIZE
  930. ld.d t4, Y, 1 * SIZE
  931. xvinsgr2vr.w x3, t1, 6
  932. xvinsgr2vr.w x4, t2, 6
  933. xvinsgr2vr.w x3, t3, 7
  934. xvinsgr2vr.w x4, t4, 7
  935. add.d Y, Y, INCY
  936. XVFMUL VX0, VXAI, x2
  937. XVFMUL VX1, VXAI, x1
  938. XVFMUL VX2, VXBI, x4
  939. XVFMUL VX3, VXBI, x3
  940. XVMSUB VX0, VXAR, x1, VX0
  941. XVFMADD VX1, VXAR, x2, VX1
  942. XVMSUB VX2, VXBR, x3, VX2
  943. XVFMADD VX3, VXBR, x4, VX3
  944. XVFADD x3, VX0, VX2
  945. XVFADD x4, VX1, VX3
  946. addi.d I, I, -1
  947. xvstelm.w x3, YY, 0 * SIZE, 0
  948. xvstelm.w x4, YY, 1 * SIZE, 0
  949. add.d YY, YY, INCY
  950. xvstelm.w x3, YY, 0 * SIZE, 1
  951. xvstelm.w x4, YY, 1 * SIZE, 1
  952. add.d YY, YY, INCY
  953. xvstelm.w x3, YY, 0 * SIZE, 2
  954. xvstelm.w x4, YY, 1 * SIZE, 2
  955. add.d YY, YY, INCY
  956. xvstelm.w x3, YY, 0 * SIZE, 3
  957. xvstelm.w x4, YY, 1 * SIZE, 3
  958. add.d YY, YY, INCY
  959. xvstelm.w x3, YY, 0 * SIZE, 4
  960. xvstelm.w x4, YY, 1 * SIZE, 4
  961. add.d YY, YY, INCY
  962. xvstelm.w x3, YY, 0 * SIZE, 5
  963. xvstelm.w x4, YY, 1 * SIZE, 5
  964. add.d YY, YY, INCY
  965. xvstelm.w x3, YY, 0 * SIZE, 6
  966. xvstelm.w x4, YY, 1 * SIZE, 6
  967. add.d YY, YY, INCY
  968. xvstelm.w x3, YY, 0 * SIZE, 7
  969. xvstelm.w x4, YY, 1 * SIZE, 7
  970. add.d YY, YY, INCY
  971. blt $r0, I, .L224
  972. b .L997
  973. .align 3
  974. #endif
  975. .L997:
  976. #ifdef DOUBLE
  977. andi I, N, 3
  978. #else
  979. andi I, N, 7
  980. #endif
  981. bge $r0, I, .L999
  982. .align 3
  983. .L998:
  984. LD a1, X, 0 * SIZE
  985. LD a2, X, 1 * SIZE
  986. LD a3, Y, 0 * SIZE
  987. LD a4, Y, 1 * SIZE
  988. addi.d I, I, -1
  989. MUL s1, ALPHAI, a2
  990. MUL s2, ALPHAI, a1
  991. MUL s3, BETAI, a4
  992. MUL s4, BETAI, a3
  993. MSUB s1, ALPHAR, a1, s1
  994. MADD s2, a2, ALPHAR, s2
  995. MSUB s3, BETAR, a3, s3
  996. MADD s4, a4, BETAR, s4
  997. ADD s3, s3, s1
  998. ADD s4, s4, s2
  999. ST s3, Y, 0 * SIZE
  1000. ST s4, Y, 1 * SIZE
  1001. add.d X, X, INCX
  1002. add.d Y, Y, INCY
  1003. blt $r0, I, .L998
  1004. .align 3
  1005. .L999:
  1006. move $r4, $r12
  1007. jirl $r0, $r1, 0x0
  1008. .align 3
  1009. EPILOGUE