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.

axpby_lasx.S 25 kB

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