added dgemm-, dtrmm-, zgemm- and ztrmm-kernel for power8
[platform/upstream/openblas.git] / kernel / power / zgemv_n.S
1 /*********************************************************************/
2 /* Copyright 2009, 2010 The University of Texas at Austin.           */
3 /* All rights reserved.                                              */
4 /*                                                                   */
5 /* Redistribution and use in source and binary forms, with or        */
6 /* without modification, are permitted provided that the following   */
7 /* conditions are met:                                               */
8 /*                                                                   */
9 /*   1. Redistributions of source code must retain the above         */
10 /*      copyright notice, this list of conditions and the following  */
11 /*      disclaimer.                                                  */
12 /*                                                                   */
13 /*   2. Redistributions in binary form must reproduce the above      */
14 /*      copyright notice, this list of conditions and the following  */
15 /*      disclaimer in the documentation and/or other materials       */
16 /*      provided with the distribution.                              */
17 /*                                                                   */
18 /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
19 /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
20 /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
21 /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
22 /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
23 /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
24 /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
25 /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
26 /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
27 /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
28 /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
29 /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
30 /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
31 /*    POSSIBILITY OF SUCH DAMAGE.                                    */
32 /*                                                                   */
33 /* The views and conclusions contained in the software and           */
34 /* documentation are those of the authors and should not be          */
35 /* interpreted as representing official policies, either expressed   */
36 /* or implied, of The University of Texas at Austin.                 */
37 /*********************************************************************/
38
39 #define ASSEMBLER
40 #include "common.h"
41
42 #ifdef linux
43 #ifndef __64BIT__
44 #define M       r3
45 #define N       r4
46 #define A       r6
47 #define LDA     r7
48 #define X       r8
49 #define INCX    r9
50 #define Y       r10
51 #define INCY    r5
52 #else
53 #define M       r3
54 #define N       r4
55 #define A       r8
56 #define LDA     r9
57 #define X       r10
58 #define INCX    r5
59 #define Y       r6
60 #define INCY    r7
61 #endif
62 #endif
63
64 #if defined(_AIX) || defined(__APPLE__)
65 #if !defined(__64BIT__) && defined(DOUBLE)
66 #define M       r3
67 #define N       r4
68 #define A       r10
69 #define LDA     r5
70 #define X       r6
71 #define INCX    r7
72 #define Y       r8
73 #define INCY    r9
74 #else
75 #define M       r3
76 #define N       r4
77 #define A       r8
78 #define LDA     r9
79 #define X       r10
80 #define INCX    r5
81 #define Y       r6
82 #define INCY    r7
83 #endif
84 #endif
85
86 #define I       r11
87 #define J       r12
88
89 #define AO1     r14
90 #define AO2     r15
91 #define AO3     r16
92 #define AO4     r17
93 #define LDA4    r18
94
95 #define Y1      r19
96 #define Y2      r20
97 #define PREA    r21
98 #define PREC    r22
99
100 #define y01 f0
101 #define y02 f1
102 #define y03 f2
103 #define y04 f3
104 #define y05 f4
105 #define y06 f5
106 #define y07 f6
107 #define y08 f7
108 #define y09 f8
109 #define y10 f9
110 #define y11 f10
111 #define y12 f11
112 #define y13 f12
113 #define y14 f13
114 #define y15 f14
115 #define y16 f15
116
117 #define alpha1r f16
118 #define alpha1i f17
119 #define alpha2r f18
120 #define alpha2i f19
121 #define alpha3r f20
122 #define alpha3i f21
123 #define alpha4r f22
124 #define alpha4i f23
125
126 #define a1     f24
127 #define a2     f25
128 #define a3     f26
129 #define a4     f27
130 #define a5     f28
131 #define a6     f29
132 #define a7     f30
133 #define a8     f31
134
135 #define alpha_r f14
136 #define alpha_i f15
137
138 #if defined(PPCG4)
139 #define PREFETCHSIZE_A  34
140 #define PREFETCHSIZE_C  16
141 #endif
142
143 #if defined(PPC440) || defined(PPC440FP2)
144 #define PREFETCHSIZE_A  34
145 #define PREFETCHSIZE_C  16
146 #endif
147
148 #ifdef PPC970
149 #define PREFETCHSIZE_A  56
150 #define PREFETCHSIZE_C  16
151 #endif
152
153 #ifdef CELL
154 #define PREFETCHSIZE_A  56
155 #define PREFETCHSIZE_C  16
156 #endif
157
158 #ifdef POWER4
159 #define PREFETCHSIZE_A  34
160 #define PREFETCHSIZE_C  16
161 #endif
162
163 #ifdef POWER5
164 #define PREFETCHSIZE_A  40
165 #define PREFETCHSIZE_C  24
166 #endif
167
168 #ifdef POWER6
169 #define PREFETCHSIZE_A  24
170 #define PREFETCHSIZE_C  24
171 #endif
172
173 #ifndef XCONJ
174 #define FMADDR FMADD
175 #define FMSUBR FNMSUB
176 #else
177 #define FMADDR FNMSUB
178 #define FMSUBR FMADD
179 #endif
180
181 #ifndef  CONJ
182 #define FMADDX FMADD
183 #define FMSUBX FNMSUB
184 #else
185 #define FMADDX FNMSUB
186 #define FMSUBX FMADD
187 #endif
188
189 #ifndef NEEDPARAM
190
191 #ifndef __64BIT__
192 #define STACKSIZE 224
193 #define ALPHA_R   208(SP)
194 #define ALPHA_I   216(SP)
195 #else
196 #define STACKSIZE 280
197 #define ALPHA_R   256(SP)
198 #define ALPHA_I   264(SP)
199 #endif
200
201         PROLOGUE
202         PROFCODE
203
204         addi    SP,   SP, -STACKSIZE
205         li      r0,   0
206
207         stfd    f14,     0(SP)
208         stfd    f15,     8(SP)
209         stfd    f16,    16(SP)
210         stfd    f17,    24(SP)
211         stfd    f18,    32(SP)
212         stfd    f19,    40(SP)
213         stfd    f20,    48(SP)
214         stfd    f21,    56(SP)
215         stfd    f22,    64(SP)
216         stfd    f23,    72(SP)
217         stfd    f24,    80(SP)
218         stfd    f25,    88(SP)
219         stfd    f26,    96(SP)
220         stfd    f27,   104(SP)
221         stfd    f28,   112(SP)
222         stfd    f29,   120(SP)
223         stfd    f30,   128(SP)
224         stfd    f31,   136(SP)
225
226 #ifdef __64BIT__
227         std     r14,   144(SP)
228         std     r15,   152(SP)
229         std     r16,   160(SP)
230         std     r17,   168(SP)
231         std     r18,   176(SP)
232         std     r19,   184(SP)
233         std     r20,   192(SP)
234         std     r21,   200(SP)
235         std     r22,   208(SP)
236 #else
237         stw     r14,   144(SP)
238         stw     r15,   148(SP)
239         stw     r16,   152(SP)
240         stw     r17,   156(SP)
241         stw     r18,   160(SP)
242         stw     r19,   164(SP)
243         stw     r20,   168(SP)
244         stw     r21,   172(SP)
245         stw     r22,   176(SP)
246 #endif
247
248 #ifdef linux
249 #ifndef __64BIT__
250         lwz     INCY,  FRAMESLOT(0) + STACKSIZE(SP)
251 #else
252         ld      INCX,  FRAMESLOT(0) + STACKSIZE(SP)
253         ld      Y,     FRAMESLOT(1) + STACKSIZE(SP)
254         ld      INCY,  FRAMESLOT(2) + STACKSIZE(SP)
255 #endif
256 #endif
257
258 #if defined(_AIX) || defined(__APPLE__)
259 #ifndef __64BIT__
260 #ifdef DOUBLE
261         lwz     LDA,   FRAMESLOT(0) + STACKSIZE(SP)
262         lwz     X,     FRAMESLOT(1) + STACKSIZE(SP)
263         lwz     INCX,  FRAMESLOT(2) + STACKSIZE(SP)
264         lwz     Y,     FRAMESLOT(3) + STACKSIZE(SP)
265         lwz     INCY,  FRAMESLOT(4) + STACKSIZE(SP)
266 #else
267         lwz     INCX,  FRAMESLOT(0) + STACKSIZE(SP)
268         lwz     Y,     FRAMESLOT(1) + STACKSIZE(SP)
269         lwz     INCY,  FRAMESLOT(2) + STACKSIZE(SP)
270 #endif
271 #else
272         ld      INCX,  FRAMESLOT(0) + STACKSIZE(SP)
273         ld      Y,     FRAMESLOT(1) + STACKSIZE(SP)
274         ld      INCY,  FRAMESLOT(2) + STACKSIZE(SP)
275 #endif
276 #endif
277
278         stfd    f1, ALPHA_R
279         stfd    f2, ALPHA_I
280
281         slwi    LDA4, LDA,  ZBASE_SHIFT + 2
282         slwi    LDA,  LDA,  ZBASE_SHIFT
283         slwi    INCX, INCX, ZBASE_SHIFT
284         slwi    INCY, INCY, ZBASE_SHIFT
285
286         li      PREA, PREFETCHSIZE_A * SIZE
287         li      PREC, PREFETCHSIZE_C * SIZE
288
289         cmpwi   cr0, M, 0
290         ble-    LL(999)
291
292         cmpwi   cr0, N, 0
293         ble-    LL(999)
294
295         cmpi    cr0, 0, INCY, 2 * SIZE
296         bne     LL(100)
297
298         srawi.  J, N, 2
299         ble     LL(20)
300         .align 4
301
302 LL(11):
303         lfd     alpha_r, ALPHA_R
304         lfd     alpha_i, ALPHA_I
305
306         LFD     a1, 0 * SIZE(X)
307         LFD     a2, 1 * SIZE(X)
308         add     X, X, INCX
309         LFD     a3, 0 * SIZE(X)
310         LFD     a4, 1 * SIZE(X)
311         add     X, X, INCX
312         LFD     a5, 0 * SIZE(X)
313         LFD     a6, 1 * SIZE(X)
314         add     X, X, INCX
315         LFD     a7, 0 * SIZE(X)
316         LFD     a8, 1 * SIZE(X)
317         add     X, X, INCX
318
319         FMUL    alpha1r, alpha_r, a1
320         FMUL    alpha1i, alpha_i, a1
321         FMUL    alpha2r, alpha_r, a3
322         FMUL    alpha2i, alpha_i, a3
323         FMUL    alpha3r, alpha_r, a5
324         FMUL    alpha3i, alpha_i, a5
325         FMUL    alpha4r, alpha_r, a7
326         FMUL    alpha4i, alpha_i, a7
327
328         FMSUBR  alpha1r, alpha_i, a2, alpha1r
329         FMADDR  alpha1i, alpha_r, a2, alpha1i
330         FMSUBR  alpha2r, alpha_i, a4, alpha2r
331         FMADDR  alpha2i, alpha_r, a4, alpha2i
332         FMSUBR  alpha3r, alpha_i, a6, alpha3r
333         FMADDR  alpha3i, alpha_r, a6, alpha3i
334         FMSUBR  alpha4r, alpha_i, a8, alpha4r
335         FMADDR  alpha4i, alpha_r, a8, alpha4i
336
337         mr      AO1, A
338         add     AO2, A,   LDA
339         add     AO3, AO2, LDA
340         add     AO4, AO3, LDA
341         add     A,   AO4, LDA
342
343         mr      Y1, Y
344         mr      Y2, Y
345
346         srawi.  r0,  M, 3
347         mtspr   CTR, r0
348         ble     LL(15)
349         .align 4
350
351         LFD     a1,  0 * SIZE(AO1)
352         LFD     a2,  1 * SIZE(AO1)
353         LFD     a3,  2 * SIZE(AO1)
354         LFD     a4,  3 * SIZE(AO1)
355
356         LFD     y01,  0 * SIZE(Y1)
357         LFD     y02,  1 * SIZE(Y1)
358         LFD     y03,  2 * SIZE(Y1)
359         LFD     y04,  3 * SIZE(Y1)
360
361         LFD     a5,  4 * SIZE(AO1)
362         LFD     a6,  5 * SIZE(AO1)
363         LFD     a7,  6 * SIZE(AO1)
364         LFD     a8,  7 * SIZE(AO1)
365
366         LFD     y05,  4 * SIZE(Y1)
367         LFD     y06,  5 * SIZE(Y1)
368         LFD     y07,  6 * SIZE(Y1)
369         LFD     y08,  7 * SIZE(Y1)
370         LFD     y09,  8 * SIZE(Y1)
371         LFD     y10,  9 * SIZE(Y1)
372         LFD     y11, 10 * SIZE(Y1)
373         LFD     y12, 11 * SIZE(Y1)
374         LFD     y13, 12 * SIZE(Y1)
375         LFD     y14, 13 * SIZE(Y1)
376         LFD     y15, 14 * SIZE(Y1)
377         LFD     y16, 15 * SIZE(Y1)
378         addi    Y1, Y1, 16 * SIZE
379
380         bdz     LL(13)
381         .align 4
382
383 LL(12):
384         FMADD   y01, alpha1r, a1, y01
385         FMADD   y02, alpha1i, a1, y02
386         FMADD   y03, alpha1r, a3, y03
387         FMADD   y04, alpha1i, a3, y04
388
389         FMADD   y05, alpha1r, a5, y05
390         FMADD   y06, alpha1i, a5, y06
391         FMADD   y07, alpha1r, a7, y07
392         FMADD   y08, alpha1i, a7, y08
393
394         LFD     a1,  8 * SIZE(AO1)
395         LFD     a3, 10 * SIZE(AO1)
396         LFD     a5, 12 * SIZE(AO1)
397         LFD     a7, 14 * SIZE(AO1)
398
399         FMSUBX  y01, alpha1i, a2, y01
400         FMADDX  y02, alpha1r, a2, y02
401         FMSUBX  y03, alpha1i, a4, y03
402         FMADDX  y04, alpha1r, a4, y04
403
404         FMSUBX  y05, alpha1i, a6, y05
405         FMADDX  y06, alpha1r, a6, y06
406         FMSUBX  y07, alpha1i, a8, y07
407         FMADDX  y08, alpha1r, a8, y08
408
409         LFD     a2,  9 * SIZE(AO1)
410         LFD     a4, 11 * SIZE(AO1)
411         LFD     a6, 13 * SIZE(AO1)
412         LFD     a8, 15 * SIZE(AO1)
413
414         addi    AO1, AO1, 16 * SIZE
415         nop
416         DCBT(AO1, PREA)
417         nop
418
419         FMADD   y09, alpha1r, a1, y09
420         FMADD   y10, alpha1i, a1, y10
421         FMADD   y11, alpha1r, a3, y11
422         FMADD   y12, alpha1i, a3, y12
423
424         FMADD   y13, alpha1r, a5, y13
425         FMADD   y14, alpha1i, a5, y14
426         FMADD   y15, alpha1r, a7, y15
427         FMADD   y16, alpha1i, a7, y16
428
429         LFD     a1,  0 * SIZE(AO2)
430         LFD     a3,  2 * SIZE(AO2)
431         LFD     a5,  4 * SIZE(AO2)
432         LFD     a7,  6 * SIZE(AO2)
433
434         FMSUBX  y09, alpha1i, a2, y09
435         FMADDX  y10, alpha1r, a2, y10
436         FMSUBX  y11, alpha1i, a4, y11
437         FMADDX  y12, alpha1r, a4, y12
438
439         FMSUBX  y13, alpha1i, a6, y13
440         FMADDX  y14, alpha1r, a6, y14
441         FMSUBX  y15, alpha1i, a8, y15
442         FMADDX  y16, alpha1r, a8, y16
443
444         LFD     a2,  1 * SIZE(AO2)
445         LFD     a4,  3 * SIZE(AO2)
446         LFD     a6,  5 * SIZE(AO2)
447         LFD     a8,  7 * SIZE(AO2)
448
449         FMADD   y01, alpha2r, a1, y01
450         FMADD   y02, alpha2i, a1, y02
451         FMADD   y03, alpha2r, a3, y03
452         FMADD   y04, alpha2i, a3, y04
453
454         FMADD   y05, alpha2r, a5, y05
455         FMADD   y06, alpha2i, a5, y06
456         FMADD   y07, alpha2r, a7, y07
457         FMADD   y08, alpha2i, a7, y08
458
459         LFD     a1,  8 * SIZE(AO2)
460         LFD     a3, 10 * SIZE(AO2)
461         LFD     a5, 12 * SIZE(AO2)
462         LFD     a7, 14 * SIZE(AO2)
463
464         FMSUBX  y01, alpha2i, a2, y01
465         FMADDX  y02, alpha2r, a2, y02
466         FMSUBX  y03, alpha2i, a4, y03
467         FMADDX  y04, alpha2r, a4, y04
468
469         FMSUBX  y05, alpha2i, a6, y05
470         FMADDX  y06, alpha2r, a6, y06
471         FMSUBX  y07, alpha2i, a8, y07
472         FMADDX  y08, alpha2r, a8, y08
473
474         LFD     a2,  9 * SIZE(AO2)
475         LFD     a4, 11 * SIZE(AO2)
476         LFD     a6, 13 * SIZE(AO2)
477         LFD     a8, 15 * SIZE(AO2)
478
479         addi    AO2, AO2, 16 * SIZE
480         nop
481         DCBT(AO2, PREA)
482         nop
483
484         FMADD   y09, alpha2r, a1, y09
485         FMADD   y10, alpha2i, a1, y10
486         FMADD   y11, alpha2r, a3, y11
487         FMADD   y12, alpha2i, a3, y12
488
489         FMADD   y13, alpha2r, a5, y13
490         FMADD   y14, alpha2i, a5, y14
491         FMADD   y15, alpha2r, a7, y15
492         FMADD   y16, alpha2i, a7, y16
493
494         LFD     a1,  0 * SIZE(AO3)
495         LFD     a3,  2 * SIZE(AO3)
496         LFD     a5,  4 * SIZE(AO3)
497         LFD     a7,  6 * SIZE(AO3)
498
499         FMSUBX  y09, alpha2i, a2, y09
500         FMADDX  y10, alpha2r, a2, y10
501         FMSUBX  y11, alpha2i, a4, y11
502         FMADDX  y12, alpha2r, a4, y12
503
504         FMSUBX  y13, alpha2i, a6, y13
505         FMADDX  y14, alpha2r, a6, y14
506         FMSUBX  y15, alpha2i, a8, y15
507         FMADDX  y16, alpha2r, a8, y16
508
509         LFD     a2,  1 * SIZE(AO3)
510         LFD     a4,  3 * SIZE(AO3)
511         LFD     a6,  5 * SIZE(AO3)
512         LFD     a8,  7 * SIZE(AO3)
513
514         FMADD   y01, alpha3r, a1, y01
515         FMADD   y02, alpha3i, a1, y02
516         FMADD   y03, alpha3r, a3, y03
517         FMADD   y04, alpha3i, a3, y04
518
519         FMADD   y05, alpha3r, a5, y05
520         FMADD   y06, alpha3i, a5, y06
521         FMADD   y07, alpha3r, a7, y07
522         FMADD   y08, alpha3i, a7, y08
523
524         LFD     a1,  8 * SIZE(AO3)
525         LFD     a3, 10 * SIZE(AO3)
526         LFD     a5, 12 * SIZE(AO3)
527         LFD     a7, 14 * SIZE(AO3)
528
529         FMSUBX  y01, alpha3i, a2, y01
530         FMADDX  y02, alpha3r, a2, y02
531         FMSUBX  y03, alpha3i, a4, y03
532         FMADDX  y04, alpha3r, a4, y04
533
534         FMSUBX  y05, alpha3i, a6, y05
535         FMADDX  y06, alpha3r, a6, y06
536         FMSUBX  y07, alpha3i, a8, y07
537         FMADDX  y08, alpha3r, a8, y08
538
539         LFD     a2,  9 * SIZE(AO3)
540         LFD     a4, 11 * SIZE(AO3)
541         LFD     a6, 13 * SIZE(AO3)
542         LFD     a8, 15 * SIZE(AO3)
543
544         addi    AO3, AO3, 16 * SIZE
545         nop
546         DCBT(AO3, PREA)
547         nop
548
549         FMADD   y09, alpha3r, a1, y09
550         FMADD   y10, alpha3i, a1, y10
551         FMADD   y11, alpha3r, a3, y11
552         FMADD   y12, alpha3i, a3, y12
553
554         FMADD   y13, alpha3r, a5, y13
555         FMADD   y14, alpha3i, a5, y14
556         FMADD   y15, alpha3r, a7, y15
557         FMADD   y16, alpha3i, a7, y16
558
559         LFD     a1,  0 * SIZE(AO4)
560         LFD     a3,  2 * SIZE(AO4)
561         LFD     a5,  4 * SIZE(AO4)
562         LFD     a7,  6 * SIZE(AO4)
563
564         FMSUBX  y09, alpha3i, a2, y09
565         FMADDX  y10, alpha3r, a2, y10
566         FMSUBX  y11, alpha3i, a4, y11
567         FMADDX  y12, alpha3r, a4, y12
568
569         FMSUBX  y13, alpha3i, a6, y13
570         FMADDX  y14, alpha3r, a6, y14
571         FMSUBX  y15, alpha3i, a8, y15
572         FMADDX  y16, alpha3r, a8, y16
573
574         LFD     a2,  1 * SIZE(AO4)
575         LFD     a4,  3 * SIZE(AO4)
576         LFD     a6,  5 * SIZE(AO4)
577         LFD     a8,  7 * SIZE(AO4)
578
579         FMADD   y01, alpha4r, a1, y01
580         FMADD   y02, alpha4i, a1, y02
581         FMADD   y03, alpha4r, a3, y03
582         FMADD   y04, alpha4i, a3, y04
583
584         FMADD   y05, alpha4r, a5, y05
585         FMADD   y06, alpha4i, a5, y06
586         FMADD   y07, alpha4r, a7, y07
587         FMADD   y08, alpha4i, a7, y08
588
589         LFD     a1,  8 * SIZE(AO4)
590         LFD     a3, 10 * SIZE(AO4)
591         LFD     a5, 12 * SIZE(AO4)
592         LFD     a7, 14 * SIZE(AO4)
593
594         FMSUBX  y01, alpha4i, a2, y01
595         FMADDX  y02, alpha4r, a2, y02
596         FMSUBX  y03, alpha4i, a4, y03
597         FMADDX  y04, alpha4r, a4, y04
598
599         STFD    y01,  0 * SIZE(Y2)
600         STFD    y02,  1 * SIZE(Y2)
601         STFD    y03,  2 * SIZE(Y2)
602         STFD    y04,  3 * SIZE(Y2)
603
604         LFD     y01,  0 * SIZE(Y1)
605         LFD     y02,  1 * SIZE(Y1)
606         LFD     y03,  2 * SIZE(Y1)
607         LFD     y04,  3 * SIZE(Y1)
608
609         FMSUBX  y05, alpha4i, a6, y05
610         FMADDX  y06, alpha4r, a6, y06
611         FMSUBX  y07, alpha4i, a8, y07
612         FMADDX  y08, alpha4r, a8, y08
613
614         LFD     a2,  9 * SIZE(AO4)
615         LFD     a4, 11 * SIZE(AO4)
616         LFD     a6, 13 * SIZE(AO4)
617         LFD     a8, 15 * SIZE(AO4)
618
619         addi    AO4, AO4, 16 * SIZE
620         nop
621         DCBT(AO4, PREA)
622         nop
623
624         STFD    y05,  4 * SIZE(Y2)
625         STFD    y06,  5 * SIZE(Y2)
626         STFD    y07,  6 * SIZE(Y2)
627         STFD    y08,  7 * SIZE(Y2)
628
629         LFD     y05,  4 * SIZE(Y1)
630         LFD     y06,  5 * SIZE(Y1)
631         LFD     y07,  6 * SIZE(Y1)
632         LFD     y08,  7 * SIZE(Y1)
633
634         FMADD   y09, alpha4r, a1, y09
635         FMADD   y10, alpha4i, a1, y10
636         FMADD   y11, alpha4r, a3, y11
637         FMADD   y12, alpha4i, a3, y12
638
639         FMADD   y13, alpha4r, a5, y13
640         FMADD   y14, alpha4i, a5, y14
641         FMADD   y15, alpha4r, a7, y15
642         FMADD   y16, alpha4i, a7, y16
643
644         LFD     a1,  0 * SIZE(AO1)
645         LFD     a3,  2 * SIZE(AO1)
646         LFD     a5,  4 * SIZE(AO1)
647         LFD     a7,  6 * SIZE(AO1)
648
649         FMSUBX  y09, alpha4i, a2, y09
650         FMADDX  y10, alpha4r, a2, y10
651         FMSUBX  y11, alpha4i, a4, y11
652         FMADDX  y12, alpha4r, a4, y12
653
654         STFD    y09,  8 * SIZE(Y2)
655         STFD    y10,  9 * SIZE(Y2)
656         STFD    y11, 10 * SIZE(Y2)
657         STFD    y12, 11 * SIZE(Y2)
658
659         LFD     y09,  8 * SIZE(Y1)
660         LFD     y10,  9 * SIZE(Y1)
661         LFD     y11, 10 * SIZE(Y1)
662         LFD     y12, 11 * SIZE(Y1)
663
664         FMSUBX  y13, alpha4i, a6, y13
665         FMADDX  y14, alpha4r, a6, y14
666         FMSUBX  y15, alpha4i, a8, y15
667         FMADDX  y16, alpha4r, a8, y16
668
669         LFD     a2,  1 * SIZE(AO1)
670         LFD     a4,  3 * SIZE(AO1)
671         LFD     a6,  5 * SIZE(AO1)
672         LFD     a8,  7 * SIZE(AO1)
673
674         STFD    y13, 12 * SIZE(Y2)
675         STFD    y14, 13 * SIZE(Y2)
676         STFD    y15, 14 * SIZE(Y2)
677         STFD    y16, 15 * SIZE(Y2)
678
679         LFD     y13, 12 * SIZE(Y1)
680         LFD     y14, 13 * SIZE(Y1)
681         LFD     y15, 14 * SIZE(Y1)
682         LFD     y16, 15 * SIZE(Y1)
683
684         addi    Y2, Y2, 16 * SIZE
685         addi    Y1, Y1, 16 * SIZE
686         DCBT(Y1, PREC)
687         bdnz    LL(12)
688         .align 4
689
690 LL(13):
691         FMADD   y01, alpha1r, a1, y01
692         FMADD   y02, alpha1i, a1, y02
693         FMADD   y03, alpha1r, a3, y03
694         FMADD   y04, alpha1i, a3, y04
695
696         FMADD   y05, alpha1r, a5, y05
697         FMADD   y06, alpha1i, a5, y06
698         FMADD   y07, alpha1r, a7, y07
699         FMADD   y08, alpha1i, a7, y08
700
701         LFD     a1,  8 * SIZE(AO1)
702         LFD     a3, 10 * SIZE(AO1)
703         LFD     a5, 12 * SIZE(AO1)
704         LFD     a7, 14 * SIZE(AO1)
705
706         FMSUBX  y01, alpha1i, a2, y01
707         FMADDX  y02, alpha1r, a2, y02
708         FMSUBX  y03, alpha1i, a4, y03
709         FMADDX  y04, alpha1r, a4, y04
710
711         FMSUBX  y05, alpha1i, a6, y05
712         FMADDX  y06, alpha1r, a6, y06
713         FMSUBX  y07, alpha1i, a8, y07
714         FMADDX  y08, alpha1r, a8, y08
715
716         LFD     a2,  9 * SIZE(AO1)
717         LFD     a4, 11 * SIZE(AO1)
718         LFD     a6, 13 * SIZE(AO1)
719         LFD     a8, 15 * SIZE(AO1)
720
721         FMADD   y09, alpha1r, a1, y09
722         FMADD   y10, alpha1i, a1, y10
723         FMADD   y11, alpha1r, a3, y11
724         FMADD   y12, alpha1i, a3, y12
725
726         FMADD   y13, alpha1r, a5, y13
727         FMADD   y14, alpha1i, a5, y14
728         FMADD   y15, alpha1r, a7, y15
729         FMADD   y16, alpha1i, a7, y16
730
731         LFD     a1,  0 * SIZE(AO2)
732         LFD     a3,  2 * SIZE(AO2)
733         LFD     a5,  4 * SIZE(AO2)
734         LFD     a7,  6 * SIZE(AO2)
735
736         FMSUBX  y09, alpha1i, a2, y09
737         FMADDX  y10, alpha1r, a2, y10
738         FMSUBX  y11, alpha1i, a4, y11
739         FMADDX  y12, alpha1r, a4, y12
740
741         FMSUBX  y13, alpha1i, a6, y13
742         FMADDX  y14, alpha1r, a6, y14
743         FMSUBX  y15, alpha1i, a8, y15
744         FMADDX  y16, alpha1r, a8, y16
745
746         LFD     a2,  1 * SIZE(AO2)
747         LFD     a4,  3 * SIZE(AO2)
748         LFD     a6,  5 * SIZE(AO2)
749         LFD     a8,  7 * SIZE(AO2)
750
751         FMADD   y01, alpha2r, a1, y01
752         FMADD   y02, alpha2i, a1, y02
753         FMADD   y03, alpha2r, a3, y03
754         FMADD   y04, alpha2i, a3, y04
755
756         FMADD   y05, alpha2r, a5, y05
757         FMADD   y06, alpha2i, a5, y06
758         FMADD   y07, alpha2r, a7, y07
759         FMADD   y08, alpha2i, a7, y08
760
761         LFD     a1,  8 * SIZE(AO2)
762         LFD     a3, 10 * SIZE(AO2)
763         LFD     a5, 12 * SIZE(AO2)
764         LFD     a7, 14 * SIZE(AO2)
765
766         FMSUBX  y01, alpha2i, a2, y01
767         FMADDX  y02, alpha2r, a2, y02
768         FMSUBX  y03, alpha2i, a4, y03
769         FMADDX  y04, alpha2r, a4, y04
770
771         FMSUBX  y05, alpha2i, a6, y05
772         FMADDX  y06, alpha2r, a6, y06
773         FMSUBX  y07, alpha2i, a8, y07
774         FMADDX  y08, alpha2r, a8, y08
775
776         LFD     a2,  9 * SIZE(AO2)
777         LFD     a4, 11 * SIZE(AO2)
778         LFD     a6, 13 * SIZE(AO2)
779         LFD     a8, 15 * SIZE(AO2)
780
781         FMADD   y09, alpha2r, a1, y09
782         FMADD   y10, alpha2i, a1, y10
783         FMADD   y11, alpha2r, a3, y11
784         FMADD   y12, alpha2i, a3, y12
785
786         FMADD   y13, alpha2r, a5, y13
787         FMADD   y14, alpha2i, a5, y14
788         FMADD   y15, alpha2r, a7, y15
789         FMADD   y16, alpha2i, a7, y16
790
791         LFD     a1,  0 * SIZE(AO3)
792         LFD     a3,  2 * SIZE(AO3)
793         LFD     a5,  4 * SIZE(AO3)
794         LFD     a7,  6 * SIZE(AO3)
795
796         FMSUBX  y09, alpha2i, a2, y09
797         FMADDX  y10, alpha2r, a2, y10
798         FMSUBX  y11, alpha2i, a4, y11
799         FMADDX  y12, alpha2r, a4, y12
800
801         FMSUBX  y13, alpha2i, a6, y13
802         FMADDX  y14, alpha2r, a6, y14
803         FMSUBX  y15, alpha2i, a8, y15
804         FMADDX  y16, alpha2r, a8, y16
805
806         LFD     a2,  1 * SIZE(AO3)
807         LFD     a4,  3 * SIZE(AO3)
808         LFD     a6,  5 * SIZE(AO3)
809         LFD     a8,  7 * SIZE(AO3)
810
811         FMADD   y01, alpha3r, a1, y01
812         FMADD   y02, alpha3i, a1, y02
813         FMADD   y03, alpha3r, a3, y03
814         FMADD   y04, alpha3i, a3, y04
815
816         FMADD   y05, alpha3r, a5, y05
817         FMADD   y06, alpha3i, a5, y06
818         FMADD   y07, alpha3r, a7, y07
819         FMADD   y08, alpha3i, a7, y08
820
821         LFD     a1,  8 * SIZE(AO3)
822         LFD     a3, 10 * SIZE(AO3)
823         LFD     a5, 12 * SIZE(AO3)
824         LFD     a7, 14 * SIZE(AO3)
825
826         FMSUBX  y01, alpha3i, a2, y01
827         FMADDX  y02, alpha3r, a2, y02
828         FMSUBX  y03, alpha3i, a4, y03
829         FMADDX  y04, alpha3r, a4, y04
830
831         FMSUBX  y05, alpha3i, a6, y05
832         FMADDX  y06, alpha3r, a6, y06
833         FMSUBX  y07, alpha3i, a8, y07
834         FMADDX  y08, alpha3r, a8, y08
835
836         LFD     a2,  9 * SIZE(AO3)
837         LFD     a4, 11 * SIZE(AO3)
838         LFD     a6, 13 * SIZE(AO3)
839         LFD     a8, 15 * SIZE(AO3)
840
841         FMADD   y09, alpha3r, a1, y09
842         FMADD   y10, alpha3i, a1, y10
843         FMADD   y11, alpha3r, a3, y11
844         FMADD   y12, alpha3i, a3, y12
845
846         FMADD   y13, alpha3r, a5, y13
847         FMADD   y14, alpha3i, a5, y14
848         FMADD   y15, alpha3r, a7, y15
849         FMADD   y16, alpha3i, a7, y16
850
851         LFD     a1,  0 * SIZE(AO4)
852         LFD     a3,  2 * SIZE(AO4)
853         LFD     a5,  4 * SIZE(AO4)
854         LFD     a7,  6 * SIZE(AO4)
855
856         FMSUBX  y09, alpha3i, a2, y09
857         FMADDX  y10, alpha3r, a2, y10
858         FMSUBX  y11, alpha3i, a4, y11
859         FMADDX  y12, alpha3r, a4, y12
860
861         FMSUBX  y13, alpha3i, a6, y13
862         FMADDX  y14, alpha3r, a6, y14
863         FMSUBX  y15, alpha3i, a8, y15
864         FMADDX  y16, alpha3r, a8, y16
865
866         LFD     a2,  1 * SIZE(AO4)
867         LFD     a4,  3 * SIZE(AO4)
868         LFD     a6,  5 * SIZE(AO4)
869         LFD     a8,  7 * SIZE(AO4)
870
871         FMADD   y01, alpha4r, a1, y01
872         FMADD   y02, alpha4i, a1, y02
873         FMADD   y03, alpha4r, a3, y03
874         FMADD   y04, alpha4i, a3, y04
875
876         FMADD   y05, alpha4r, a5, y05
877         FMADD   y06, alpha4i, a5, y06
878         FMADD   y07, alpha4r, a7, y07
879         FMADD   y08, alpha4i, a7, y08
880
881         LFD     a1,  8 * SIZE(AO4)
882         LFD     a3, 10 * SIZE(AO4)
883         LFD     a5, 12 * SIZE(AO4)
884         LFD     a7, 14 * SIZE(AO4)
885
886         FMSUBX  y01, alpha4i, a2, y01
887         FMADDX  y02, alpha4r, a2, y02
888         FMSUBX  y03, alpha4i, a4, y03
889         FMADDX  y04, alpha4r, a4, y04
890
891         FMSUBX  y05, alpha4i, a6, y05
892         FMADDX  y06, alpha4r, a6, y06
893         FMSUBX  y07, alpha4i, a8, y07
894         FMADDX  y08, alpha4r, a8, y08
895
896         LFD     a2,  9 * SIZE(AO4)
897         LFD     a4, 11 * SIZE(AO4)
898         LFD     a6, 13 * SIZE(AO4)
899         LFD     a8, 15 * SIZE(AO4)
900
901         FMADD   y09, alpha4r, a1, y09
902         FMADD   y10, alpha4i, a1, y10
903         FMADD   y11, alpha4r, a3, y11
904         FMADD   y12, alpha4i, a3, y12
905
906         FMADD   y13, alpha4r, a5, y13
907         FMADD   y14, alpha4i, a5, y14
908         FMADD   y15, alpha4r, a7, y15
909         FMADD   y16, alpha4i, a7, y16
910
911         LFD     a1, 16 * SIZE(AO1)
912         LFD     a3, 18 * SIZE(AO1)
913         LFD     a5, 20 * SIZE(AO1)
914         LFD     a7, 22 * SIZE(AO1)
915
916         FMSUBX  y09, alpha4i, a2, y09
917         FMADDX  y10, alpha4r, a2, y10
918         FMSUBX  y11, alpha4i, a4, y11
919         FMADDX  y12, alpha4r, a4, y12
920
921         FMSUBX  y13, alpha4i, a6, y13
922         FMADDX  y14, alpha4r, a6, y14
923         FMSUBX  y15, alpha4i, a8, y15
924         FMADDX  y16, alpha4r, a8, y16
925
926         LFD     a2, 17 * SIZE(AO1)
927         LFD     a4, 19 * SIZE(AO1)
928         LFD     a6, 21 * SIZE(AO1)
929         LFD     a8, 23 * SIZE(AO1)
930
931         addi    AO1, AO1, 16 * SIZE
932         addi    AO2, AO2, 16 * SIZE
933         addi    AO3, AO3, 16 * SIZE
934         addi    AO4, AO4, 16 * SIZE
935
936         STFD    y01,  0 * SIZE(Y2)
937         STFD    y02,  1 * SIZE(Y2)
938         STFD    y03,  2 * SIZE(Y2)
939         STFD    y04,  3 * SIZE(Y2)
940         STFD    y05,  4 * SIZE(Y2)
941         STFD    y06,  5 * SIZE(Y2)
942         STFD    y07,  6 * SIZE(Y2)
943         STFD    y08,  7 * SIZE(Y2)
944         STFD    y09,  8 * SIZE(Y2)
945         STFD    y10,  9 * SIZE(Y2)
946         STFD    y11, 10 * SIZE(Y2)
947         STFD    y12, 11 * SIZE(Y2)
948         STFD    y13, 12 * SIZE(Y2)
949         STFD    y14, 13 * SIZE(Y2)
950         STFD    y15, 14 * SIZE(Y2)
951         STFD    y16, 15 * SIZE(Y2)
952         addi    Y2, Y2, 16 * SIZE
953         .align 4
954
955 LL(15):
956         andi.   r0, M, 7
957         ble     LL(19)
958         andi.   r0, M, 4
959         ble     LL(16)
960
961         LFD     y01, 0 * SIZE(Y1)
962         LFD     y02, 1 * SIZE(Y1)
963         LFD     y03, 2 * SIZE(Y1)
964         LFD     y04, 3 * SIZE(Y1)
965
966         LFD     a1,  0 * SIZE(AO1)
967         LFD     a3,  2 * SIZE(AO1)
968         LFD     a5,  4 * SIZE(AO1)
969         LFD     a7,  6 * SIZE(AO1)
970
971         LFD     y05, 4 * SIZE(Y1)
972         LFD     y06, 5 * SIZE(Y1)
973         LFD     y07, 6 * SIZE(Y1)
974         LFD     y08, 7 * SIZE(Y1)
975
976         LFD     a2,  1 * SIZE(AO1)
977         LFD     a4,  3 * SIZE(AO1)
978         LFD     a6,  5 * SIZE(AO1)
979         LFD     a8,  7 * SIZE(AO1)
980
981         FMADD   y01, alpha1r, a1, y01
982         FMADD   y02, alpha1i, a1, y02
983         FMADD   y03, alpha1r, a3, y03
984         FMADD   y04, alpha1i, a3, y04
985
986         FMADD   y05, alpha1r, a5, y05
987         FMADD   y06, alpha1i, a5, y06
988         FMADD   y07, alpha1r, a7, y07
989         FMADD   y08, alpha1i, a7, y08
990
991         LFD     a1,  0 * SIZE(AO2)
992         LFD     a3,  2 * SIZE(AO2)
993         LFD     a5,  4 * SIZE(AO2)
994         LFD     a7,  6 * SIZE(AO2)
995
996         FMSUBX  y01, alpha1i, a2, y01
997         FMADDX  y02, alpha1r, a2, y02
998         FMSUBX  y03, alpha1i, a4, y03
999         FMADDX  y04, alpha1r, a4, y04
1000
1001         FMSUBX  y05, alpha1i, a6, y05
1002         FMADDX  y06, alpha1r, a6, y06
1003         FMSUBX  y07, alpha1i, a8, y07
1004         FMADDX  y08, alpha1r, a8, y08
1005
1006         LFD     a2,  1 * SIZE(AO2)
1007         LFD     a4,  3 * SIZE(AO2)
1008         LFD     a6,  5 * SIZE(AO2)
1009         LFD     a8,  7 * SIZE(AO2)
1010
1011         FMADD   y01, alpha2r, a1, y01
1012         FMADD   y02, alpha2i, a1, y02
1013         FMADD   y03, alpha2r, a3, y03
1014         FMADD   y04, alpha2i, a3, y04
1015
1016         FMADD   y05, alpha2r, a5, y05
1017         FMADD   y06, alpha2i, a5, y06
1018         FMADD   y07, alpha2r, a7, y07
1019         FMADD   y08, alpha2i, a7, y08
1020
1021         LFD     a1,  0 * SIZE(AO3)
1022         LFD     a3,  2 * SIZE(AO3)
1023         LFD     a5,  4 * SIZE(AO3)
1024         LFD     a7,  6 * SIZE(AO3)
1025
1026         FMSUBX  y01, alpha2i, a2, y01
1027         FMADDX  y02, alpha2r, a2, y02
1028         FMSUBX  y03, alpha2i, a4, y03
1029         FMADDX  y04, alpha2r, a4, y04
1030
1031         FMSUBX  y05, alpha2i, a6, y05
1032         FMADDX  y06, alpha2r, a6, y06
1033         FMSUBX  y07, alpha2i, a8, y07
1034         FMADDX  y08, alpha2r, a8, y08
1035
1036         LFD     a2,  1 * SIZE(AO3)
1037         LFD     a4,  3 * SIZE(AO3)
1038         LFD     a6,  5 * SIZE(AO3)
1039         LFD     a8,  7 * SIZE(AO3)
1040
1041         FMADD   y01, alpha3r, a1, y01
1042         FMADD   y02, alpha3i, a1, y02
1043         FMADD   y03, alpha3r, a3, y03
1044         FMADD   y04, alpha3i, a3, y04
1045
1046         FMADD   y05, alpha3r, a5, y05
1047         FMADD   y06, alpha3i, a5, y06
1048         FMADD   y07, alpha3r, a7, y07
1049         FMADD   y08, alpha3i, a7, y08
1050
1051         LFD     a1,  0 * SIZE(AO4)
1052         LFD     a3,  2 * SIZE(AO4)
1053         LFD     a5,  4 * SIZE(AO4)
1054         LFD     a7,  6 * SIZE(AO4)
1055
1056         FMSUBX  y01, alpha3i, a2, y01
1057         FMADDX  y02, alpha3r, a2, y02
1058         FMSUBX  y03, alpha3i, a4, y03
1059         FMADDX  y04, alpha3r, a4, y04
1060
1061         FMSUBX  y05, alpha3i, a6, y05
1062         FMADDX  y06, alpha3r, a6, y06
1063         FMSUBX  y07, alpha3i, a8, y07
1064         FMADDX  y08, alpha3r, a8, y08
1065
1066         LFD     a2,  1 * SIZE(AO4)
1067         LFD     a4,  3 * SIZE(AO4)
1068         LFD     a6,  5 * SIZE(AO4)
1069         LFD     a8,  7 * SIZE(AO4)
1070
1071         FMADD   y01, alpha4r, a1, y01
1072         FMADD   y02, alpha4i, a1, y02
1073         FMADD   y03, alpha4r, a3, y03
1074         FMADD   y04, alpha4i, a3, y04
1075
1076         FMADD   y05, alpha4r, a5, y05
1077         FMADD   y06, alpha4i, a5, y06
1078         FMADD   y07, alpha4r, a7, y07
1079         FMADD   y08, alpha4i, a7, y08
1080
1081         FMSUBX  y01, alpha4i, a2, y01
1082         FMADDX  y02, alpha4r, a2, y02
1083         FMSUBX  y03, alpha4i, a4, y03
1084         FMADDX  y04, alpha4r, a4, y04
1085
1086         STFD    y01, 0 * SIZE(Y2)
1087         STFD    y02, 1 * SIZE(Y2)
1088         STFD    y03, 2 * SIZE(Y2)
1089         STFD    y04, 3 * SIZE(Y2)
1090
1091         FMSUBX  y05, alpha4i, a6, y05
1092         FMADDX  y06, alpha4r, a6, y06
1093         FMSUBX  y07, alpha4i, a8, y07
1094         FMADDX  y08, alpha4r, a8, y08
1095
1096         STFD    y05, 4 * SIZE(Y2)
1097         STFD    y06, 5 * SIZE(Y2)
1098         STFD    y07, 6 * SIZE(Y2)
1099         STFD    y08, 7 * SIZE(Y2)
1100
1101         addi    AO1, AO1, 8 * SIZE
1102         addi    AO2, AO2, 8 * SIZE
1103         addi    AO3, AO3, 8 * SIZE
1104         addi    AO4, AO4, 8 * SIZE
1105
1106         addi    Y1, Y1, 8 * SIZE
1107         addi    Y2, Y2, 8 * SIZE
1108         .align 4
1109
1110 LL(16):
1111         andi.   r0, M, 2
1112         nop
1113         nop
1114         ble     LL(17)
1115
1116         LFD     a1,  0 * SIZE(AO1)
1117         LFD     a2,  1 * SIZE(AO1)
1118         LFD     a3,  2 * SIZE(AO1)
1119         LFD     a4,  3 * SIZE(AO1)
1120
1121         LFD     y01, 0 * SIZE(Y1)
1122         LFD     y02, 1 * SIZE(Y1)
1123         LFD     y03, 2 * SIZE(Y1)
1124         LFD     y04, 3 * SIZE(Y1)
1125
1126         LFD     a5,  0 * SIZE(AO2)
1127         LFD     a6,  1 * SIZE(AO2)
1128         LFD     a7,  2 * SIZE(AO2)
1129         LFD     a8,  3 * SIZE(AO2)
1130
1131         FMADD   y01, alpha1r, a1, y01
1132         FMADD   y02, alpha1i, a1, y02
1133         FMADD   y03, alpha1r, a3, y03
1134         FMADD   y04, alpha1i, a3, y04
1135
1136         FMSUBX  y01, alpha1i, a2, y01
1137         FMADDX  y02, alpha1r, a2, y02
1138         FMSUBX  y03, alpha1i, a4, y03
1139         FMADDX  y04, alpha1r, a4, y04
1140
1141         LFD     a1,  0 * SIZE(AO3)
1142         LFD     a2,  1 * SIZE(AO3)
1143         LFD     a3,  2 * SIZE(AO3)
1144         LFD     a4,  3 * SIZE(AO3)
1145
1146         FMADD   y01, alpha2r, a5, y01
1147         FMADD   y02, alpha2i, a5, y02
1148         FMADD   y03, alpha2r, a7, y03
1149         FMADD   y04, alpha2i, a7, y04
1150
1151         FMSUBX  y01, alpha2i, a6, y01
1152         FMADDX  y02, alpha2r, a6, y02
1153         FMSUBX  y03, alpha2i, a8, y03
1154         FMADDX  y04, alpha2r, a8, y04
1155
1156         LFD     a5,  0 * SIZE(AO4)
1157         LFD     a6,  1 * SIZE(AO4)
1158         LFD     a7,  2 * SIZE(AO4)
1159         LFD     a8,  3 * SIZE(AO4)
1160
1161         FMADD   y01, alpha3r, a1, y01
1162         FMADD   y02, alpha3i, a1, y02
1163         FMADD   y03, alpha3r, a3, y03
1164         FMADD   y04, alpha3i, a3, y04
1165
1166         FMSUBX  y01, alpha3i, a2, y01
1167         FMADDX  y02, alpha3r, a2, y02
1168         FMSUBX  y03, alpha3i, a4, y03
1169         FMADDX  y04, alpha3r, a4, y04
1170
1171         FMADD   y01, alpha4r, a5, y01
1172         FMADD   y02, alpha4i, a5, y02
1173         FMADD   y03, alpha4r, a7, y03
1174         FMADD   y04, alpha4i, a7, y04
1175
1176         FMSUBX  y01, alpha4i, a6, y01
1177         FMADDX  y02, alpha4r, a6, y02
1178         FMSUBX  y03, alpha4i, a8, y03
1179         FMADDX  y04, alpha4r, a8, y04
1180
1181         STFD    y01, 0 * SIZE(Y2)
1182         STFD    y02, 1 * SIZE(Y2)
1183         STFD    y03, 2 * SIZE(Y2)
1184         STFD    y04, 3 * SIZE(Y2)
1185
1186         addi    AO1, AO1, 4 * SIZE
1187         addi    AO2, AO2, 4 * SIZE
1188         addi    AO3, AO3, 4 * SIZE
1189         addi    AO4, AO4, 4 * SIZE
1190
1191         addi    Y1, Y1, 4 * SIZE
1192         addi    Y2, Y2, 4 * SIZE
1193         .align 4
1194
1195 LL(17):
1196         andi.   r0, M, 1
1197         ble     LL(19)
1198
1199         LFD     y01, 0 * SIZE(Y1)
1200         LFD     y02, 1 * SIZE(Y1)
1201
1202         LFD     a1,  0 * SIZE(AO1)
1203         LFD     a2,  1 * SIZE(AO1)
1204         LFD     a3,  0 * SIZE(AO2)
1205         LFD     a4,  1 * SIZE(AO2)
1206
1207         LFD     a5,  0 * SIZE(AO3)
1208         LFD     a6,  1 * SIZE(AO3)
1209         LFD     a7,  0 * SIZE(AO4)
1210         LFD     a8,  1 * SIZE(AO4)
1211
1212         FMADD   y01, alpha1r, a1, y01
1213         FMADD   y02, alpha1i, a1, y02
1214         FMSUBX  y01, alpha1i, a2, y01
1215         FMADDX  y02, alpha1r, a2, y02
1216
1217         FMADD   y01, alpha2r, a3, y01
1218         FMADD   y02, alpha2i, a3, y02
1219         FMSUBX  y01, alpha2i, a4, y01
1220         FMADDX  y02, alpha2r, a4, y02
1221
1222         FMADD   y01, alpha3r, a5, y01
1223         FMADD   y02, alpha3i, a5, y02
1224         FMSUBX  y01, alpha3i, a6, y01
1225         FMADDX  y02, alpha3r, a6, y02
1226
1227         FMADD   y01, alpha4r, a7, y01
1228         FMADD   y02, alpha4i, a7, y02
1229         FMSUBX  y01, alpha4i, a8, y01
1230         FMADDX  y02, alpha4r, a8, y02
1231
1232         STFD    y01, 0 * SIZE(Y2)
1233         STFD    y02, 1 * SIZE(Y2)
1234
1235         add     Y1, Y1, INCY
1236         add     Y2, Y2, INCY
1237         .align 4
1238
1239 LL(19):
1240         addi    J, J, -1
1241         cmpi    cr0, 0, J, 0
1242         bgt     LL(11)
1243         .align 4
1244
1245 LL(20):
1246         andi.   J, N, 2
1247         ble     LL(30)
1248         .align 4
1249
1250 LL(21):
1251         lfd     alpha_r, ALPHA_R
1252         lfd     alpha_i, ALPHA_I
1253
1254         LFD     a1, 0 * SIZE(X)
1255         LFD     a2, 1 * SIZE(X)
1256         add     X, X, INCX
1257         LFD     a3, 0 * SIZE(X)
1258         LFD     a4, 1 * SIZE(X)
1259         add     X, X, INCX
1260
1261         FMUL    alpha1r, alpha_r, a1
1262         FMUL    alpha1i, alpha_i, a1
1263         FMUL    alpha2r, alpha_r, a3
1264         FMUL    alpha2i, alpha_i, a3
1265
1266         FMSUBR  alpha1r, alpha_i, a2, alpha1r
1267         FMADDR  alpha1i, alpha_r, a2, alpha1i
1268         FMSUBR  alpha2r, alpha_i, a4, alpha2r
1269         FMADDR  alpha2i, alpha_r, a4, alpha2i
1270
1271         mr      AO1, A
1272         add     AO2, A,   LDA
1273         add     A,   AO2, LDA
1274
1275         mr      Y1, Y
1276         mr      Y2, Y
1277
1278         srawi.  r0,  M, 3
1279         mtspr   CTR, r0
1280         ble     LL(25)
1281         .align 4
1282
1283         LFD     a1,  0 * SIZE(AO1)
1284         LFD     a2,  1 * SIZE(AO1)
1285         LFD     a3,  2 * SIZE(AO1)
1286         LFD     a4,  3 * SIZE(AO1)
1287
1288         LFD     y01,  0 * SIZE(Y1)
1289         LFD     y02,  1 * SIZE(Y1)
1290         LFD     y03,  2 * SIZE(Y1)
1291         LFD     y04,  3 * SIZE(Y1)
1292
1293         LFD     a5,  4 * SIZE(AO1)
1294         LFD     a6,  5 * SIZE(AO1)
1295         LFD     a7,  6 * SIZE(AO1)
1296         LFD     a8,  7 * SIZE(AO1)
1297
1298         LFD     y05,  4 * SIZE(Y1)
1299         LFD     y06,  5 * SIZE(Y1)
1300         LFD     y07,  6 * SIZE(Y1)
1301         LFD     y08,  7 * SIZE(Y1)
1302         LFD     y09,  8 * SIZE(Y1)
1303         LFD     y10,  9 * SIZE(Y1)
1304         LFD     y11, 10 * SIZE(Y1)
1305         LFD     y12, 11 * SIZE(Y1)
1306         LFD     y13, 12 * SIZE(Y1)
1307         LFD     y14, 13 * SIZE(Y1)
1308         LFD     y15, 14 * SIZE(Y1)
1309         LFD     y16, 15 * SIZE(Y1)
1310         addi    Y1, Y1, 16 * SIZE
1311         bdz     LL(23)
1312         .align 4
1313
1314 LL(22):
1315         FMADD   y01, alpha1r, a1, y01
1316         FMADD   y02, alpha1i, a1, y02
1317         FMADD   y03, alpha1r, a3, y03
1318         FMADD   y04, alpha1i, a3, y04
1319
1320         FMADD   y05, alpha1r, a5, y05
1321         FMADD   y06, alpha1i, a5, y06
1322         FMADD   y07, alpha1r, a7, y07
1323         FMADD   y08, alpha1i, a7, y08
1324
1325         LFD     a1,  8 * SIZE(AO1)
1326         LFD     a3, 10 * SIZE(AO1)
1327         LFD     a5, 12 * SIZE(AO1)
1328         LFD     a7, 14 * SIZE(AO1)
1329
1330         FMSUBX  y01, alpha1i, a2, y01
1331         FMADDX  y02, alpha1r, a2, y02
1332         FMSUBX  y03, alpha1i, a4, y03
1333         FMADDX  y04, alpha1r, a4, y04
1334
1335         FMSUBX  y05, alpha1i, a6, y05
1336         FMADDX  y06, alpha1r, a6, y06
1337         FMSUBX  y07, alpha1i, a8, y07
1338         FMADDX  y08, alpha1r, a8, y08
1339
1340         LFD     a2,  9 * SIZE(AO1)
1341         LFD     a4, 11 * SIZE(AO1)
1342         LFD     a6, 13 * SIZE(AO1)
1343         LFD     a8, 15 * SIZE(AO1)
1344
1345         addi    AO1, AO1, 16 * SIZE
1346         nop
1347         DCBT(AO1, PREA)
1348         nop
1349
1350         FMADD   y09, alpha1r, a1, y09
1351         FMADD   y10, alpha1i, a1, y10
1352         FMADD   y11, alpha1r, a3, y11
1353         FMADD   y12, alpha1i, a3, y12
1354
1355         FMADD   y13, alpha1r, a5, y13
1356         FMADD   y14, alpha1i, a5, y14
1357         FMADD   y15, alpha1r, a7, y15
1358         FMADD   y16, alpha1i, a7, y16
1359
1360         LFD     a1,  0 * SIZE(AO2)
1361         LFD     a3,  2 * SIZE(AO2)
1362         LFD     a5,  4 * SIZE(AO2)
1363         LFD     a7,  6 * SIZE(AO2)
1364
1365         FMSUBX  y09, alpha1i, a2, y09
1366         FMADDX  y10, alpha1r, a2, y10
1367         FMSUBX  y11, alpha1i, a4, y11
1368         FMADDX  y12, alpha1r, a4, y12
1369
1370         FMSUBX  y13, alpha1i, a6, y13
1371         FMADDX  y14, alpha1r, a6, y14
1372         FMSUBX  y15, alpha1i, a8, y15
1373         FMADDX  y16, alpha1r, a8, y16
1374
1375         LFD     a2,  1 * SIZE(AO2)
1376         LFD     a4,  3 * SIZE(AO2)
1377         LFD     a6,  5 * SIZE(AO2)
1378         LFD     a8,  7 * SIZE(AO2)
1379
1380         FMADD   y01, alpha2r, a1, y01
1381         FMADD   y02, alpha2i, a1, y02
1382         FMADD   y03, alpha2r, a3, y03
1383         FMADD   y04, alpha2i, a3, y04
1384
1385         FMADD   y05, alpha2r, a5, y05
1386         FMADD   y06, alpha2i, a5, y06
1387         FMADD   y07, alpha2r, a7, y07
1388         FMADD   y08, alpha2i, a7, y08
1389
1390         LFD     a1,  8 * SIZE(AO2)
1391         LFD     a3, 10 * SIZE(AO2)
1392         LFD     a5, 12 * SIZE(AO2)
1393         LFD     a7, 14 * SIZE(AO2)
1394
1395         FMSUBX  y01, alpha2i, a2, y01
1396         FMADDX  y02, alpha2r, a2, y02
1397         FMSUBX  y03, alpha2i, a4, y03
1398         FMADDX  y04, alpha2r, a4, y04
1399
1400         STFD    y01,  0 * SIZE(Y2)
1401         STFD    y02,  1 * SIZE(Y2)
1402         STFD    y03,  2 * SIZE(Y2)
1403         STFD    y04,  3 * SIZE(Y2)
1404
1405         LFD     y01,  0 * SIZE(Y1)
1406         LFD     y02,  1 * SIZE(Y1)
1407         LFD     y03,  2 * SIZE(Y1)
1408         LFD     y04,  3 * SIZE(Y1)
1409
1410         FMSUBX  y05, alpha2i, a6, y05
1411         FMADDX  y06, alpha2r, a6, y06
1412         FMSUBX  y07, alpha2i, a8, y07
1413         FMADDX  y08, alpha2r, a8, y08
1414
1415         LFD     a2,  9 * SIZE(AO2)
1416         LFD     a4, 11 * SIZE(AO2)
1417         LFD     a6, 13 * SIZE(AO2)
1418         LFD     a8, 15 * SIZE(AO2)
1419
1420         STFD    y05,  4 * SIZE(Y2)
1421         STFD    y06,  5 * SIZE(Y2)
1422         STFD    y07,  6 * SIZE(Y2)
1423         STFD    y08,  7 * SIZE(Y2)
1424
1425         LFD     y05,  4 * SIZE(Y1)
1426         LFD     y06,  5 * SIZE(Y1)
1427         LFD     y07,  6 * SIZE(Y1)
1428         LFD     y08,  7 * SIZE(Y1)
1429
1430         addi    AO2, AO2, 16 * SIZE
1431         nop
1432         DCBT(AO2, PREA)
1433         nop
1434
1435         FMADD   y09, alpha2r, a1, y09
1436         FMADD   y10, alpha2i, a1, y10
1437         FMADD   y11, alpha2r, a3, y11
1438         FMADD   y12, alpha2i, a3, y12
1439
1440         FMADD   y13, alpha2r, a5, y13
1441         FMADD   y14, alpha2i, a5, y14
1442         FMADD   y15, alpha2r, a7, y15
1443         FMADD   y16, alpha2i, a7, y16
1444
1445         LFD     a1,  0 * SIZE(AO1)
1446         LFD     a3,  2 * SIZE(AO1)
1447         LFD     a5,  4 * SIZE(AO1)
1448         LFD     a7,  6 * SIZE(AO1)
1449
1450         FMSUBX  y09, alpha2i, a2, y09
1451         FMADDX  y10, alpha2r, a2, y10
1452         FMSUBX  y11, alpha2i, a4, y11
1453         FMADDX  y12, alpha2r, a4, y12
1454
1455         STFD    y09,  8 * SIZE(Y2)
1456         STFD    y10,  9 * SIZE(Y2)
1457         STFD    y11, 10 * SIZE(Y2)
1458         STFD    y12, 11 * SIZE(Y2)
1459
1460         LFD     y09,  8 * SIZE(Y1)
1461         LFD     y10,  9 * SIZE(Y1)
1462         LFD     y11, 10 * SIZE(Y1)
1463         LFD     y12, 11 * SIZE(Y1)
1464
1465         FMSUBX  y13, alpha2i, a6, y13
1466         FMADDX  y14, alpha2r, a6, y14
1467         FMSUBX  y15, alpha2i, a8, y15
1468         FMADDX  y16, alpha2r, a8, y16
1469
1470         LFD     a2,  1 * SIZE(AO1)
1471         LFD     a4,  3 * SIZE(AO1)
1472         LFD     a6,  5 * SIZE(AO1)
1473         LFD     a8,  7 * SIZE(AO1)
1474
1475         STFD    y13, 12 * SIZE(Y2)
1476         STFD    y14, 13 * SIZE(Y2)
1477         STFD    y15, 14 * SIZE(Y2)
1478         STFD    y16, 15 * SIZE(Y2)
1479
1480         LFD     y13, 12 * SIZE(Y1)
1481         LFD     y14, 13 * SIZE(Y1)
1482         LFD     y15, 14 * SIZE(Y1)
1483         LFD     y16, 15 * SIZE(Y1)
1484
1485         addi    Y2, Y2, 16 * SIZE
1486         addi    Y1, Y1, 16 * SIZE
1487         DCBT(Y1, PREC)
1488         bdnz    LL(22)
1489         .align 4
1490
1491 LL(23):
1492         FMADD   y01, alpha1r, a1, y01
1493         FMADD   y02, alpha1i, a1, y02
1494         FMADD   y03, alpha1r, a3, y03
1495         FMADD   y04, alpha1i, a3, y04
1496
1497         FMADD   y05, alpha1r, a5, y05
1498         FMADD   y06, alpha1i, a5, y06
1499         FMADD   y07, alpha1r, a7, y07
1500         FMADD   y08, alpha1i, a7, y08
1501
1502         LFD     a1,  8 * SIZE(AO1)
1503         LFD     a3, 10 * SIZE(AO1)
1504         LFD     a5, 12 * SIZE(AO1)
1505         LFD     a7, 14 * SIZE(AO1)
1506
1507         FMSUBX  y01, alpha1i, a2, y01
1508         FMADDX  y02, alpha1r, a2, y02
1509         FMSUBX  y03, alpha1i, a4, y03
1510         FMADDX  y04, alpha1r, a4, y04
1511
1512         FMSUBX  y05, alpha1i, a6, y05
1513         FMADDX  y06, alpha1r, a6, y06
1514         FMSUBX  y07, alpha1i, a8, y07
1515         FMADDX  y08, alpha1r, a8, y08
1516
1517         LFD     a2,  9 * SIZE(AO1)
1518         LFD     a4, 11 * SIZE(AO1)
1519         LFD     a6, 13 * SIZE(AO1)
1520         LFD     a8, 15 * SIZE(AO1)
1521
1522         FMADD   y09, alpha1r, a1, y09
1523         FMADD   y10, alpha1i, a1, y10
1524         FMADD   y11, alpha1r, a3, y11
1525         FMADD   y12, alpha1i, a3, y12
1526
1527         FMADD   y13, alpha1r, a5, y13
1528         FMADD   y14, alpha1i, a5, y14
1529         FMADD   y15, alpha1r, a7, y15
1530         FMADD   y16, alpha1i, a7, y16
1531
1532         LFD     a1,  0 * SIZE(AO2)
1533         LFD     a3,  2 * SIZE(AO2)
1534         LFD     a5,  4 * SIZE(AO2)
1535         LFD     a7,  6 * SIZE(AO2)
1536
1537         FMSUBX  y09, alpha1i, a2, y09
1538         FMADDX  y10, alpha1r, a2, y10
1539         FMSUBX  y11, alpha1i, a4, y11
1540         FMADDX  y12, alpha1r, a4, y12
1541
1542         FMSUBX  y13, alpha1i, a6, y13
1543         FMADDX  y14, alpha1r, a6, y14
1544         FMSUBX  y15, alpha1i, a8, y15
1545         FMADDX  y16, alpha1r, a8, y16
1546
1547         LFD     a2,  1 * SIZE(AO2)
1548         LFD     a4,  3 * SIZE(AO2)
1549         LFD     a6,  5 * SIZE(AO2)
1550         LFD     a8,  7 * SIZE(AO2)
1551
1552         FMADD   y01, alpha2r, a1, y01
1553         FMADD   y02, alpha2i, a1, y02
1554         FMADD   y03, alpha2r, a3, y03
1555         FMADD   y04, alpha2i, a3, y04
1556
1557         FMADD   y05, alpha2r, a5, y05
1558         FMADD   y06, alpha2i, a5, y06
1559         FMADD   y07, alpha2r, a7, y07
1560         FMADD   y08, alpha2i, a7, y08
1561
1562         LFD     a1,  8 * SIZE(AO2)
1563         LFD     a3, 10 * SIZE(AO2)
1564         LFD     a5, 12 * SIZE(AO2)
1565         LFD     a7, 14 * SIZE(AO2)
1566
1567         FMSUBX  y01, alpha2i, a2, y01
1568         FMADDX  y02, alpha2r, a2, y02
1569         FMSUBX  y03, alpha2i, a4, y03
1570         FMADDX  y04, alpha2r, a4, y04
1571
1572         STFD    y01,  0 * SIZE(Y2)
1573         STFD    y02,  1 * SIZE(Y2)
1574         STFD    y03,  2 * SIZE(Y2)
1575         STFD    y04,  3 * SIZE(Y2)
1576
1577         FMSUBX  y05, alpha2i, a6, y05
1578         FMADDX  y06, alpha2r, a6, y06
1579         FMSUBX  y07, alpha2i, a8, y07
1580         FMADDX  y08, alpha2r, a8, y08
1581
1582         LFD     a2,  9 * SIZE(AO2)
1583         LFD     a4, 11 * SIZE(AO2)
1584         LFD     a6, 13 * SIZE(AO2)
1585         LFD     a8, 15 * SIZE(AO2)
1586
1587         STFD    y05,  4 * SIZE(Y2)
1588         STFD    y06,  5 * SIZE(Y2)
1589         STFD    y07,  6 * SIZE(Y2)
1590         STFD    y08,  7 * SIZE(Y2)
1591
1592         FMADD   y09, alpha2r, a1, y09
1593         FMADD   y10, alpha2i, a1, y10
1594         FMADD   y11, alpha2r, a3, y11
1595         FMADD   y12, alpha2i, a3, y12
1596
1597         FMADD   y13, alpha2r, a5, y13
1598         FMADD   y14, alpha2i, a5, y14
1599         FMADD   y15, alpha2r, a7, y15
1600         FMADD   y16, alpha2i, a7, y16
1601
1602         FMSUBX  y09, alpha2i, a2, y09
1603         FMADDX  y10, alpha2r, a2, y10
1604         FMSUBX  y11, alpha2i, a4, y11
1605         FMADDX  y12, alpha2r, a4, y12
1606
1607         FMSUBX  y13, alpha2i, a6, y13
1608         FMADDX  y14, alpha2r, a6, y14
1609         FMSUBX  y15, alpha2i, a8, y15
1610         FMADDX  y16, alpha2r, a8, y16
1611
1612         STFD    y09,  8 * SIZE(Y2)
1613         STFD    y10,  9 * SIZE(Y2)
1614         STFD    y11, 10 * SIZE(Y2)
1615         STFD    y12, 11 * SIZE(Y2)
1616
1617         STFD    y13, 12 * SIZE(Y2)
1618         STFD    y14, 13 * SIZE(Y2)
1619         STFD    y15, 14 * SIZE(Y2)
1620         STFD    y16, 15 * SIZE(Y2)
1621
1622         addi    AO1, AO1, 16 * SIZE
1623         addi    AO2, AO2, 16 * SIZE
1624         addi    Y2, Y2, 16 * SIZE
1625         .align 4
1626
1627 LL(25):
1628         andi.   r0, M, 7
1629         ble     LL(30)
1630         andi.   r0, M, 4
1631         ble     LL(26)
1632
1633         LFD     y01, 0 * SIZE(Y1)
1634         LFD     y02, 1 * SIZE(Y1)
1635         LFD     y03, 2 * SIZE(Y1)
1636         LFD     y04, 3 * SIZE(Y1)
1637
1638         LFD     a1,  0 * SIZE(AO1)
1639         LFD     a3,  2 * SIZE(AO1)
1640         LFD     a5,  4 * SIZE(AO1)
1641         LFD     a7,  6 * SIZE(AO1)
1642
1643         LFD     y05, 4 * SIZE(Y1)
1644         LFD     y06, 5 * SIZE(Y1)
1645         LFD     y07, 6 * SIZE(Y1)
1646         LFD     y08, 7 * SIZE(Y1)
1647
1648         LFD     a2,  1 * SIZE(AO1)
1649         LFD     a4,  3 * SIZE(AO1)
1650         LFD     a6,  5 * SIZE(AO1)
1651         LFD     a8,  7 * SIZE(AO1)
1652
1653         FMADD   y01, alpha1r, a1, y01
1654         FMADD   y02, alpha1i, a1, y02
1655         FMADD   y03, alpha1r, a3, y03
1656         FMADD   y04, alpha1i, a3, y04
1657
1658         FMADD   y05, alpha1r, a5, y05
1659         FMADD   y06, alpha1i, a5, y06
1660         FMADD   y07, alpha1r, a7, y07
1661         FMADD   y08, alpha1i, a7, y08
1662
1663         LFD     a1,  0 * SIZE(AO2)
1664         LFD     a3,  2 * SIZE(AO2)
1665         LFD     a5,  4 * SIZE(AO2)
1666         LFD     a7,  6 * SIZE(AO2)
1667
1668         FMSUBX  y01, alpha1i, a2, y01
1669         FMADDX  y02, alpha1r, a2, y02
1670         FMSUBX  y03, alpha1i, a4, y03
1671         FMADDX  y04, alpha1r, a4, y04
1672
1673         FMSUBX  y05, alpha1i, a6, y05
1674         FMADDX  y06, alpha1r, a6, y06
1675         FMSUBX  y07, alpha1i, a8, y07
1676         FMADDX  y08, alpha1r, a8, y08
1677
1678         LFD     a2,  1 * SIZE(AO2)
1679         LFD     a4,  3 * SIZE(AO2)
1680         LFD     a6,  5 * SIZE(AO2)
1681         LFD     a8,  7 * SIZE(AO2)
1682
1683         FMADD   y01, alpha2r, a1, y01
1684         FMADD   y02, alpha2i, a1, y02
1685         FMADD   y03, alpha2r, a3, y03
1686         FMADD   y04, alpha2i, a3, y04
1687
1688         FMADD   y05, alpha2r, a5, y05
1689         FMADD   y06, alpha2i, a5, y06
1690         FMADD   y07, alpha2r, a7, y07
1691         FMADD   y08, alpha2i, a7, y08
1692
1693         FMSUBX  y01, alpha2i, a2, y01
1694         FMADDX  y02, alpha2r, a2, y02
1695         FMSUBX  y03, alpha2i, a4, y03
1696         FMADDX  y04, alpha2r, a4, y04
1697
1698         STFD    y01, 0 * SIZE(Y2)
1699         STFD    y02, 1 * SIZE(Y2)
1700         STFD    y03, 2 * SIZE(Y2)
1701         STFD    y04, 3 * SIZE(Y2)
1702
1703         FMSUBX  y05, alpha2i, a6, y05
1704         FMADDX  y06, alpha2r, a6, y06
1705         FMSUBX  y07, alpha2i, a8, y07
1706         FMADDX  y08, alpha2r, a8, y08
1707
1708         STFD    y05, 4 * SIZE(Y2)
1709         STFD    y06, 5 * SIZE(Y2)
1710         STFD    y07, 6 * SIZE(Y2)
1711         STFD    y08, 7 * SIZE(Y2)
1712
1713         addi    AO1, AO1, 8 * SIZE
1714         addi    AO2, AO2, 8 * SIZE
1715         addi    Y1, Y1, 8 * SIZE
1716         addi    Y2, Y2, 8 * SIZE
1717         .align 4
1718
1719 LL(26):
1720         andi.   r0, M, 2
1721         ble     LL(27)
1722
1723         LFD     a1,  0 * SIZE(AO1)
1724         LFD     a3,  2 * SIZE(AO1)
1725         LFD     a5,  0 * SIZE(AO2)
1726         LFD     a7,  2 * SIZE(AO2)
1727
1728         LFD     y01, 0 * SIZE(Y1)
1729         LFD     y02, 1 * SIZE(Y1)
1730         LFD     y03, 2 * SIZE(Y1)
1731         LFD     y04, 3 * SIZE(Y1)
1732
1733         LFD     a2,  1 * SIZE(AO1)
1734         LFD     a4,  3 * SIZE(AO1)
1735         LFD     a6,  1 * SIZE(AO2)
1736         LFD     a8,  3 * SIZE(AO2)
1737
1738         FMADD   y01, alpha1r, a1, y01
1739         FMADD   y02, alpha1i, a1, y02
1740         FMADD   y03, alpha1r, a3, y03
1741         FMADD   y04, alpha1i, a3, y04
1742
1743         FMSUBX  y01, alpha1i, a2, y01
1744         FMADDX  y02, alpha1r, a2, y02
1745         FMSUBX  y03, alpha1i, a4, y03
1746         FMADDX  y04, alpha1r, a4, y04
1747
1748         FMADD   y01, alpha2r, a5, y01
1749         FMADD   y02, alpha2i, a5, y02
1750         FMADD   y03, alpha2r, a7, y03
1751         FMADD   y04, alpha2i, a7, y04
1752
1753         FMSUBX  y01, alpha2i, a6, y01
1754         FMADDX  y02, alpha2r, a6, y02
1755         FMSUBX  y03, alpha2i, a8, y03
1756         FMADDX  y04, alpha2r, a8, y04
1757
1758         STFD    y01, 0 * SIZE(Y2)
1759         STFD    y02, 1 * SIZE(Y2)
1760         STFD    y03, 2 * SIZE(Y2)
1761         STFD    y04, 3 * SIZE(Y2)
1762
1763         addi    AO1, AO1, 4 * SIZE
1764         addi    AO2, AO2, 4 * SIZE
1765         addi    Y1, Y1, 4 * SIZE
1766         addi    Y2, Y2, 4 * SIZE
1767         .align 4
1768
1769 LL(27):
1770         andi.   r0, M, 1
1771         ble     LL(30)
1772
1773         LFD     y01, 0 * SIZE(Y1)
1774         LFD     y02, 1 * SIZE(Y1)
1775
1776         LFD     a1,  0 * SIZE(AO1)
1777         LFD     a2,  1 * SIZE(AO1)
1778         LFD     a3,  0 * SIZE(AO2)
1779         LFD     a4,  1 * SIZE(AO2)
1780
1781         FMADD   y01, alpha1r, a1, y01
1782         FMADD   y02, alpha1i, a1, y02
1783         FMSUBX  y01, alpha1i, a2, y01
1784         FMADDX  y02, alpha1r, a2, y02
1785
1786         FMADD   y01, alpha2r, a3, y01
1787         FMADD   y02, alpha2i, a3, y02
1788         FMSUBX  y01, alpha2i, a4, y01
1789         FMADDX  y02, alpha2r, a4, y02
1790
1791         STFD    y01, 0 * SIZE(Y2)
1792         STFD    y02, 1 * SIZE(Y2)
1793         add     Y1, Y1, INCY
1794         add     Y2, Y2, INCY
1795         .align 4
1796
1797 LL(30):
1798         andi.   J, N, 1
1799         ble     LL(999)
1800         .align 4
1801
1802 LL(31):
1803         lfd     alpha_r, ALPHA_R
1804         lfd     alpha_i, ALPHA_I
1805
1806         LFD     a1, 0 * SIZE(X)
1807         LFD     a2, 1 * SIZE(X)
1808         add     X, X, INCX
1809
1810         FMUL    alpha1r, alpha_r, a1
1811         FMUL    alpha1i, alpha_i, a1
1812
1813         FMSUBR  alpha1r, alpha_i, a2, alpha1r
1814         FMADDR  alpha1i, alpha_r, a2, alpha1i
1815
1816         mr      AO1, A
1817         add     A,   AO1, LDA
1818
1819         mr      Y1, Y
1820         mr      Y2, Y
1821
1822         srawi.  r0,  M, 3
1823         mtspr   CTR, r0
1824         ble     LL(35)
1825         .align 4
1826
1827         LFD     y01,  0 * SIZE(Y1)
1828         LFD     y02,  1 * SIZE(Y1)
1829         LFD     y03,  2 * SIZE(Y1)
1830         LFD     y04,  3 * SIZE(Y1)
1831         LFD     y05,  4 * SIZE(Y1)
1832         LFD     y06,  5 * SIZE(Y1)
1833         LFD     y07,  6 * SIZE(Y1)
1834         LFD     y08,  7 * SIZE(Y1)
1835         LFD     y09,  8 * SIZE(Y1)
1836         LFD     y10,  9 * SIZE(Y1)
1837         LFD     y11, 10 * SIZE(Y1)
1838         LFD     y12, 11 * SIZE(Y1)
1839         LFD     y13, 12 * SIZE(Y1)
1840         LFD     y14, 13 * SIZE(Y1)
1841         LFD     y15, 14 * SIZE(Y1)
1842         LFD     y16, 15 * SIZE(Y1)
1843
1844         LFD     a1,  0 * SIZE(AO1)
1845         LFD     a2,  1 * SIZE(AO1)
1846         LFD     a3,  2 * SIZE(AO1)
1847         LFD     a4,  3 * SIZE(AO1)
1848         LFD     a5,  4 * SIZE(AO1)
1849         LFD     a6,  5 * SIZE(AO1)
1850         LFD     a7,  6 * SIZE(AO1)
1851         LFD     a8,  7 * SIZE(AO1)
1852
1853         addi    Y1, Y1, 16 * SIZE
1854         bdz     LL(33)
1855         .align 4
1856
1857 LL(32):
1858         FMADD   y01, alpha1r, a1, y01
1859         FMADD   y02, alpha1i, a1, y02
1860         FMADD   y03, alpha1r, a3, y03
1861         FMADD   y04, alpha1i, a3, y04
1862
1863         FMADD   y05, alpha1r, a5, y05
1864         FMADD   y06, alpha1i, a5, y06
1865         FMADD   y07, alpha1r, a7, y07
1866         FMADD   y08, alpha1i, a7, y08
1867
1868         LFD     a1,  8 * SIZE(AO1)
1869         LFD     a3, 10 * SIZE(AO1)
1870         LFD     a5, 12 * SIZE(AO1)
1871         LFD     a7, 14 * SIZE(AO1)
1872
1873         FMSUBX  y01, alpha1i, a2, y01
1874         FMADDX  y02, alpha1r, a2, y02
1875         FMSUBX  y03, alpha1i, a4, y03
1876         FMADDX  y04, alpha1r, a4, y04
1877
1878         STFD    y01,  0 * SIZE(Y2)
1879         STFD    y02,  1 * SIZE(Y2)
1880         STFD    y03,  2 * SIZE(Y2)
1881         STFD    y04,  3 * SIZE(Y2)
1882
1883         LFD     y01,  0 * SIZE(Y1)
1884         LFD     y02,  1 * SIZE(Y1)
1885         LFD     y03,  2 * SIZE(Y1)
1886         LFD     y04,  3 * SIZE(Y1)
1887
1888         FMSUBX  y05, alpha1i, a6, y05
1889         FMADDX  y06, alpha1r, a6, y06
1890         FMSUBX  y07, alpha1i, a8, y07
1891         FMADDX  y08, alpha1r, a8, y08
1892
1893         LFD     a2,  9 * SIZE(AO1)
1894         LFD     a4, 11 * SIZE(AO1)
1895         LFD     a6, 13 * SIZE(AO1)
1896         LFD     a8, 15 * SIZE(AO1)
1897
1898         addi    AO1, AO1, 16 * SIZE
1899         nop
1900         DCBT(AO1, PREA)
1901         nop
1902
1903         STFD    y05,  4 * SIZE(Y2)
1904         STFD    y06,  5 * SIZE(Y2)
1905         STFD    y07,  6 * SIZE(Y2)
1906         STFD    y08,  7 * SIZE(Y2)
1907
1908         LFD     y05,  4 * SIZE(Y1)
1909         LFD     y06,  5 * SIZE(Y1)
1910         LFD     y07,  6 * SIZE(Y1)
1911         LFD     y08,  7 * SIZE(Y1)
1912
1913         FMADD   y09, alpha1r, a1, y09
1914         FMADD   y10, alpha1i, a1, y10
1915         FMADD   y11, alpha1r, a3, y11
1916         FMADD   y12, alpha1i, a3, y12
1917
1918         FMADD   y13, alpha1r, a5, y13
1919         FMADD   y14, alpha1i, a5, y14
1920         FMADD   y15, alpha1r, a7, y15
1921         FMADD   y16, alpha1i, a7, y16
1922
1923         LFD     a1,  0 * SIZE(AO1)
1924         LFD     a3,  2 * SIZE(AO1)
1925         LFD     a5,  4 * SIZE(AO1)
1926         LFD     a7,  6 * SIZE(AO1)
1927
1928         FMSUBX  y09, alpha1i, a2, y09
1929         FMADDX  y10, alpha1r, a2, y10
1930         FMSUBX  y11, alpha1i, a4, y11
1931         FMADDX  y12, alpha1r, a4, y12
1932
1933         STFD    y09,  8 * SIZE(Y2)
1934         STFD    y10,  9 * SIZE(Y2)
1935         STFD    y11, 10 * SIZE(Y2)
1936         STFD    y12, 11 * SIZE(Y2)
1937
1938         LFD     y09,  8 * SIZE(Y1)
1939         LFD     y10,  9 * SIZE(Y1)
1940         LFD     y11, 10 * SIZE(Y1)
1941         LFD     y12, 11 * SIZE(Y1)
1942
1943         FMSUBX  y13, alpha1i, a6, y13
1944         FMADDX  y14, alpha1r, a6, y14
1945         FMSUBX  y15, alpha1i, a8, y15
1946         FMADDX  y16, alpha1r, a8, y16
1947
1948         LFD     a2,  1 * SIZE(AO1)
1949         LFD     a4,  3 * SIZE(AO1)
1950         LFD     a6,  5 * SIZE(AO1)
1951         LFD     a8,  7 * SIZE(AO1)
1952
1953         STFD    y13, 12 * SIZE(Y2)
1954         STFD    y14, 13 * SIZE(Y2)
1955         STFD    y15, 14 * SIZE(Y2)
1956         STFD    y16, 15 * SIZE(Y2)
1957
1958         LFD     y13, 12 * SIZE(Y1)
1959         LFD     y14, 13 * SIZE(Y1)
1960         LFD     y15, 14 * SIZE(Y1)
1961         LFD     y16, 15 * SIZE(Y1)
1962
1963         addi    Y1, Y1, 16 * SIZE
1964         addi    Y2, Y2, 16 * SIZE
1965         DCBT(Y1, PREC)
1966         bdnz    LL(32)
1967         .align 4
1968
1969 LL(33):
1970         FMADD   y01, alpha1r, a1, y01
1971         FMADD   y02, alpha1i, a1, y02
1972         FMADD   y03, alpha1r, a3, y03
1973         FMADD   y04, alpha1i, a3, y04
1974
1975         FMADD   y05, alpha1r, a5, y05
1976         FMADD   y06, alpha1i, a5, y06
1977         FMADD   y07, alpha1r, a7, y07
1978         FMADD   y08, alpha1i, a7, y08
1979
1980         LFD     a1,  8 * SIZE(AO1)
1981         LFD     a3, 10 * SIZE(AO1)
1982         LFD     a5, 12 * SIZE(AO1)
1983         LFD     a7, 14 * SIZE(AO1)
1984
1985         FMSUBX  y01, alpha1i, a2, y01
1986         FMADDX  y02, alpha1r, a2, y02
1987         FMSUBX  y03, alpha1i, a4, y03
1988         FMADDX  y04, alpha1r, a4, y04
1989
1990         STFD    y01,  0 * SIZE(Y2)
1991         STFD    y02,  1 * SIZE(Y2)
1992         STFD    y03,  2 * SIZE(Y2)
1993         STFD    y04,  3 * SIZE(Y2)
1994
1995         FMSUBX  y05, alpha1i, a6, y05
1996         FMADDX  y06, alpha1r, a6, y06
1997         FMSUBX  y07, alpha1i, a8, y07
1998         FMADDX  y08, alpha1r, a8, y08
1999
2000         LFD     a2,  9 * SIZE(AO1)
2001         LFD     a4, 11 * SIZE(AO1)
2002         LFD     a6, 13 * SIZE(AO1)
2003         LFD     a8, 15 * SIZE(AO1)
2004
2005         STFD    y05,  4 * SIZE(Y2)
2006         STFD    y06,  5 * SIZE(Y2)
2007         STFD    y07,  6 * SIZE(Y2)
2008         STFD    y08,  7 * SIZE(Y2)
2009
2010         FMADD   y09, alpha1r, a1, y09
2011         FMADD   y10, alpha1i, a1, y10
2012         FMADD   y11, alpha1r, a3, y11
2013         FMADD   y12, alpha1i, a3, y12
2014
2015         FMADD   y13, alpha1r, a5, y13
2016         FMADD   y14, alpha1i, a5, y14
2017         FMADD   y15, alpha1r, a7, y15
2018         FMADD   y16, alpha1i, a7, y16
2019
2020         FMSUBX  y09, alpha1i, a2, y09
2021         FMADDX  y10, alpha1r, a2, y10
2022         FMSUBX  y11, alpha1i, a4, y11
2023         FMADDX  y12, alpha1r, a4, y12
2024
2025         STFD    y09,  8 * SIZE(Y2)
2026         STFD    y10,  9 * SIZE(Y2)
2027         STFD    y11, 10 * SIZE(Y2)
2028         STFD    y12, 11 * SIZE(Y2)
2029
2030         FMSUBX  y13, alpha1i, a6, y13
2031         FMADDX  y14, alpha1r, a6, y14
2032         FMSUBX  y15, alpha1i, a8, y15
2033         FMADDX  y16, alpha1r, a8, y16
2034
2035         STFD    y13, 12 * SIZE(Y2)
2036         STFD    y14, 13 * SIZE(Y2)
2037         STFD    y15, 14 * SIZE(Y2)
2038         STFD    y16, 15 * SIZE(Y2)
2039
2040         addi    AO1, AO1, 16 * SIZE
2041         addi    Y2, Y2, 16 * SIZE
2042         .align 4
2043
2044 LL(35):
2045         andi.   r0, M, 7
2046         ble     LL(999)
2047         andi.   r0, M, 4
2048         ble     LL(36)
2049
2050         LFD     y01, 0 * SIZE(Y1)
2051         LFD     y02, 1 * SIZE(Y1)
2052         LFD     y03, 2 * SIZE(Y1)
2053         LFD     y04, 3 * SIZE(Y1)
2054
2055         LFD     a1,  0 * SIZE(AO1)
2056         LFD     a3,  2 * SIZE(AO1)
2057         LFD     a5,  4 * SIZE(AO1)
2058         LFD     a7,  6 * SIZE(AO1)
2059
2060         LFD     y05, 4 * SIZE(Y1)
2061         LFD     y06, 5 * SIZE(Y1)
2062         LFD     y07, 6 * SIZE(Y1)
2063         LFD     y08, 7 * SIZE(Y1)
2064
2065         LFD     a2,  1 * SIZE(AO1)
2066         LFD     a4,  3 * SIZE(AO1)
2067         LFD     a6,  5 * SIZE(AO1)
2068         LFD     a8,  7 * SIZE(AO1)
2069
2070         FMADD   y01, alpha1r, a1, y01
2071         FMADD   y02, alpha1i, a1, y02
2072         FMADD   y03, alpha1r, a3, y03
2073         FMADD   y04, alpha1i, a3, y04
2074
2075         FMADD   y05, alpha1r, a5, y05
2076         FMADD   y06, alpha1i, a5, y06
2077         FMADD   y07, alpha1r, a7, y07
2078         FMADD   y08, alpha1i, a7, y08
2079
2080         FMSUBX  y01, alpha1i, a2, y01
2081         FMADDX  y02, alpha1r, a2, y02
2082         FMSUBX  y03, alpha1i, a4, y03
2083         FMADDX  y04, alpha1r, a4, y04
2084
2085         FMSUBX  y05, alpha1i, a6, y05
2086         FMADDX  y06, alpha1r, a6, y06
2087         FMSUBX  y07, alpha1i, a8, y07
2088         FMADDX  y08, alpha1r, a8, y08
2089
2090         STFD    y01, 0 * SIZE(Y2)
2091         STFD    y02, 1 * SIZE(Y2)
2092         STFD    y03, 2 * SIZE(Y2)
2093         STFD    y04, 3 * SIZE(Y2)
2094         STFD    y05, 4 * SIZE(Y2)
2095         STFD    y06, 5 * SIZE(Y2)
2096         STFD    y07, 6 * SIZE(Y2)
2097         STFD    y08, 7 * SIZE(Y2)
2098
2099         addi    AO1, AO1, 8 * SIZE
2100         addi    Y1, Y1, 8 * SIZE
2101         addi    Y2, Y2, 8 * SIZE
2102         .align 4
2103
2104 LL(36):
2105         andi.   r0, M, 2
2106         ble     LL(37)
2107
2108         LFD     a1,  0 * SIZE(AO1)
2109         LFD     a2,  1 * SIZE(AO1)
2110         LFD     a3,  2 * SIZE(AO1)
2111         LFD     a4,  3 * SIZE(AO1)
2112
2113         LFD     y01, 0 * SIZE(Y1)
2114         LFD     y02, 1 * SIZE(Y1)
2115         LFD     y03, 2 * SIZE(Y1)
2116         LFD     y04, 3 * SIZE(Y1)
2117
2118         FMADD   y01, alpha1r, a1, y01
2119         FMADD   y02, alpha1i, a1, y02
2120         FMADD   y03, alpha1r, a3, y03
2121         FMADD   y04, alpha1i, a3, y04
2122
2123         FMSUBX  y01, alpha1i, a2, y01
2124         FMADDX  y02, alpha1r, a2, y02
2125         FMSUBX  y03, alpha1i, a4, y03
2126         FMADDX  y04, alpha1r, a4, y04
2127
2128         STFD    y01, 0 * SIZE(Y2)
2129         STFD    y02, 1 * SIZE(Y2)
2130         STFD    y03, 2 * SIZE(Y2)
2131         STFD    y04, 3 * SIZE(Y2)
2132
2133         addi    AO1, AO1, 4 * SIZE
2134         addi    Y1, Y1, 4 * SIZE
2135         addi    Y2, Y2, 4 * SIZE
2136         .align 4
2137
2138 LL(37):
2139         andi.   r0, M, 1
2140         ble     LL(999)
2141
2142         LFD     y01, 0 * SIZE(Y1)
2143         LFD     y02, 1 * SIZE(Y1)
2144         LFD     a1,  0 * SIZE(AO1)
2145         LFD     a2,  1 * SIZE(AO1)
2146
2147         FMADD   y01, alpha1r, a1, y01
2148         FMADD   y02, alpha1i, a1, y02
2149         FMSUBX  y01, alpha1i, a2, y01
2150         FMADDX  y02, alpha1r, a2, y02
2151
2152         STFD    y01, 0 * SIZE(Y2)
2153         STFD    y02, 1 * SIZE(Y2)
2154         add     Y1, Y1, INCY
2155         add     Y2, Y2, INCY
2156         b       LL(999)
2157         .align 4
2158
2159 LL(100):
2160         srawi.  J, N, 2
2161         ble     LL(120)
2162         .align 4
2163
2164 LL(111):
2165         lfd     alpha_r, ALPHA_R
2166         lfd     alpha_i, ALPHA_I
2167
2168         LFD     a1, 0 * SIZE(X)
2169         LFD     a2, 1 * SIZE(X)
2170         add     X, X, INCX
2171         LFD     a3, 0 * SIZE(X)
2172         LFD     a4, 1 * SIZE(X)
2173         add     X, X, INCX
2174         LFD     a5, 0 * SIZE(X)
2175         LFD     a6, 1 * SIZE(X)
2176         add     X, X, INCX
2177         LFD     a7, 0 * SIZE(X)
2178         LFD     a8, 1 * SIZE(X)
2179         add     X, X, INCX
2180
2181         FMUL    alpha1r, alpha_r, a1
2182         FMUL    alpha1i, alpha_i, a1
2183         FMUL    alpha2r, alpha_r, a3
2184         FMUL    alpha2i, alpha_i, a3
2185         FMUL    alpha3r, alpha_r, a5
2186         FMUL    alpha3i, alpha_i, a5
2187         FMUL    alpha4r, alpha_r, a7
2188         FMUL    alpha4i, alpha_i, a7
2189
2190         FMSUBR  alpha1r, alpha_i, a2, alpha1r
2191         FMADDR  alpha1i, alpha_r, a2, alpha1i
2192         FMSUBR  alpha2r, alpha_i, a4, alpha2r
2193         FMADDR  alpha2i, alpha_r, a4, alpha2i
2194         FMSUBR  alpha3r, alpha_i, a6, alpha3r
2195         FMADDR  alpha3i, alpha_r, a6, alpha3i
2196         FMSUBR  alpha4r, alpha_i, a8, alpha4r
2197         FMADDR  alpha4i, alpha_r, a8, alpha4i
2198
2199         mr      AO1, A
2200         add     AO2, A,   LDA
2201         add     AO3, AO2, LDA
2202         add     AO4, AO3, LDA
2203         add     A,   AO4, LDA
2204
2205         mr      Y1, Y
2206         mr      Y2, Y
2207
2208         srawi.  r0,  M, 3
2209         mtspr   CTR, r0
2210         ble     LL(115)
2211         .align 4
2212
2213         LFD     y01, 0 * SIZE(Y1)
2214         LFD     y02, 1 * SIZE(Y1)
2215         add     Y1, Y1, INCY
2216         LFD     y03, 0 * SIZE(Y1)
2217         LFD     y04, 1 * SIZE(Y1)
2218         add     Y1, Y1, INCY
2219         LFD     y05, 0 * SIZE(Y1)
2220         LFD     y06, 1 * SIZE(Y1)
2221         add     Y1, Y1, INCY
2222         LFD     y07, 0 * SIZE(Y1)
2223         LFD     y08, 1 * SIZE(Y1)
2224         add     Y1, Y1, INCY
2225         LFD     y09, 0 * SIZE(Y1)
2226         LFD     y10, 1 * SIZE(Y1)
2227         add     Y1, Y1, INCY
2228         LFD     y11, 0 * SIZE(Y1)
2229         LFD     y12, 1 * SIZE(Y1)
2230         add     Y1, Y1, INCY
2231         LFD     y13, 0 * SIZE(Y1)
2232         LFD     y14, 1 * SIZE(Y1)
2233         add     Y1, Y1, INCY
2234         LFD     y15, 0 * SIZE(Y1)
2235         LFD     y16, 1 * SIZE(Y1)
2236         add     Y1, Y1, INCY
2237
2238         LFD     a1,  0 * SIZE(AO1)
2239         LFD     a2,  1 * SIZE(AO1)
2240         LFD     a3,  2 * SIZE(AO1)
2241         LFD     a4,  3 * SIZE(AO1)
2242         LFD     a5,  4 * SIZE(AO1)
2243         LFD     a6,  5 * SIZE(AO1)
2244         LFD     a7,  6 * SIZE(AO1)
2245         LFD     a8,  7 * SIZE(AO1)
2246         bdz     LL(113)
2247         .align 4
2248
2249 LL(112):
2250         FMADD   y01, alpha1r, a1, y01
2251         FMADD   y02, alpha1i, a1, y02
2252         FMADD   y03, alpha1r, a3, y03
2253         FMADD   y04, alpha1i, a3, y04
2254
2255         FMADD   y05, alpha1r, a5, y05
2256         FMADD   y06, alpha1i, a5, y06
2257         FMADD   y07, alpha1r, a7, y07
2258         FMADD   y08, alpha1i, a7, y08
2259
2260         LFD     a1,  8 * SIZE(AO1)
2261         LFD     a3, 10 * SIZE(AO1)
2262         LFD     a5, 12 * SIZE(AO1)
2263         LFD     a7, 14 * SIZE(AO1)
2264
2265         FMSUBX  y01, alpha1i, a2, y01
2266         FMADDX  y02, alpha1r, a2, y02
2267         FMSUBX  y03, alpha1i, a4, y03
2268         FMADDX  y04, alpha1r, a4, y04
2269
2270         FMSUBX  y05, alpha1i, a6, y05
2271         FMADDX  y06, alpha1r, a6, y06
2272         FMSUBX  y07, alpha1i, a8, y07
2273         FMADDX  y08, alpha1r, a8, y08
2274
2275         LFD     a2,  9 * SIZE(AO1)
2276         LFD     a4, 11 * SIZE(AO1)
2277         LFD     a6, 13 * SIZE(AO1)
2278         LFD     a8, 15 * SIZE(AO1)
2279
2280         addi    AO1, AO1, 16 * SIZE
2281         nop
2282         DCBT(AO1, PREA)
2283         nop
2284
2285         FMADD   y09, alpha1r, a1, y09
2286         FMADD   y10, alpha1i, a1, y10
2287         FMADD   y11, alpha1r, a3, y11
2288         FMADD   y12, alpha1i, a3, y12
2289
2290         FMADD   y13, alpha1r, a5, y13
2291         FMADD   y14, alpha1i, a5, y14
2292         FMADD   y15, alpha1r, a7, y15
2293         FMADD   y16, alpha1i, a7, y16
2294
2295         LFD     a1,  0 * SIZE(AO2)
2296         LFD     a3,  2 * SIZE(AO2)
2297         LFD     a5,  4 * SIZE(AO2)
2298         LFD     a7,  6 * SIZE(AO2)
2299
2300         FMSUBX  y09, alpha1i, a2, y09
2301         FMADDX  y10, alpha1r, a2, y10
2302         FMSUBX  y11, alpha1i, a4, y11
2303         FMADDX  y12, alpha1r, a4, y12
2304
2305         FMSUBX  y13, alpha1i, a6, y13
2306         FMADDX  y14, alpha1r, a6, y14
2307         FMSUBX  y15, alpha1i, a8, y15
2308         FMADDX  y16, alpha1r, a8, y16
2309
2310         LFD     a2,  1 * SIZE(AO2)
2311         LFD     a4,  3 * SIZE(AO2)
2312         LFD     a6,  5 * SIZE(AO2)
2313         LFD     a8,  7 * SIZE(AO2)
2314
2315         FMADD   y01, alpha2r, a1, y01
2316         FMADD   y02, alpha2i, a1, y02
2317         FMADD   y03, alpha2r, a3, y03
2318         FMADD   y04, alpha2i, a3, y04
2319
2320         FMADD   y05, alpha2r, a5, y05
2321         FMADD   y06, alpha2i, a5, y06
2322         FMADD   y07, alpha2r, a7, y07
2323         FMADD   y08, alpha2i, a7, y08
2324
2325         LFD     a1,  8 * SIZE(AO2)
2326         LFD     a3, 10 * SIZE(AO2)
2327         LFD     a5, 12 * SIZE(AO2)
2328         LFD     a7, 14 * SIZE(AO2)
2329
2330         FMSUBX  y01, alpha2i, a2, y01
2331         FMADDX  y02, alpha2r, a2, y02
2332         FMSUBX  y03, alpha2i, a4, y03
2333         FMADDX  y04, alpha2r, a4, y04
2334
2335         FMSUBX  y05, alpha2i, a6, y05
2336         FMADDX  y06, alpha2r, a6, y06
2337         FMSUBX  y07, alpha2i, a8, y07
2338         FMADDX  y08, alpha2r, a8, y08
2339
2340         LFD     a2,  9 * SIZE(AO2)
2341         LFD     a4, 11 * SIZE(AO2)
2342         LFD     a6, 13 * SIZE(AO2)
2343         LFD     a8, 15 * SIZE(AO2)
2344
2345         addi    AO2, AO2, 16 * SIZE
2346         nop
2347         DCBT(AO2, PREA)
2348         nop
2349
2350         FMADD   y09, alpha2r, a1, y09
2351         FMADD   y10, alpha2i, a1, y10
2352         FMADD   y11, alpha2r, a3, y11
2353         FMADD   y12, alpha2i, a3, y12
2354
2355         FMADD   y13, alpha2r, a5, y13
2356         FMADD   y14, alpha2i, a5, y14
2357         FMADD   y15, alpha2r, a7, y15
2358         FMADD   y16, alpha2i, a7, y16
2359
2360         LFD     a1,  0 * SIZE(AO3)
2361         LFD     a3,  2 * SIZE(AO3)
2362         LFD     a5,  4 * SIZE(AO3)
2363         LFD     a7,  6 * SIZE(AO3)
2364
2365         FMSUBX  y09, alpha2i, a2, y09
2366         FMADDX  y10, alpha2r, a2, y10
2367         FMSUBX  y11, alpha2i, a4, y11
2368         FMADDX  y12, alpha2r, a4, y12
2369
2370         FMSUBX  y13, alpha2i, a6, y13
2371         FMADDX  y14, alpha2r, a6, y14
2372         FMSUBX  y15, alpha2i, a8, y15
2373         FMADDX  y16, alpha2r, a8, y16
2374
2375         LFD     a2,  1 * SIZE(AO3)
2376         LFD     a4,  3 * SIZE(AO3)
2377         LFD     a6,  5 * SIZE(AO3)
2378         LFD     a8,  7 * SIZE(AO3)
2379
2380         FMADD   y01, alpha3r, a1, y01
2381         FMADD   y02, alpha3i, a1, y02
2382         FMADD   y03, alpha3r, a3, y03
2383         FMADD   y04, alpha3i, a3, y04
2384
2385         FMADD   y05, alpha3r, a5, y05
2386         FMADD   y06, alpha3i, a5, y06
2387         FMADD   y07, alpha3r, a7, y07
2388         FMADD   y08, alpha3i, a7, y08
2389
2390         LFD     a1,  8 * SIZE(AO3)
2391         LFD     a3, 10 * SIZE(AO3)
2392         LFD     a5, 12 * SIZE(AO3)
2393         LFD     a7, 14 * SIZE(AO3)
2394
2395         FMSUBX  y01, alpha3i, a2, y01
2396         FMADDX  y02, alpha3r, a2, y02
2397         FMSUBX  y03, alpha3i, a4, y03
2398         FMADDX  y04, alpha3r, a4, y04
2399
2400         FMSUBX  y05, alpha3i, a6, y05
2401         FMADDX  y06, alpha3r, a6, y06
2402         FMSUBX  y07, alpha3i, a8, y07
2403         FMADDX  y08, alpha3r, a8, y08
2404
2405         LFD     a2,  9 * SIZE(AO3)
2406         LFD     a4, 11 * SIZE(AO3)
2407         LFD     a6, 13 * SIZE(AO3)
2408         LFD     a8, 15 * SIZE(AO3)
2409
2410         addi    AO3, AO3, 16 * SIZE
2411         nop
2412         DCBT(AO3, PREA)
2413         nop
2414
2415         FMADD   y09, alpha3r, a1, y09
2416         FMADD   y10, alpha3i, a1, y10
2417         FMADD   y11, alpha3r, a3, y11
2418         FMADD   y12, alpha3i, a3, y12
2419
2420         FMADD   y13, alpha3r, a5, y13
2421         FMADD   y14, alpha3i, a5, y14
2422         FMADD   y15, alpha3r, a7, y15
2423         FMADD   y16, alpha3i, a7, y16
2424
2425         LFD     a1,  0 * SIZE(AO4)
2426         LFD     a3,  2 * SIZE(AO4)
2427         LFD     a5,  4 * SIZE(AO4)
2428         LFD     a7,  6 * SIZE(AO4)
2429
2430         FMSUBX  y09, alpha3i, a2, y09
2431         FMADDX  y10, alpha3r, a2, y10
2432         FMSUBX  y11, alpha3i, a4, y11
2433         FMADDX  y12, alpha3r, a4, y12
2434
2435         FMSUBX  y13, alpha3i, a6, y13
2436         FMADDX  y14, alpha3r, a6, y14
2437         FMSUBX  y15, alpha3i, a8, y15
2438         FMADDX  y16, alpha3r, a8, y16
2439
2440         LFD     a2,  1 * SIZE(AO4)
2441         LFD     a4,  3 * SIZE(AO4)
2442         LFD     a6,  5 * SIZE(AO4)
2443         LFD     a8,  7 * SIZE(AO4)
2444
2445         FMADD   y01, alpha4r, a1, y01
2446         FMADD   y02, alpha4i, a1, y02
2447         FMADD   y03, alpha4r, a3, y03
2448         FMADD   y04, alpha4i, a3, y04
2449
2450         FMADD   y05, alpha4r, a5, y05
2451         FMADD   y06, alpha4i, a5, y06
2452         FMADD   y07, alpha4r, a7, y07
2453         FMADD   y08, alpha4i, a7, y08
2454
2455         LFD     a1,  8 * SIZE(AO4)
2456         LFD     a3, 10 * SIZE(AO4)
2457         LFD     a5, 12 * SIZE(AO4)
2458         LFD     a7, 14 * SIZE(AO4)
2459
2460         FMSUBX  y01, alpha4i, a2, y01
2461         FMADDX  y02, alpha4r, a2, y02
2462         FMSUBX  y03, alpha4i, a4, y03
2463         FMADDX  y04, alpha4r, a4, y04
2464
2465         STFD    y01, 0 * SIZE(Y2)
2466         nop
2467         STFD    y02, 1 * SIZE(Y2)
2468         add     Y2, Y2, INCY
2469
2470         LFD     y01, 0 * SIZE(Y1)
2471         nop
2472         LFD     y02, 1 * SIZE(Y1)
2473         add     Y1, Y1, INCY
2474
2475         STFD    y03, 0 * SIZE(Y2)
2476         nop
2477         STFD    y04, 1 * SIZE(Y2)
2478         add     Y2, Y2, INCY
2479
2480         LFD     y03, 0 * SIZE(Y1)
2481         nop
2482         LFD     y04, 1 * SIZE(Y1)
2483         add     Y1, Y1, INCY
2484
2485         FMSUBX  y05, alpha4i, a6, y05
2486         FMADDX  y06, alpha4r, a6, y06
2487         FMSUBX  y07, alpha4i, a8, y07
2488         FMADDX  y08, alpha4r, a8, y08
2489
2490         LFD     a2,  9 * SIZE(AO4)
2491         LFD     a4, 11 * SIZE(AO4)
2492         LFD     a6, 13 * SIZE(AO4)
2493         LFD     a8, 15 * SIZE(AO4)
2494
2495         addi    AO4, AO4, 16 * SIZE
2496         nop
2497         DCBT(AO4, PREA)
2498         nop
2499
2500         STFD    y05, 0 * SIZE(Y2)
2501         nop
2502         STFD    y06, 1 * SIZE(Y2)
2503         add     Y2, Y2, INCY
2504
2505         LFD     y05, 0 * SIZE(Y1)
2506         nop
2507         LFD     y06, 1 * SIZE(Y1)
2508         add     Y1, Y1, INCY
2509
2510         STFD    y07, 0 * SIZE(Y2)
2511         nop
2512         STFD    y08, 1 * SIZE(Y2)
2513         add     Y2, Y2, INCY
2514
2515         LFD     y07, 0 * SIZE(Y1)
2516         nop
2517         LFD     y08, 1 * SIZE(Y1)
2518         add     Y1, Y1, INCY
2519
2520         FMADD   y09, alpha4r, a1, y09
2521         FMADD   y10, alpha4i, a1, y10
2522         FMADD   y11, alpha4r, a3, y11
2523         FMADD   y12, alpha4i, a3, y12
2524
2525         FMADD   y13, alpha4r, a5, y13
2526         FMADD   y14, alpha4i, a5, y14
2527         FMADD   y15, alpha4r, a7, y15
2528         FMADD   y16, alpha4i, a7, y16
2529
2530         LFD     a1,  0 * SIZE(AO1)
2531         LFD     a3,  2 * SIZE(AO1)
2532         LFD     a5,  4 * SIZE(AO1)
2533         LFD     a7,  6 * SIZE(AO1)
2534
2535         FMSUBX  y09, alpha4i, a2, y09
2536         FMADDX  y10, alpha4r, a2, y10
2537         FMSUBX  y11, alpha4i, a4, y11
2538         FMADDX  y12, alpha4r, a4, y12
2539
2540         STFD    y09, 0 * SIZE(Y2)
2541         nop
2542         STFD    y10, 1 * SIZE(Y2)
2543         add     Y2, Y2, INCY
2544
2545         LFD     y09, 0 * SIZE(Y1)
2546         nop
2547         LFD     y10, 1 * SIZE(Y1)
2548         add     Y1, Y1, INCY
2549
2550         STFD    y11, 0 * SIZE(Y2)
2551         nop
2552         STFD    y12, 1 * SIZE(Y2)
2553         add     Y2, Y2, INCY
2554
2555         LFD     y11, 0 * SIZE(Y1)
2556         nop
2557         LFD     y12, 1 * SIZE(Y1)
2558         add     Y1, Y1, INCY
2559
2560         FMSUBX  y13, alpha4i, a6, y13
2561         FMADDX  y14, alpha4r, a6, y14
2562         FMSUBX  y15, alpha4i, a8, y15
2563         FMADDX  y16, alpha4r, a8, y16
2564
2565         LFD     a2,  1 * SIZE(AO1)
2566         LFD     a4,  3 * SIZE(AO1)
2567         LFD     a6,  5 * SIZE(AO1)
2568         LFD     a8,  7 * SIZE(AO1)
2569
2570         STFD    y13, 0 * SIZE(Y2)
2571         nop
2572         STFD    y14, 1 * SIZE(Y2)
2573         add     Y2, Y2, INCY
2574
2575         LFD     y13, 0 * SIZE(Y1)
2576         nop
2577         LFD     y14, 1 * SIZE(Y1)
2578         add     Y1, Y1, INCY
2579
2580         STFD    y15, 0 * SIZE(Y2)
2581         nop
2582         STFD    y16, 1 * SIZE(Y2)
2583         add     Y2, Y2, INCY
2584
2585         LFD     y15, 0 * SIZE(Y1)
2586         nop
2587         LFD     y16, 1 * SIZE(Y1)
2588         add     Y1, Y1, INCY
2589
2590         DCBT(Y1, PREC)
2591         bdnz    LL(112)
2592         .align 4
2593
2594 LL(113):
2595         FMADD   y01, alpha1r, a1, y01
2596         FMADD   y02, alpha1i, a1, y02
2597         FMADD   y03, alpha1r, a3, y03
2598         FMADD   y04, alpha1i, a3, y04
2599
2600         FMADD   y05, alpha1r, a5, y05
2601         FMADD   y06, alpha1i, a5, y06
2602         FMADD   y07, alpha1r, a7, y07
2603         FMADD   y08, alpha1i, a7, y08
2604
2605         LFD     a1,  8 * SIZE(AO1)
2606         LFD     a3, 10 * SIZE(AO1)
2607         LFD     a5, 12 * SIZE(AO1)
2608         LFD     a7, 14 * SIZE(AO1)
2609
2610         FMSUBX  y01, alpha1i, a2, y01
2611         FMADDX  y02, alpha1r, a2, y02
2612         FMSUBX  y03, alpha1i, a4, y03
2613         FMADDX  y04, alpha1r, a4, y04
2614
2615         FMSUBX  y05, alpha1i, a6, y05
2616         FMADDX  y06, alpha1r, a6, y06
2617         FMSUBX  y07, alpha1i, a8, y07
2618         FMADDX  y08, alpha1r, a8, y08
2619
2620         LFD     a2,  9 * SIZE(AO1)
2621         LFD     a4, 11 * SIZE(AO1)
2622         LFD     a6, 13 * SIZE(AO1)
2623         LFD     a8, 15 * SIZE(AO1)
2624
2625         FMADD   y09, alpha1r, a1, y09
2626         FMADD   y10, alpha1i, a1, y10
2627         FMADD   y11, alpha1r, a3, y11
2628         FMADD   y12, alpha1i, a3, y12
2629
2630         FMADD   y13, alpha1r, a5, y13
2631         FMADD   y14, alpha1i, a5, y14
2632         FMADD   y15, alpha1r, a7, y15
2633         FMADD   y16, alpha1i, a7, y16
2634
2635         LFD     a1,  0 * SIZE(AO2)
2636         LFD     a3,  2 * SIZE(AO2)
2637         LFD     a5,  4 * SIZE(AO2)
2638         LFD     a7,  6 * SIZE(AO2)
2639
2640         FMSUBX  y09, alpha1i, a2, y09
2641         FMADDX  y10, alpha1r, a2, y10
2642         FMSUBX  y11, alpha1i, a4, y11
2643         FMADDX  y12, alpha1r, a4, y12
2644
2645         FMSUBX  y13, alpha1i, a6, y13
2646         FMADDX  y14, alpha1r, a6, y14
2647         FMSUBX  y15, alpha1i, a8, y15
2648         FMADDX  y16, alpha1r, a8, y16
2649
2650         LFD     a2,  1 * SIZE(AO2)
2651         LFD     a4,  3 * SIZE(AO2)
2652         LFD     a6,  5 * SIZE(AO2)
2653         LFD     a8,  7 * SIZE(AO2)
2654
2655         FMADD   y01, alpha2r, a1, y01
2656         FMADD   y02, alpha2i, a1, y02
2657         FMADD   y03, alpha2r, a3, y03
2658         FMADD   y04, alpha2i, a3, y04
2659
2660         FMADD   y05, alpha2r, a5, y05
2661         FMADD   y06, alpha2i, a5, y06
2662         FMADD   y07, alpha2r, a7, y07
2663         FMADD   y08, alpha2i, a7, y08
2664
2665         LFD     a1,  8 * SIZE(AO2)
2666         LFD     a3, 10 * SIZE(AO2)
2667         LFD     a5, 12 * SIZE(AO2)
2668         LFD     a7, 14 * SIZE(AO2)
2669
2670         FMSUBX  y01, alpha2i, a2, y01
2671         FMADDX  y02, alpha2r, a2, y02
2672         FMSUBX  y03, alpha2i, a4, y03
2673         FMADDX  y04, alpha2r, a4, y04
2674
2675         FMSUBX  y05, alpha2i, a6, y05
2676         FMADDX  y06, alpha2r, a6, y06
2677         FMSUBX  y07, alpha2i, a8, y07
2678         FMADDX  y08, alpha2r, a8, y08
2679
2680         LFD     a2,  9 * SIZE(AO2)
2681         LFD     a4, 11 * SIZE(AO2)
2682         LFD     a6, 13 * SIZE(AO2)
2683         LFD     a8, 15 * SIZE(AO2)
2684
2685         FMADD   y09, alpha2r, a1, y09
2686         FMADD   y10, alpha2i, a1, y10
2687         FMADD   y11, alpha2r, a3, y11
2688         FMADD   y12, alpha2i, a3, y12
2689
2690         FMADD   y13, alpha2r, a5, y13
2691         FMADD   y14, alpha2i, a5, y14
2692         FMADD   y15, alpha2r, a7, y15
2693         FMADD   y16, alpha2i, a7, y16
2694
2695         LFD     a1,  0 * SIZE(AO3)
2696         LFD     a3,  2 * SIZE(AO3)
2697         LFD     a5,  4 * SIZE(AO3)
2698         LFD     a7,  6 * SIZE(AO3)
2699
2700         FMSUBX  y09, alpha2i, a2, y09
2701         FMADDX  y10, alpha2r, a2, y10
2702         FMSUBX  y11, alpha2i, a4, y11
2703         FMADDX  y12, alpha2r, a4, y12
2704
2705         FMSUBX  y13, alpha2i, a6, y13
2706         FMADDX  y14, alpha2r, a6, y14
2707         FMSUBX  y15, alpha2i, a8, y15
2708         FMADDX  y16, alpha2r, a8, y16
2709
2710         LFD     a2,  1 * SIZE(AO3)
2711         LFD     a4,  3 * SIZE(AO3)
2712         LFD     a6,  5 * SIZE(AO3)
2713         LFD     a8,  7 * SIZE(AO3)
2714
2715         FMADD   y01, alpha3r, a1, y01
2716         FMADD   y02, alpha3i, a1, y02
2717         FMADD   y03, alpha3r, a3, y03
2718         FMADD   y04, alpha3i, a3, y04
2719
2720         FMADD   y05, alpha3r, a5, y05
2721         FMADD   y06, alpha3i, a5, y06
2722         FMADD   y07, alpha3r, a7, y07
2723         FMADD   y08, alpha3i, a7, y08
2724
2725         LFD     a1,  8 * SIZE(AO3)
2726         LFD     a3, 10 * SIZE(AO3)
2727         LFD     a5, 12 * SIZE(AO3)
2728         LFD     a7, 14 * SIZE(AO3)
2729
2730         FMSUBX  y01, alpha3i, a2, y01
2731         FMADDX  y02, alpha3r, a2, y02
2732         FMSUBX  y03, alpha3i, a4, y03
2733         FMADDX  y04, alpha3r, a4, y04
2734
2735         FMSUBX  y05, alpha3i, a6, y05
2736         FMADDX  y06, alpha3r, a6, y06
2737         FMSUBX  y07, alpha3i, a8, y07
2738         FMADDX  y08, alpha3r, a8, y08
2739
2740         LFD     a2,  9 * SIZE(AO3)
2741         LFD     a4, 11 * SIZE(AO3)
2742         LFD     a6, 13 * SIZE(AO3)
2743         LFD     a8, 15 * SIZE(AO3)
2744
2745         FMADD   y09, alpha3r, a1, y09
2746         FMADD   y10, alpha3i, a1, y10
2747         FMADD   y11, alpha3r, a3, y11
2748         FMADD   y12, alpha3i, a3, y12
2749
2750         FMADD   y13, alpha3r, a5, y13
2751         FMADD   y14, alpha3i, a5, y14
2752         FMADD   y15, alpha3r, a7, y15
2753         FMADD   y16, alpha3i, a7, y16
2754
2755         LFD     a1,  0 * SIZE(AO4)
2756         LFD     a3,  2 * SIZE(AO4)
2757         LFD     a5,  4 * SIZE(AO4)
2758         LFD     a7,  6 * SIZE(AO4)
2759
2760         FMSUBX  y09, alpha3i, a2, y09
2761         FMADDX  y10, alpha3r, a2, y10
2762         FMSUBX  y11, alpha3i, a4, y11
2763         FMADDX  y12, alpha3r, a4, y12
2764
2765         FMSUBX  y13, alpha3i, a6, y13
2766         FMADDX  y14, alpha3r, a6, y14
2767         FMSUBX  y15, alpha3i, a8, y15
2768         FMADDX  y16, alpha3r, a8, y16
2769
2770         LFD     a2,  1 * SIZE(AO4)
2771         LFD     a4,  3 * SIZE(AO4)
2772         LFD     a6,  5 * SIZE(AO4)
2773         LFD     a8,  7 * SIZE(AO4)
2774
2775         FMADD   y01, alpha4r, a1, y01
2776         FMADD   y02, alpha4i, a1, y02
2777         FMADD   y03, alpha4r, a3, y03
2778         FMADD   y04, alpha4i, a3, y04
2779
2780         FMADD   y05, alpha4r, a5, y05
2781         FMADD   y06, alpha4i, a5, y06
2782         FMADD   y07, alpha4r, a7, y07
2783         FMADD   y08, alpha4i, a7, y08
2784
2785         LFD     a1,  8 * SIZE(AO4)
2786         LFD     a3, 10 * SIZE(AO4)
2787         LFD     a5, 12 * SIZE(AO4)
2788         LFD     a7, 14 * SIZE(AO4)
2789
2790         FMSUBX  y01, alpha4i, a2, y01
2791         FMADDX  y02, alpha4r, a2, y02
2792         FMSUBX  y03, alpha4i, a4, y03
2793         FMADDX  y04, alpha4r, a4, y04
2794
2795         STFD    y01, 0 * SIZE(Y2)
2796         nop
2797         STFD    y02, 1 * SIZE(Y2)
2798         add     Y2, Y2, INCY
2799
2800         STFD    y03, 0 * SIZE(Y2)
2801         nop
2802         STFD    y04, 1 * SIZE(Y2)
2803         add     Y2, Y2, INCY
2804
2805         FMSUBX  y05, alpha4i, a6, y05
2806         FMADDX  y06, alpha4r, a6, y06
2807         FMSUBX  y07, alpha4i, a8, y07
2808         FMADDX  y08, alpha4r, a8, y08
2809
2810         LFD     a2,  9 * SIZE(AO4)
2811         LFD     a4, 11 * SIZE(AO4)
2812         LFD     a6, 13 * SIZE(AO4)
2813         LFD     a8, 15 * SIZE(AO4)
2814
2815         STFD    y05, 0 * SIZE(Y2)
2816         nop
2817         STFD    y06, 1 * SIZE(Y2)
2818         add     Y2, Y2, INCY
2819
2820         STFD    y07, 0 * SIZE(Y2)
2821         nop
2822         STFD    y08, 1 * SIZE(Y2)
2823         add     Y2, Y2, INCY
2824
2825         FMADD   y09, alpha4r, a1, y09
2826         FMADD   y10, alpha4i, a1, y10
2827         FMADD   y11, alpha4r, a3, y11
2828         FMADD   y12, alpha4i, a3, y12
2829
2830         FMADD   y13, alpha4r, a5, y13
2831         FMADD   y14, alpha4i, a5, y14
2832         FMADD   y15, alpha4r, a7, y15
2833         FMADD   y16, alpha4i, a7, y16
2834
2835         FMSUBX  y09, alpha4i, a2, y09
2836         FMADDX  y10, alpha4r, a2, y10
2837         FMSUBX  y11, alpha4i, a4, y11
2838         FMADDX  y12, alpha4r, a4, y12
2839
2840         STFD    y09, 0 * SIZE(Y2)
2841         nop
2842         STFD    y10, 1 * SIZE(Y2)
2843         add     Y2, Y2, INCY
2844
2845         STFD    y11, 0 * SIZE(Y2)
2846         nop
2847         STFD    y12, 1 * SIZE(Y2)
2848         add     Y2, Y2, INCY
2849
2850         FMSUBX  y13, alpha4i, a6, y13
2851         FMADDX  y14, alpha4r, a6, y14
2852         FMSUBX  y15, alpha4i, a8, y15
2853         FMADDX  y16, alpha4r, a8, y16
2854
2855         STFD    y13, 0 * SIZE(Y2)
2856         nop
2857         STFD    y14, 1 * SIZE(Y2)
2858         add     Y2, Y2, INCY
2859
2860         STFD    y15, 0 * SIZE(Y2)
2861         nop
2862         STFD    y16, 1 * SIZE(Y2)
2863         add     Y2, Y2, INCY
2864
2865         addi    AO1, AO1, 16 * SIZE
2866         addi    AO2, AO2, 16 * SIZE
2867         addi    AO3, AO3, 16 * SIZE
2868         addi    AO4, AO4, 16 * SIZE
2869         .align 4
2870
2871 LL(115):
2872         andi.   r0, M, 7
2873         ble     LL(119)
2874         andi.   r0, M, 4
2875         ble     LL(116)
2876
2877         LFD     y01, 0 * SIZE(Y1)
2878         LFD     y02, 1 * SIZE(Y1)
2879         add     Y1, Y1, INCY
2880         LFD     y03, 0 * SIZE(Y1)
2881         LFD     y04, 1 * SIZE(Y1)
2882         add     Y1, Y1, INCY
2883
2884         LFD     a1,  0 * SIZE(AO1)
2885         LFD     a3,  2 * SIZE(AO1)
2886         LFD     a5,  4 * SIZE(AO1)
2887         LFD     a7,  6 * SIZE(AO1)
2888
2889         LFD     y05, 0 * SIZE(Y1)
2890         LFD     y06, 1 * SIZE(Y1)
2891         add     Y1, Y1, INCY
2892         LFD     y07, 0 * SIZE(Y1)
2893         LFD     y08, 1 * SIZE(Y1)
2894         add     Y1, Y1, INCY
2895
2896         LFD     a2,  1 * SIZE(AO1)
2897         LFD     a4,  3 * SIZE(AO1)
2898         LFD     a6,  5 * SIZE(AO1)
2899         LFD     a8,  7 * SIZE(AO1)
2900
2901         FMADD   y01, alpha1r, a1, y01
2902         FMADD   y02, alpha1i, a1, y02
2903         FMADD   y03, alpha1r, a3, y03
2904         FMADD   y04, alpha1i, a3, y04
2905
2906         FMADD   y05, alpha1r, a5, y05
2907         FMADD   y06, alpha1i, a5, y06
2908         FMADD   y07, alpha1r, a7, y07
2909         FMADD   y08, alpha1i, a7, y08
2910
2911         LFD     a1,  0 * SIZE(AO2)
2912         LFD     a3,  2 * SIZE(AO2)
2913         LFD     a5,  4 * SIZE(AO2)
2914         LFD     a7,  6 * SIZE(AO2)
2915
2916         FMSUBX  y01, alpha1i, a2, y01
2917         FMADDX  y02, alpha1r, a2, y02
2918         FMSUBX  y03, alpha1i, a4, y03
2919         FMADDX  y04, alpha1r, a4, y04
2920
2921         FMSUBX  y05, alpha1i, a6, y05
2922         FMADDX  y06, alpha1r, a6, y06
2923         FMSUBX  y07, alpha1i, a8, y07
2924         FMADDX  y08, alpha1r, a8, y08
2925
2926         LFD     a2,  1 * SIZE(AO2)
2927         LFD     a4,  3 * SIZE(AO2)
2928         LFD     a6,  5 * SIZE(AO2)
2929         LFD     a8,  7 * SIZE(AO2)
2930
2931         FMADD   y01, alpha2r, a1, y01
2932         FMADD   y02, alpha2i, a1, y02
2933         FMADD   y03, alpha2r, a3, y03
2934         FMADD   y04, alpha2i, a3, y04
2935
2936         FMADD   y05, alpha2r, a5, y05
2937         FMADD   y06, alpha2i, a5, y06
2938         FMADD   y07, alpha2r, a7, y07
2939         FMADD   y08, alpha2i, a7, y08
2940
2941         LFD     a1,  0 * SIZE(AO3)
2942         LFD     a3,  2 * SIZE(AO3)
2943         LFD     a5,  4 * SIZE(AO3)
2944         LFD     a7,  6 * SIZE(AO3)
2945
2946         FMSUBX  y01, alpha2i, a2, y01
2947         FMADDX  y02, alpha2r, a2, y02
2948         FMSUBX  y03, alpha2i, a4, y03
2949         FMADDX  y04, alpha2r, a4, y04
2950
2951         FMSUBX  y05, alpha2i, a6, y05
2952         FMADDX  y06, alpha2r, a6, y06
2953         FMSUBX  y07, alpha2i, a8, y07
2954         FMADDX  y08, alpha2r, a8, y08
2955
2956         LFD     a2,  1 * SIZE(AO3)
2957         LFD     a4,  3 * SIZE(AO3)
2958         LFD     a6,  5 * SIZE(AO3)
2959         LFD     a8,  7 * SIZE(AO3)
2960
2961         FMADD   y01, alpha3r, a1, y01
2962         FMADD   y02, alpha3i, a1, y02
2963         FMADD   y03, alpha3r, a3, y03
2964         FMADD   y04, alpha3i, a3, y04
2965
2966         FMADD   y05, alpha3r, a5, y05
2967         FMADD   y06, alpha3i, a5, y06
2968         FMADD   y07, alpha3r, a7, y07
2969         FMADD   y08, alpha3i, a7, y08
2970
2971         LFD     a1,  0 * SIZE(AO4)
2972         LFD     a3,  2 * SIZE(AO4)
2973         LFD     a5,  4 * SIZE(AO4)
2974         LFD     a7,  6 * SIZE(AO4)
2975
2976         FMSUBX  y01, alpha3i, a2, y01
2977         FMADDX  y02, alpha3r, a2, y02
2978         FMSUBX  y03, alpha3i, a4, y03
2979         FMADDX  y04, alpha3r, a4, y04
2980
2981         FMSUBX  y05, alpha3i, a6, y05
2982         FMADDX  y06, alpha3r, a6, y06
2983         FMSUBX  y07, alpha3i, a8, y07
2984         FMADDX  y08, alpha3r, a8, y08
2985
2986         LFD     a2,  1 * SIZE(AO4)
2987         LFD     a4,  3 * SIZE(AO4)
2988         LFD     a6,  5 * SIZE(AO4)
2989         LFD     a8,  7 * SIZE(AO4)
2990
2991         FMADD   y01, alpha4r, a1, y01
2992         FMADD   y02, alpha4i, a1, y02
2993         FMADD   y03, alpha4r, a3, y03
2994         FMADD   y04, alpha4i, a3, y04
2995
2996         FMADD   y05, alpha4r, a5, y05
2997         FMADD   y06, alpha4i, a5, y06
2998         FMADD   y07, alpha4r, a7, y07
2999         FMADD   y08, alpha4i, a7, y08
3000
3001         FMSUBX  y01, alpha4i, a2, y01
3002         FMADDX  y02, alpha4r, a2, y02
3003         FMSUBX  y03, alpha4i, a4, y03
3004         FMADDX  y04, alpha4r, a4, y04
3005
3006         FMSUBX  y05, alpha4i, a6, y05
3007         FMADDX  y06, alpha4r, a6, y06
3008         FMSUBX  y07, alpha4i, a8, y07
3009         FMADDX  y08, alpha4r, a8, y08
3010
3011         STFD    y01, 0 * SIZE(Y2)
3012         addi    AO1, AO1, 8 * SIZE
3013         STFD    y02, 1 * SIZE(Y2)
3014         add     Y2, Y2, INCY
3015
3016         STFD    y03, 0 * SIZE(Y2)
3017         addi    AO2, AO2, 8 * SIZE
3018         STFD    y04, 1 * SIZE(Y2)
3019         add     Y2, Y2, INCY
3020
3021         STFD    y05, 0 * SIZE(Y2)
3022         addi    AO3, AO3, 8 * SIZE
3023         STFD    y06, 1 * SIZE(Y2)
3024         add     Y2, Y2, INCY
3025
3026         STFD    y07, 0 * SIZE(Y2)
3027         addi    AO4, AO4, 8 * SIZE
3028         STFD    y08, 1 * SIZE(Y2)
3029         add     Y2, Y2, INCY
3030         .align 4
3031
3032 LL(116):
3033         andi.   r0, M, 2
3034         ble     LL(117)
3035
3036         LFD     a1,  0 * SIZE(AO1)
3037         LFD     a2,  1 * SIZE(AO1)
3038         LFD     a3,  2 * SIZE(AO1)
3039         LFD     a4,  3 * SIZE(AO1)
3040
3041         LFD     y01, 0 * SIZE(Y1)
3042         LFD     y02, 1 * SIZE(Y1)
3043         add     Y1, Y1, INCY
3044         LFD     y03, 0 * SIZE(Y1)
3045         LFD     y04, 1 * SIZE(Y1)
3046         add     Y1, Y1, INCY
3047
3048         LFD     a5,  0 * SIZE(AO2)
3049         LFD     a6,  1 * SIZE(AO2)
3050         LFD     a7,  2 * SIZE(AO2)
3051         LFD     a8,  3 * SIZE(AO2)
3052
3053         FMADD   y01, alpha1r, a1, y01
3054         FMADD   y02, alpha1i, a1, y02
3055         FMADD   y03, alpha1r, a3, y03
3056         FMADD   y04, alpha1i, a3, y04
3057
3058         FMSUBX  y01, alpha1i, a2, y01
3059         FMADDX  y02, alpha1r, a2, y02
3060         FMSUBX  y03, alpha1i, a4, y03
3061         FMADDX  y04, alpha1r, a4, y04
3062
3063         LFD     a1,  0 * SIZE(AO3)
3064         LFD     a2,  1 * SIZE(AO3)
3065         LFD     a3,  2 * SIZE(AO3)
3066         LFD     a4,  3 * SIZE(AO3)
3067
3068         FMADD   y01, alpha2r, a5, y01
3069         FMADD   y02, alpha2i, a5, y02
3070         FMADD   y03, alpha2r, a7, y03
3071         FMADD   y04, alpha2i, a7, y04
3072
3073         FMSUBX  y01, alpha2i, a6, y01
3074         FMADDX  y02, alpha2r, a6, y02
3075         FMSUBX  y03, alpha2i, a8, y03
3076         FMADDX  y04, alpha2r, a8, y04
3077
3078         LFD     a5,  0 * SIZE(AO4)
3079         LFD     a6,  1 * SIZE(AO4)
3080         LFD     a7,  2 * SIZE(AO4)
3081         LFD     a8,  3 * SIZE(AO4)
3082
3083         FMADD   y01, alpha3r, a1, y01
3084         FMADD   y02, alpha3i, a1, y02
3085         FMADD   y03, alpha3r, a3, y03
3086         FMADD   y04, alpha3i, a3, y04
3087
3088         FMSUBX  y01, alpha3i, a2, y01
3089         FMADDX  y02, alpha3r, a2, y02
3090         FMSUBX  y03, alpha3i, a4, y03
3091         FMADDX  y04, alpha3r, a4, y04
3092
3093         FMADD   y01, alpha4r, a5, y01
3094         FMADD   y02, alpha4i, a5, y02
3095         FMADD   y03, alpha4r, a7, y03
3096         FMADD   y04, alpha4i, a7, y04
3097
3098         FMSUBX  y01, alpha4i, a6, y01
3099         FMADDX  y02, alpha4r, a6, y02
3100         FMSUBX  y03, alpha4i, a8, y03
3101         FMADDX  y04, alpha4r, a8, y04
3102
3103         STFD    y01, 0 * SIZE(Y2)
3104         addi    AO1, AO1, 4 * SIZE
3105         STFD    y02, 1 * SIZE(Y2)
3106         add     Y2, Y2, INCY
3107
3108         STFD    y03, 0 * SIZE(Y2)
3109         addi    AO2, AO2, 4 * SIZE
3110         STFD    y04, 1 * SIZE(Y2)
3111         add     Y2, Y2, INCY
3112
3113         addi    AO3, AO3, 4 * SIZE
3114         addi    AO4, AO4, 4 * SIZE
3115         .align 4
3116
3117 LL(117):
3118         andi.   r0, M, 1
3119         ble     LL(119)
3120
3121         LFD     y01, 0 * SIZE(Y1)
3122         LFD     y02, 1 * SIZE(Y1)
3123         add     Y1, Y1, INCY
3124
3125         LFD     a1,  0 * SIZE(AO1)
3126         LFD     a2,  1 * SIZE(AO1)
3127         LFD     a3,  0 * SIZE(AO2)
3128         LFD     a4,  1 * SIZE(AO2)
3129         LFD     a5,  0 * SIZE(AO3)
3130         LFD     a6,  1 * SIZE(AO3)
3131         LFD     a7,  0 * SIZE(AO4)
3132         LFD     a8,  1 * SIZE(AO4)
3133
3134         FMADD   y01, alpha1r, a1, y01
3135         FMADD   y02, alpha1i, a1, y02
3136         FMSUBX  y01, alpha1i, a2, y01
3137         FMADDX  y02, alpha1r, a2, y02
3138
3139         FMADD   y01, alpha2r, a3, y01
3140         FMADD   y02, alpha2i, a3, y02
3141         FMSUBX  y01, alpha2i, a4, y01
3142         FMADDX  y02, alpha2r, a4, y02
3143
3144         FMADD   y01, alpha3r, a5, y01
3145         FMADD   y02, alpha3i, a5, y02
3146         FMSUBX  y01, alpha3i, a6, y01
3147         FMADDX  y02, alpha3r, a6, y02
3148
3149         FMADD   y01, alpha4r, a7, y01
3150         FMADD   y02, alpha4i, a7, y02
3151         FMSUBX  y01, alpha4i, a8, y01
3152         FMADDX  y02, alpha4r, a8, y02
3153
3154         STFD    y01, 0 * SIZE(Y2)
3155         STFD    y02, 1 * SIZE(Y2)
3156         add     Y2, Y2, INCY
3157         .align 4
3158
3159 LL(119):
3160         addi    J, J, -1
3161         cmpi    cr0, 0, J, 0
3162         bgt     LL(111)
3163         .align 4
3164
3165 LL(120):
3166         andi.   J, N, 2
3167         ble     LL(130)
3168         .align 4
3169
3170 LL(121):
3171         lfd     alpha_r, ALPHA_R
3172         lfd     alpha_i, ALPHA_I
3173
3174         LFD     a1, 0 * SIZE(X)
3175         LFD     a2, 1 * SIZE(X)
3176         add     X, X, INCX
3177         LFD     a3, 0 * SIZE(X)
3178         LFD     a4, 1 * SIZE(X)
3179         add     X, X, INCX
3180
3181         FMUL    alpha1r, alpha_r, a1
3182         FMUL    alpha1i, alpha_i, a1
3183         FMUL    alpha2r, alpha_r, a3
3184         FMUL    alpha2i, alpha_i, a3
3185
3186         FMSUBR  alpha1r, alpha_i, a2, alpha1r
3187         FMADDR  alpha1i, alpha_r, a2, alpha1i
3188         FMSUBR  alpha2r, alpha_i, a4, alpha2r
3189         FMADDR  alpha2i, alpha_r, a4, alpha2i
3190
3191         mr      AO1, A
3192         add     AO2, A,   LDA
3193         add     A,   AO2, LDA
3194
3195         mr      Y1, Y
3196         mr      Y2, Y
3197
3198         srawi.  r0,  M, 3
3199         mtspr   CTR, r0
3200         ble     LL(125)
3201         .align 4
3202
3203         LFD     y01, 0 * SIZE(Y1)
3204         LFD     y02, 1 * SIZE(Y1)
3205         add     Y1, Y1, INCY
3206         LFD     y03, 0 * SIZE(Y1)
3207         LFD     y04, 1 * SIZE(Y1)
3208         add     Y1, Y1, INCY
3209
3210         LFD     a1,  0 * SIZE(AO1)
3211         LFD     a3,  2 * SIZE(AO1)
3212         LFD     a5,  4 * SIZE(AO1)
3213         LFD     a7,  6 * SIZE(AO1)
3214
3215         LFD     y05, 0 * SIZE(Y1)
3216         LFD     y06, 1 * SIZE(Y1)
3217         add     Y1, Y1, INCY
3218         LFD     y07, 0 * SIZE(Y1)
3219         LFD     y08, 1 * SIZE(Y1)
3220         add     Y1, Y1, INCY
3221
3222         LFD     a2,  1 * SIZE(AO1)
3223         LFD     a4,  3 * SIZE(AO1)
3224         LFD     a6,  5 * SIZE(AO1)
3225         LFD     a8,  7 * SIZE(AO1)
3226
3227         LFD     y09, 0 * SIZE(Y1)
3228         LFD     y10, 1 * SIZE(Y1)
3229         add     Y1, Y1, INCY
3230         LFD     y11, 0 * SIZE(Y1)
3231         LFD     y12, 1 * SIZE(Y1)
3232         add     Y1, Y1, INCY
3233         LFD     y13, 0 * SIZE(Y1)
3234         LFD     y14, 1 * SIZE(Y1)
3235         add     Y1, Y1, INCY
3236         LFD     y15, 0 * SIZE(Y1)
3237         LFD     y16, 1 * SIZE(Y1)
3238         add     Y1, Y1, INCY
3239
3240         bdz     LL(123)
3241         .align 4
3242
3243 LL(122):
3244         FMADD   y01, alpha1r, a1, y01
3245         FMADD   y02, alpha1i, a1, y02
3246         FMADD   y03, alpha1r, a3, y03
3247         FMADD   y04, alpha1i, a3, y04
3248
3249         FMADD   y05, alpha1r, a5, y05
3250         FMADD   y06, alpha1i, a5, y06
3251         FMADD   y07, alpha1r, a7, y07
3252         FMADD   y08, alpha1i, a7, y08
3253
3254         LFD     a1,  8 * SIZE(AO1)
3255         LFD     a3, 10 * SIZE(AO1)
3256         LFD     a5, 12 * SIZE(AO1)
3257         LFD     a7, 14 * SIZE(AO1)
3258
3259         FMSUBX  y01, alpha1i, a2, y01
3260         FMADDX  y02, alpha1r, a2, y02
3261         FMSUBX  y03, alpha1i, a4, y03
3262         FMADDX  y04, alpha1r, a4, y04
3263
3264         FMSUBX  y05, alpha1i, a6, y05
3265         FMADDX  y06, alpha1r, a6, y06
3266         FMSUBX  y07, alpha1i, a8, y07
3267         FMADDX  y08, alpha1r, a8, y08
3268
3269         LFD     a2,  9 * SIZE(AO1)
3270         LFD     a4, 11 * SIZE(AO1)
3271         LFD     a6, 13 * SIZE(AO1)
3272         LFD     a8, 15 * SIZE(AO1)
3273
3274         addi    AO1, AO1, 16 * SIZE
3275         nop
3276         DCBT(AO1, PREA)
3277         nop
3278
3279         FMADD   y09, alpha1r, a1, y09
3280         FMADD   y10, alpha1i, a1, y10
3281         FMADD   y11, alpha1r, a3, y11
3282         FMADD   y12, alpha1i, a3, y12
3283
3284         FMADD   y13, alpha1r, a5, y13
3285         FMADD   y14, alpha1i, a5, y14
3286         FMADD   y15, alpha1r, a7, y15
3287         FMADD   y16, alpha1i, a7, y16
3288
3289         LFD     a1,  0 * SIZE(AO2)
3290         LFD     a3,  2 * SIZE(AO2)
3291         LFD     a5,  4 * SIZE(AO2)
3292         LFD     a7,  6 * SIZE(AO2)
3293
3294         FMSUBX  y09, alpha1i, a2, y09
3295         FMADDX  y10, alpha1r, a2, y10
3296         FMSUBX  y11, alpha1i, a4, y11
3297         FMADDX  y12, alpha1r, a4, y12
3298
3299         FMSUBX  y13, alpha1i, a6, y13
3300         FMADDX  y14, alpha1r, a6, y14
3301         FMSUBX  y15, alpha1i, a8, y15
3302         FMADDX  y16, alpha1r, a8, y16
3303
3304         LFD     a2,  1 * SIZE(AO2)
3305         LFD     a4,  3 * SIZE(AO2)
3306         LFD     a6,  5 * SIZE(AO2)
3307         LFD     a8,  7 * SIZE(AO2)
3308
3309         FMADD   y01, alpha2r, a1, y01
3310         FMADD   y02, alpha2i, a1, y02
3311         FMADD   y03, alpha2r, a3, y03
3312         FMADD   y04, alpha2i, a3, y04
3313
3314         FMADD   y05, alpha2r, a5, y05
3315         FMADD   y06, alpha2i, a5, y06
3316         FMADD   y07, alpha2r, a7, y07
3317         FMADD   y08, alpha2i, a7, y08
3318
3319         LFD     a1,  8 * SIZE(AO2)
3320         LFD     a3, 10 * SIZE(AO2)
3321         LFD     a5, 12 * SIZE(AO2)
3322         LFD     a7, 14 * SIZE(AO2)
3323
3324         FMSUBX  y01, alpha2i, a2, y01
3325         FMADDX  y02, alpha2r, a2, y02
3326         FMSUBX  y03, alpha2i, a4, y03
3327         FMADDX  y04, alpha2r, a4, y04
3328
3329         STFD    y01, 0 * SIZE(Y2)
3330         nop
3331         STFD    y02, 1 * SIZE(Y2)
3332         add     Y2, Y2, INCY
3333
3334         LFD     y01, 0 * SIZE(Y1)
3335         nop
3336         LFD     y02, 1 * SIZE(Y1)
3337         add     Y1, Y1, INCY
3338
3339         STFD    y03, 0 * SIZE(Y2)
3340         nop
3341         STFD    y04, 1 * SIZE(Y2)
3342         add     Y2, Y2, INCY
3343
3344         LFD     y03, 0 * SIZE(Y1)
3345         nop
3346         LFD     y04, 1 * SIZE(Y1)
3347         add     Y1, Y1, INCY
3348
3349         FMSUBX  y05, alpha2i, a6, y05
3350         FMADDX  y06, alpha2r, a6, y06
3351         FMSUBX  y07, alpha2i, a8, y07
3352         FMADDX  y08, alpha2r, a8, y08
3353
3354         LFD     a2,  9 * SIZE(AO2)
3355         LFD     a4, 11 * SIZE(AO2)
3356         LFD     a6, 13 * SIZE(AO2)
3357         LFD     a8, 15 * SIZE(AO2)
3358
3359         addi    AO2, AO2, 16 * SIZE
3360         nop
3361         DCBT(AO2, PREA)
3362         nop
3363
3364         STFD    y05, 0 * SIZE(Y2)
3365         nop
3366         STFD    y06, 1 * SIZE(Y2)
3367         add     Y2, Y2, INCY
3368
3369         LFD     y05, 0 * SIZE(Y1)
3370         nop
3371         LFD     y06, 1 * SIZE(Y1)
3372         add     Y1, Y1, INCY
3373
3374         STFD    y07, 0 * SIZE(Y2)
3375         nop
3376         STFD    y08, 1 * SIZE(Y2)
3377         add     Y2, Y2, INCY
3378
3379         LFD     y07, 0 * SIZE(Y1)
3380         nop
3381         LFD     y08, 1 * SIZE(Y1)
3382         add     Y1, Y1, INCY
3383
3384         FMADD   y09, alpha2r, a1, y09
3385         FMADD   y10, alpha2i, a1, y10
3386         FMADD   y11, alpha2r, a3, y11
3387         FMADD   y12, alpha2i, a3, y12
3388
3389         FMADD   y13, alpha2r, a5, y13
3390         FMADD   y14, alpha2i, a5, y14
3391         FMADD   y15, alpha2r, a7, y15
3392         FMADD   y16, alpha2i, a7, y16
3393
3394         LFD     a1,  0 * SIZE(AO1)
3395         LFD     a3,  2 * SIZE(AO1)
3396         LFD     a5,  4 * SIZE(AO1)
3397         LFD     a7,  6 * SIZE(AO1)
3398
3399         FMSUBX  y09, alpha2i, a2, y09
3400         FMADDX  y10, alpha2r, a2, y10
3401         FMSUBX  y11, alpha2i, a4, y11
3402         FMADDX  y12, alpha2r, a4, y12
3403
3404         STFD    y09, 0 * SIZE(Y2)
3405         nop
3406         STFD    y10, 1 * SIZE(Y2)
3407         add     Y2, Y2, INCY
3408
3409         LFD     y09, 0 * SIZE(Y1)
3410         nop
3411         LFD     y10, 1 * SIZE(Y1)
3412         add     Y1, Y1, INCY
3413
3414         STFD    y11, 0 * SIZE(Y2)
3415         nop
3416         STFD    y12, 1 * SIZE(Y2)
3417         add     Y2, Y2, INCY
3418
3419         LFD     y11, 0 * SIZE(Y1)
3420         nop
3421         LFD     y12, 1 * SIZE(Y1)
3422         add     Y1, Y1, INCY
3423
3424         FMSUBX  y13, alpha2i, a6, y13
3425         FMADDX  y14, alpha2r, a6, y14
3426         FMSUBX  y15, alpha2i, a8, y15
3427         FMADDX  y16, alpha2r, a8, y16
3428
3429         LFD     a2,  1 * SIZE(AO1)
3430         LFD     a4,  3 * SIZE(AO1)
3431         LFD     a6,  5 * SIZE(AO1)
3432         LFD     a8,  7 * SIZE(AO1)
3433
3434         STFD    y13, 0 * SIZE(Y2)
3435         nop
3436         STFD    y14, 1 * SIZE(Y2)
3437         add     Y2, Y2, INCY
3438
3439         STFD    y15, 0 * SIZE(Y2)
3440         nop
3441         STFD    y16, 1 * SIZE(Y2)
3442         add     Y2, Y2, INCY
3443
3444         LFD     y13, 0 * SIZE(Y1)
3445         nop
3446         LFD     y14, 1 * SIZE(Y1)
3447         add     Y1, Y1, INCY
3448
3449         LFD     y15, 0 * SIZE(Y1)
3450         nop
3451         LFD     y16, 1 * SIZE(Y1)
3452         add     Y1, Y1, INCY
3453
3454         DCBT(Y1, PREC)
3455         bdnz    LL(122)
3456         .align 4
3457
3458 LL(123):
3459         FMADD   y01, alpha1r, a1, y01
3460         FMADD   y02, alpha1i, a1, y02
3461         FMADD   y03, alpha1r, a3, y03
3462         FMADD   y04, alpha1i, a3, y04
3463
3464         FMADD   y05, alpha1r, a5, y05
3465         FMADD   y06, alpha1i, a5, y06
3466         FMADD   y07, alpha1r, a7, y07
3467         FMADD   y08, alpha1i, a7, y08
3468
3469         LFD     a1,  8 * SIZE(AO1)
3470         LFD     a3, 10 * SIZE(AO1)
3471         LFD     a5, 12 * SIZE(AO1)
3472         LFD     a7, 14 * SIZE(AO1)
3473
3474         FMSUBX  y01, alpha1i, a2, y01
3475         FMADDX  y02, alpha1r, a2, y02
3476         FMSUBX  y03, alpha1i, a4, y03
3477         FMADDX  y04, alpha1r, a4, y04
3478
3479         FMSUBX  y05, alpha1i, a6, y05
3480         FMADDX  y06, alpha1r, a6, y06
3481         FMSUBX  y07, alpha1i, a8, y07
3482         FMADDX  y08, alpha1r, a8, y08
3483
3484         LFD     a2,  9 * SIZE(AO1)
3485         LFD     a4, 11 * SIZE(AO1)
3486         LFD     a6, 13 * SIZE(AO1)
3487         LFD     a8, 15 * SIZE(AO1)
3488
3489         FMADD   y09, alpha1r, a1, y09
3490         FMADD   y10, alpha1i, a1, y10
3491         FMADD   y11, alpha1r, a3, y11
3492         FMADD   y12, alpha1i, a3, y12
3493
3494         FMADD   y13, alpha1r, a5, y13
3495         FMADD   y14, alpha1i, a5, y14
3496         FMADD   y15, alpha1r, a7, y15
3497         FMADD   y16, alpha1i, a7, y16
3498
3499         LFD     a1,  0 * SIZE(AO2)
3500         LFD     a3,  2 * SIZE(AO2)
3501         LFD     a5,  4 * SIZE(AO2)
3502         LFD     a7,  6 * SIZE(AO2)
3503
3504         FMSUBX  y09, alpha1i, a2, y09
3505         FMADDX  y10, alpha1r, a2, y10
3506         FMSUBX  y11, alpha1i, a4, y11
3507         FMADDX  y12, alpha1r, a4, y12
3508
3509         FMSUBX  y13, alpha1i, a6, y13
3510         FMADDX  y14, alpha1r, a6, y14
3511         FMSUBX  y15, alpha1i, a8, y15
3512         FMADDX  y16, alpha1r, a8, y16
3513
3514         LFD     a2,  1 * SIZE(AO2)
3515         LFD     a4,  3 * SIZE(AO2)
3516         LFD     a6,  5 * SIZE(AO2)
3517         LFD     a8,  7 * SIZE(AO2)
3518
3519         FMADD   y01, alpha2r, a1, y01
3520         FMADD   y02, alpha2i, a1, y02
3521         FMADD   y03, alpha2r, a3, y03
3522         FMADD   y04, alpha2i, a3, y04
3523
3524         FMADD   y05, alpha2r, a5, y05
3525         FMADD   y06, alpha2i, a5, y06
3526         FMADD   y07, alpha2r, a7, y07
3527         FMADD   y08, alpha2i, a7, y08
3528
3529         LFD     a1,  8 * SIZE(AO2)
3530         LFD     a3, 10 * SIZE(AO2)
3531         LFD     a5, 12 * SIZE(AO2)
3532         LFD     a7, 14 * SIZE(AO2)
3533
3534         FMSUBX  y01, alpha2i, a2, y01
3535         FMADDX  y02, alpha2r, a2, y02
3536         FMSUBX  y03, alpha2i, a4, y03
3537         FMADDX  y04, alpha2r, a4, y04
3538
3539         STFD    y01, 0 * SIZE(Y2)
3540         addi    AO1, AO1, 16 * SIZE
3541         STFD    y02, 1 * SIZE(Y2)
3542         add     Y2, Y2, INCY
3543
3544         STFD    y03, 0 * SIZE(Y2)
3545         nop
3546         STFD    y04, 1 * SIZE(Y2)
3547         add     Y2, Y2, INCY
3548
3549         FMSUBX  y05, alpha2i, a6, y05
3550         FMADDX  y06, alpha2r, a6, y06
3551         FMSUBX  y07, alpha2i, a8, y07
3552         FMADDX  y08, alpha2r, a8, y08
3553
3554         LFD     a2,  9 * SIZE(AO2)
3555         LFD     a4, 11 * SIZE(AO2)
3556         LFD     a6, 13 * SIZE(AO2)
3557         LFD     a8, 15 * SIZE(AO2)
3558
3559         STFD    y05, 0 * SIZE(Y2)
3560         addi    AO2, AO2, 16 * SIZE
3561         STFD    y06, 1 * SIZE(Y2)
3562         add     Y2, Y2, INCY
3563
3564         STFD    y07, 0 * SIZE(Y2)
3565         nop
3566         STFD    y08, 1 * SIZE(Y2)
3567         add     Y2, Y2, INCY
3568
3569         FMADD   y09, alpha2r, a1, y09
3570         FMADD   y10, alpha2i, a1, y10
3571         FMADD   y11, alpha2r, a3, y11
3572         FMADD   y12, alpha2i, a3, y12
3573
3574         FMADD   y13, alpha2r, a5, y13
3575         FMADD   y14, alpha2i, a5, y14
3576         FMADD   y15, alpha2r, a7, y15
3577         FMADD   y16, alpha2i, a7, y16
3578
3579         FMSUBX  y09, alpha2i, a2, y09
3580         FMADDX  y10, alpha2r, a2, y10
3581         FMSUBX  y11, alpha2i, a4, y11
3582         FMADDX  y12, alpha2r, a4, y12
3583
3584         STFD    y09, 0 * SIZE(Y2)
3585         nop
3586         STFD    y10, 1 * SIZE(Y2)
3587         add     Y2, Y2, INCY
3588
3589         STFD    y11, 0 * SIZE(Y2)
3590         nop
3591         STFD    y12, 1 * SIZE(Y2)
3592         add     Y2, Y2, INCY
3593
3594         FMSUBX  y13, alpha2i, a6, y13
3595         FMADDX  y14, alpha2r, a6, y14
3596         FMSUBX  y15, alpha2i, a8, y15
3597         FMADDX  y16, alpha2r, a8, y16
3598
3599         STFD    y13, 0 * SIZE(Y2)
3600         nop
3601         STFD    y14, 1 * SIZE(Y2)
3602         add     Y2, Y2, INCY
3603
3604         STFD    y15, 0 * SIZE(Y2)
3605         nop
3606         STFD    y16, 1 * SIZE(Y2)
3607         add     Y2, Y2, INCY
3608         .align 4
3609
3610 LL(125):
3611         andi.   r0, M, 7
3612         ble     LL(130)
3613         andi.   r0, M, 4
3614         ble     LL(126)
3615
3616         LFD     y01, 0 * SIZE(Y1)
3617         LFD     y02, 1 * SIZE(Y1)
3618         add     Y1, Y1, INCY
3619         LFD     y03, 0 * SIZE(Y1)
3620         LFD     y04, 1 * SIZE(Y1)
3621         add     Y1, Y1, INCY
3622
3623         LFD     a1,  0 * SIZE(AO1)
3624         LFD     a3,  2 * SIZE(AO1)
3625         LFD     a5,  4 * SIZE(AO1)
3626         LFD     a7,  6 * SIZE(AO1)
3627
3628         LFD     y05, 0 * SIZE(Y1)
3629         LFD     y06, 1 * SIZE(Y1)
3630         add     Y1, Y1, INCY
3631         LFD     y07, 0 * SIZE(Y1)
3632         LFD     y08, 1 * SIZE(Y1)
3633         add     Y1, Y1, INCY
3634
3635         LFD     a2,  1 * SIZE(AO1)
3636         LFD     a4,  3 * SIZE(AO1)
3637         LFD     a6,  5 * SIZE(AO1)
3638         LFD     a8,  7 * SIZE(AO1)
3639
3640         FMADD   y01, alpha1r, a1, y01
3641         FMADD   y02, alpha1i, a1, y02
3642         FMADD   y03, alpha1r, a3, y03
3643         FMADD   y04, alpha1i, a3, y04
3644
3645         FMADD   y05, alpha1r, a5, y05
3646         FMADD   y06, alpha1i, a5, y06
3647         FMADD   y07, alpha1r, a7, y07
3648         FMADD   y08, alpha1i, a7, y08
3649
3650         LFD     a1,  0 * SIZE(AO2)
3651         LFD     a3,  2 * SIZE(AO2)
3652         LFD     a5,  4 * SIZE(AO2)
3653         LFD     a7,  6 * SIZE(AO2)
3654
3655         FMSUBX  y01, alpha1i, a2, y01
3656         FMADDX  y02, alpha1r, a2, y02
3657         FMSUBX  y03, alpha1i, a4, y03
3658         FMADDX  y04, alpha1r, a4, y04
3659
3660         FMSUBX  y05, alpha1i, a6, y05
3661         FMADDX  y06, alpha1r, a6, y06
3662         FMSUBX  y07, alpha1i, a8, y07
3663         FMADDX  y08, alpha1r, a8, y08
3664
3665         LFD     a2,  1 * SIZE(AO2)
3666         LFD     a4,  3 * SIZE(AO2)
3667         LFD     a6,  5 * SIZE(AO2)
3668         LFD     a8,  7 * SIZE(AO2)
3669
3670         FMADD   y01, alpha2r, a1, y01
3671         FMADD   y02, alpha2i, a1, y02
3672         FMADD   y03, alpha2r, a3, y03
3673         FMADD   y04, alpha2i, a3, y04
3674
3675         FMADD   y05, alpha2r, a5, y05
3676         FMADD   y06, alpha2i, a5, y06
3677         FMADD   y07, alpha2r, a7, y07
3678         FMADD   y08, alpha2i, a7, y08
3679
3680         FMSUBX  y01, alpha2i, a2, y01
3681         FMADDX  y02, alpha2r, a2, y02
3682         FMSUBX  y03, alpha2i, a4, y03
3683         FMADDX  y04, alpha2r, a4, y04
3684
3685         STFD    y01, 0 * SIZE(Y2)
3686         addi    AO1, AO1, 8 * SIZE
3687         STFD    y02, 1 * SIZE(Y2)
3688         add     Y2, Y2, INCY
3689
3690         STFD    y03, 0 * SIZE(Y2)
3691         addi    AO2, AO2, 8 * SIZE
3692         STFD    y04, 1 * SIZE(Y2)
3693         add     Y2, Y2, INCY
3694
3695         FMSUBX  y05, alpha2i, a6, y05
3696         FMADDX  y06, alpha2r, a6, y06
3697         FMSUBX  y07, alpha2i, a8, y07
3698         FMADDX  y08, alpha2r, a8, y08
3699
3700         STFD    y05, 0 * SIZE(Y2)
3701         nop
3702         STFD    y06, 1 * SIZE(Y2)
3703         add     Y2, Y2, INCY
3704
3705         STFD    y07, 0 * SIZE(Y2)
3706         nop
3707         STFD    y08, 1 * SIZE(Y2)
3708         add     Y2, Y2, INCY
3709         .align 4
3710
3711 LL(126):
3712         andi.   r0, M, 2
3713         ble     LL(127)
3714
3715         LFD     a1,  0 * SIZE(AO1)
3716         LFD     a2,  1 * SIZE(AO1)
3717         LFD     a3,  2 * SIZE(AO1)
3718         LFD     a4,  3 * SIZE(AO1)
3719
3720         LFD     y01, 0 * SIZE(Y1)
3721         LFD     y02, 1 * SIZE(Y1)
3722         add     Y1, Y1, INCY
3723         LFD     y03, 0 * SIZE(Y1)
3724         LFD     y04, 1 * SIZE(Y1)
3725         add     Y1, Y1, INCY
3726
3727         LFD     a5,  0 * SIZE(AO2)
3728         LFD     a6,  1 * SIZE(AO2)
3729         LFD     a7,  2 * SIZE(AO2)
3730         LFD     a8,  3 * SIZE(AO2)
3731
3732         FMADD   y01, alpha1r, a1, y01
3733         FMADD   y02, alpha1i, a1, y02
3734         FMADD   y03, alpha1r, a3, y03
3735         FMADD   y04, alpha1i, a3, y04
3736
3737         FMSUBX  y01, alpha1i, a2, y01
3738         FMADDX  y02, alpha1r, a2, y02
3739         FMSUBX  y03, alpha1i, a4, y03
3740         FMADDX  y04, alpha1r, a4, y04
3741
3742         FMADD   y01, alpha2r, a5, y01
3743         FMADD   y02, alpha2i, a5, y02
3744         FMADD   y03, alpha2r, a7, y03
3745         FMADD   y04, alpha2i, a7, y04
3746
3747         FMSUBX  y01, alpha2i, a6, y01
3748         FMADDX  y02, alpha2r, a6, y02
3749         FMSUBX  y03, alpha2i, a8, y03
3750         FMADDX  y04, alpha2r, a8, y04
3751
3752         STFD    y01, 0 * SIZE(Y2)
3753         addi    AO1, AO1, 4 * SIZE
3754         STFD    y02, 1 * SIZE(Y2)
3755         add     Y2, Y2, INCY
3756
3757         STFD    y03, 0 * SIZE(Y2)
3758         addi    AO2, AO2, 4 * SIZE
3759         STFD    y04, 1 * SIZE(Y2)
3760         add     Y2, Y2, INCY
3761         .align 4
3762
3763 LL(127):
3764         andi.   r0, M, 1
3765         ble     LL(130)
3766
3767         LFD     y01, 0 * SIZE(Y1)
3768         LFD     y02, 1 * SIZE(Y1)
3769         add     Y1, Y1, INCY
3770
3771         LFD     a1,  0 * SIZE(AO1)
3772         LFD     a2,  1 * SIZE(AO1)
3773         LFD     a3,  0 * SIZE(AO2)
3774         LFD     a4,  1 * SIZE(AO2)
3775
3776         FMADD   y01, alpha1r, a1, y01
3777         FMADD   y02, alpha1i, a1, y02
3778         FMSUBX  y01, alpha1i, a2, y01
3779         FMADDX  y02, alpha1r, a2, y02
3780
3781         FMADD   y01, alpha2r, a3, y01
3782         FMADD   y02, alpha2i, a3, y02
3783         FMSUBX  y01, alpha2i, a4, y01
3784         FMADDX  y02, alpha2r, a4, y02
3785
3786         STFD    y01, 0 * SIZE(Y2)
3787         STFD    y02, 1 * SIZE(Y2)
3788         add     Y2, Y2, INCY
3789         .align 4
3790
3791 LL(130):
3792         andi.   J, N, 1
3793         ble     LL(999)
3794         .align 4
3795
3796 LL(131):
3797         lfd     alpha_r, ALPHA_R
3798         lfd     alpha_i, ALPHA_I
3799
3800         LFD     a1, 0 * SIZE(X)
3801         LFD     a2, 1 * SIZE(X)
3802         add     X, X, INCX
3803
3804         FMUL    alpha1r, alpha_r, a1
3805         FMUL    alpha1i, alpha_i, a1
3806
3807         FMSUBR  alpha1r, alpha_i, a2, alpha1r
3808         FMADDR  alpha1i, alpha_r, a2, alpha1i
3809
3810         mr      AO1, A
3811         add     A,   AO1, LDA
3812
3813         mr      Y1, Y
3814         mr      Y2, Y
3815
3816         srawi.  r0,  M, 3
3817         mtspr   CTR, r0
3818         ble     LL(135)
3819         .align 4
3820
3821         LFD     y01, 0 * SIZE(Y1)
3822         LFD     y02, 1 * SIZE(Y1)
3823         add     Y1, Y1, INCY
3824         LFD     y03, 0 * SIZE(Y1)
3825         LFD     y04, 1 * SIZE(Y1)
3826         add     Y1, Y1, INCY
3827
3828         LFD     a1,  0 * SIZE(AO1)
3829         LFD     a3,  2 * SIZE(AO1)
3830         LFD     a5,  4 * SIZE(AO1)
3831         LFD     a7,  6 * SIZE(AO1)
3832
3833         LFD     y05, 0 * SIZE(Y1)
3834         LFD     y06, 1 * SIZE(Y1)
3835         add     Y1, Y1, INCY
3836         LFD     y07, 0 * SIZE(Y1)
3837         LFD     y08, 1 * SIZE(Y1)
3838         add     Y1, Y1, INCY
3839
3840         LFD     a2,  1 * SIZE(AO1)
3841         LFD     a4,  3 * SIZE(AO1)
3842         LFD     a6,  5 * SIZE(AO1)
3843         LFD     a8,  7 * SIZE(AO1)
3844
3845         LFD     y09, 0 * SIZE(Y1)
3846         LFD     y10, 1 * SIZE(Y1)
3847         add     Y1, Y1, INCY
3848         LFD     y11, 0 * SIZE(Y1)
3849         LFD     y12, 1 * SIZE(Y1)
3850         add     Y1, Y1, INCY
3851         LFD     y13, 0 * SIZE(Y1)
3852         LFD     y14, 1 * SIZE(Y1)
3853         add     Y1, Y1, INCY
3854         LFD     y15, 0 * SIZE(Y1)
3855         LFD     y16, 1 * SIZE(Y1)
3856         add     Y1, Y1, INCY
3857
3858         bdz     LL(133)
3859         .align 4
3860
3861 LL(132):
3862         FMADD   y01, alpha1r, a1, y01
3863         FMADD   y02, alpha1i, a1, y02
3864         FMADD   y03, alpha1r, a3, y03
3865         FMADD   y04, alpha1i, a3, y04
3866
3867         FMADD   y05, alpha1r, a5, y05
3868         FMADD   y06, alpha1i, a5, y06
3869         FMADD   y07, alpha1r, a7, y07
3870         FMADD   y08, alpha1i, a7, y08
3871
3872         LFD     a1,  8 * SIZE(AO1)
3873         LFD     a3, 10 * SIZE(AO1)
3874         LFD     a5, 12 * SIZE(AO1)
3875         LFD     a7, 14 * SIZE(AO1)
3876
3877         FMSUBX  y01, alpha1i, a2, y01
3878         FMADDX  y02, alpha1r, a2, y02
3879         FMSUBX  y03, alpha1i, a4, y03
3880         FMADDX  y04, alpha1r, a4, y04
3881
3882         STFD    y01, 0 * SIZE(Y2)
3883         nop
3884         STFD    y02, 1 * SIZE(Y2)
3885         add     Y2, Y2, INCY
3886
3887         LFD     y01, 0 * SIZE(Y1)
3888         nop
3889         LFD     y02, 1 * SIZE(Y1)
3890         add     Y1, Y1, INCY
3891
3892         STFD    y03, 0 * SIZE(Y2)
3893         nop
3894         STFD    y04, 1 * SIZE(Y2)
3895         add     Y2, Y2, INCY
3896
3897         LFD     y03, 0 * SIZE(Y1)
3898         nop
3899         LFD     y04, 1 * SIZE(Y1)
3900         add     Y1, Y1, INCY
3901
3902         FMSUBX  y05, alpha1i, a6, y05
3903         FMADDX  y06, alpha1r, a6, y06
3904         FMSUBX  y07, alpha1i, a8, y07
3905         FMADDX  y08, alpha1r, a8, y08
3906
3907         LFD     a2,  9 * SIZE(AO1)
3908         LFD     a4, 11 * SIZE(AO1)
3909         LFD     a6, 13 * SIZE(AO1)
3910         LFD     a8, 15 * SIZE(AO1)
3911
3912         addi    AO1, AO1, 16 * SIZE
3913         nop
3914         DCBT(AO1, PREA)
3915         nop
3916
3917         STFD    y05, 0 * SIZE(Y2)
3918         nop
3919         STFD    y06, 1 * SIZE(Y2)
3920         add     Y2, Y2, INCY
3921
3922         LFD     y05, 0 * SIZE(Y1)
3923         nop
3924         LFD     y06, 1 * SIZE(Y1)
3925         add     Y1, Y1, INCY
3926
3927         STFD    y07, 0 * SIZE(Y2)
3928         nop
3929         STFD    y08, 1 * SIZE(Y2)
3930         add     Y2, Y2, INCY
3931
3932         LFD     y07, 0 * SIZE(Y1)
3933         nop
3934         LFD     y08, 1 * SIZE(Y1)
3935         add     Y1, Y1, INCY
3936
3937         FMADD   y09, alpha1r, a1, y09
3938         FMADD   y10, alpha1i, a1, y10
3939         FMADD   y11, alpha1r, a3, y11
3940         FMADD   y12, alpha1i, a3, y12
3941
3942         FMADD   y13, alpha1r, a5, y13
3943         FMADD   y14, alpha1i, a5, y14
3944         FMADD   y15, alpha1r, a7, y15
3945         FMADD   y16, alpha1i, a7, y16
3946
3947         LFD     a1,  0 * SIZE(AO1)
3948         LFD     a3,  2 * SIZE(AO1)
3949         LFD     a5,  4 * SIZE(AO1)
3950         LFD     a7,  6 * SIZE(AO1)
3951
3952         FMSUBX  y09, alpha1i, a2, y09
3953         FMADDX  y10, alpha1r, a2, y10
3954         FMSUBX  y11, alpha1i, a4, y11
3955         FMADDX  y12, alpha1r, a4, y12
3956
3957         STFD    y09, 0 * SIZE(Y2)
3958         nop
3959         STFD    y10, 1 * SIZE(Y2)
3960         add     Y2, Y2, INCY
3961
3962         LFD     y09, 0 * SIZE(Y1)
3963         nop
3964         LFD     y10, 1 * SIZE(Y1)
3965         add     Y1, Y1, INCY
3966
3967         STFD    y11, 0 * SIZE(Y2)
3968         nop
3969         STFD    y12, 1 * SIZE(Y2)
3970         add     Y2, Y2, INCY
3971
3972         LFD     y11, 0 * SIZE(Y1)
3973         nop
3974         LFD     y12, 1 * SIZE(Y1)
3975         add     Y1, Y1, INCY
3976
3977         FMSUBX  y13, alpha1i, a6, y13
3978         FMADDX  y14, alpha1r, a6, y14
3979         FMSUBX  y15, alpha1i, a8, y15
3980         FMADDX  y16, alpha1r, a8, y16
3981
3982         LFD     a2,  1 * SIZE(AO1)
3983         LFD     a4,  3 * SIZE(AO1)
3984         LFD     a6,  5 * SIZE(AO1)
3985         LFD     a8,  7 * SIZE(AO1)
3986
3987         STFD    y13, 0 * SIZE(Y2)
3988         nop
3989         STFD    y14, 1 * SIZE(Y2)
3990         add     Y2, Y2, INCY
3991
3992         STFD    y15, 0 * SIZE(Y2)
3993         nop
3994         STFD    y16, 1 * SIZE(Y2)
3995         add     Y2, Y2, INCY
3996
3997         LFD     y13, 0 * SIZE(Y1)
3998         nop
3999         LFD     y14, 1 * SIZE(Y1)
4000         add     Y1, Y1, INCY
4001
4002         LFD     y15, 0 * SIZE(Y1)
4003         nop
4004         LFD     y16, 1 * SIZE(Y1)
4005         add     Y1, Y1, INCY
4006
4007         DCBT(Y1, PREC)
4008         bdnz    LL(132)
4009         .align 4
4010
4011 LL(133):
4012         FMADD   y01, alpha1r, a1, y01
4013         FMADD   y02, alpha1i, a1, y02
4014         FMADD   y03, alpha1r, a3, y03
4015         FMADD   y04, alpha1i, a3, y04
4016
4017         FMADD   y05, alpha1r, a5, y05
4018         FMADD   y06, alpha1i, a5, y06
4019         FMADD   y07, alpha1r, a7, y07
4020         FMADD   y08, alpha1i, a7, y08
4021
4022         LFD     a1,  8 * SIZE(AO1)
4023         LFD     a3, 10 * SIZE(AO1)
4024         LFD     a5, 12 * SIZE(AO1)
4025         LFD     a7, 14 * SIZE(AO1)
4026
4027         FMSUBX  y01, alpha1i, a2, y01
4028         FMADDX  y02, alpha1r, a2, y02
4029         FMSUBX  y03, alpha1i, a4, y03
4030         FMADDX  y04, alpha1r, a4, y04
4031
4032         FMSUBX  y05, alpha1i, a6, y05
4033         FMADDX  y06, alpha1r, a6, y06
4034         FMSUBX  y07, alpha1i, a8, y07
4035         FMADDX  y08, alpha1r, a8, y08
4036
4037         LFD     a2,  9 * SIZE(AO1)
4038         LFD     a4, 11 * SIZE(AO1)
4039         LFD     a6, 13 * SIZE(AO1)
4040         LFD     a8, 15 * SIZE(AO1)
4041
4042         FMADD   y09, alpha1r, a1, y09
4043         FMADD   y10, alpha1i, a1, y10
4044         FMADD   y11, alpha1r, a3, y11
4045         FMADD   y12, alpha1i, a3, y12
4046
4047         FMADD   y13, alpha1r, a5, y13
4048         FMADD   y14, alpha1i, a5, y14
4049         FMADD   y15, alpha1r, a7, y15
4050         FMADD   y16, alpha1i, a7, y16
4051
4052         FMSUBX  y09, alpha1i, a2, y09
4053         FMADDX  y10, alpha1r, a2, y10
4054         FMSUBX  y11, alpha1i, a4, y11
4055         FMADDX  y12, alpha1r, a4, y12
4056
4057         FMSUBX  y13, alpha1i, a6, y13
4058         FMADDX  y14, alpha1r, a6, y14
4059         FMSUBX  y15, alpha1i, a8, y15
4060         FMADDX  y16, alpha1r, a8, y16
4061
4062         STFD    y01, 0 * SIZE(Y2)
4063         addi    AO1, AO1, 16 * SIZE
4064         STFD    y02, 1 * SIZE(Y2)
4065         add     Y2, Y2, INCY
4066
4067         STFD    y03, 0 * SIZE(Y2)
4068         nop
4069         STFD    y04, 1 * SIZE(Y2)
4070         add     Y2, Y2, INCY
4071
4072         STFD    y05, 0 * SIZE(Y2)
4073         nop
4074         STFD    y06, 1 * SIZE(Y2)
4075         add     Y2, Y2, INCY
4076
4077         STFD    y07, 0 * SIZE(Y2)
4078         nop
4079         STFD    y08, 1 * SIZE(Y2)
4080         add     Y2, Y2, INCY
4081
4082         STFD    y09, 0 * SIZE(Y2)
4083         nop
4084         STFD    y10, 1 * SIZE(Y2)
4085         add     Y2, Y2, INCY
4086
4087         STFD    y11, 0 * SIZE(Y2)
4088         nop
4089         STFD    y12, 1 * SIZE(Y2)
4090         add     Y2, Y2, INCY
4091
4092         STFD    y13, 0 * SIZE(Y2)
4093         nop
4094         STFD    y14, 1 * SIZE(Y2)
4095         add     Y2, Y2, INCY
4096
4097         STFD    y15, 0 * SIZE(Y2)
4098         nop
4099         STFD    y16, 1 * SIZE(Y2)
4100         add     Y2, Y2, INCY
4101         .align 4
4102
4103 LL(135):
4104         andi.   r0, M, 7
4105         ble     LL(999)
4106         andi.   r0, M, 4
4107         ble     LL(136)
4108
4109         LFD     y01, 0 * SIZE(Y1)
4110         nop
4111         LFD     y02, 1 * SIZE(Y1)
4112         add     Y1, Y1, INCY
4113
4114         LFD     y03, 0 * SIZE(Y1)
4115         nop
4116         LFD     y04, 1 * SIZE(Y1)
4117         add     Y1, Y1, INCY
4118
4119         LFD     y05, 0 * SIZE(Y1)
4120         nop
4121         LFD     y06, 1 * SIZE(Y1)
4122         add     Y1, Y1, INCY
4123
4124         LFD     y07, 0 * SIZE(Y1)
4125         nop
4126         LFD     y08, 1 * SIZE(Y1)
4127         add     Y1, Y1, INCY
4128
4129         LFD     a1,  0 * SIZE(AO1)
4130         LFD     a3,  2 * SIZE(AO1)
4131         LFD     a5,  4 * SIZE(AO1)
4132         LFD     a7,  6 * SIZE(AO1)
4133
4134         LFD     a2,  1 * SIZE(AO1)
4135         LFD     a4,  3 * SIZE(AO1)
4136         LFD     a6,  5 * SIZE(AO1)
4137         LFD     a8,  7 * SIZE(AO1)
4138
4139         FMADD   y01, alpha1r, a1, y01
4140         FMADD   y02, alpha1i, a1, y02
4141         FMADD   y03, alpha1r, a3, y03
4142         FMADD   y04, alpha1i, a3, y04
4143
4144         FMADD   y05, alpha1r, a5, y05
4145         FMADD   y06, alpha1i, a5, y06
4146         FMADD   y07, alpha1r, a7, y07
4147         FMADD   y08, alpha1i, a7, y08
4148
4149         FMSUBX  y01, alpha1i, a2, y01
4150         FMADDX  y02, alpha1r, a2, y02
4151         FMSUBX  y03, alpha1i, a4, y03
4152         FMADDX  y04, alpha1r, a4, y04
4153
4154         FMSUBX  y05, alpha1i, a6, y05
4155         FMADDX  y06, alpha1r, a6, y06
4156         FMSUBX  y07, alpha1i, a8, y07
4157         FMADDX  y08, alpha1r, a8, y08
4158
4159         STFD    y01, 0 * SIZE(Y2)
4160         addi    AO1, AO1, 8 * SIZE
4161         STFD    y02, 1 * SIZE(Y2)
4162         add     Y2, Y2, INCY
4163
4164         STFD    y03, 0 * SIZE(Y2)
4165         nop
4166         STFD    y04, 1 * SIZE(Y2)
4167         add     Y2, Y2, INCY
4168
4169         STFD    y05, 0 * SIZE(Y2)
4170         nop
4171         STFD    y06, 1 * SIZE(Y2)
4172         add     Y2, Y2, INCY
4173
4174         STFD    y07, 0 * SIZE(Y2)
4175         nop
4176         STFD    y08, 1 * SIZE(Y2)
4177         add     Y2, Y2, INCY
4178         .align 4
4179
4180 LL(136):
4181         andi.   r0, M, 2
4182         ble     LL(137)
4183
4184         LFD     a1,  0 * SIZE(AO1)
4185         LFD     a2,  1 * SIZE(AO1)
4186         LFD     a3,  2 * SIZE(AO1)
4187         LFD     a4,  3 * SIZE(AO1)
4188
4189         LFD     y01, 0 * SIZE(Y1)
4190         nop
4191         LFD     y02, 1 * SIZE(Y1)
4192         add     Y1, Y1, INCY
4193         LFD     y03, 0 * SIZE(Y1)
4194         nop
4195         LFD     y04, 1 * SIZE(Y1)
4196         add     Y1, Y1, INCY
4197
4198         FMADD   y01, alpha1r, a1, y01
4199         FMADD   y02, alpha1i, a1, y02
4200         FMADD   y03, alpha1r, a3, y03
4201         FMADD   y04, alpha1i, a3, y04
4202
4203         FMSUBX  y01, alpha1i, a2, y01
4204         FMADDX  y02, alpha1r, a2, y02
4205         FMSUBX  y03, alpha1i, a4, y03
4206         FMADDX  y04, alpha1r, a4, y04
4207
4208         STFD    y01, 0 * SIZE(Y2)
4209         addi    AO1, AO1, 4 * SIZE
4210         STFD    y02, 1 * SIZE(Y2)
4211         add     Y2, Y2, INCY
4212
4213         STFD    y03, 0 * SIZE(Y2)
4214         nop
4215         STFD    y04, 1 * SIZE(Y2)
4216         add     Y2, Y2, INCY
4217         .align 4
4218
4219 LL(137):
4220         andi.   r0, M, 1
4221         ble     LL(999)
4222
4223         LFD     y01, 0 * SIZE(Y1)
4224         nop
4225         LFD     y02, 1 * SIZE(Y1)
4226         add     Y1, Y1, INCY
4227
4228         LFD     a1,  0 * SIZE(AO1)
4229         LFD     a2,  1 * SIZE(AO1)
4230
4231         FMADD   y01, alpha1r, a1, y01
4232         FMADD   y02, alpha1i, a1, y02
4233         FMSUBX  y01, alpha1i, a2, y01
4234         FMADDX  y02, alpha1r, a2, y02
4235
4236         STFD    y01, 0 * SIZE(Y2)
4237         nop
4238         STFD    y02, 1 * SIZE(Y2)
4239         add     Y2, Y2, INCY
4240         .align 4
4241
4242 LL(999):
4243         li      r3, 0
4244
4245         lfd     f14,     0(SP)
4246         lfd     f15,     8(SP)
4247         lfd     f16,    16(SP)
4248         lfd     f17,    24(SP)
4249         lfd     f18,    32(SP)
4250         lfd     f19,    40(SP)
4251         lfd     f20,    48(SP)
4252         lfd     f21,    56(SP)
4253         lfd     f22,    64(SP)
4254         lfd     f23,    72(SP)
4255         lfd     f24,    80(SP)
4256         lfd     f25,    88(SP)
4257         lfd     f26,    96(SP)
4258         lfd     f27,   104(SP)
4259         lfd     f28,   112(SP)
4260         lfd     f29,   120(SP)
4261         lfd     f30,   128(SP)
4262         lfd     f31,   136(SP)
4263
4264 #ifdef __64BIT__
4265         ld      r14,   144(SP)
4266         ld      r15,   152(SP)
4267         ld      r16,   160(SP)
4268         ld      r17,   168(SP)
4269         ld      r18,   176(SP)
4270         ld      r19,   184(SP)
4271         ld      r20,   192(SP)
4272         ld      r21,   200(SP)
4273         ld      r22,   208(SP)
4274 #else
4275         lwz     r14,   144(SP)
4276         lwz     r15,   148(SP)
4277         lwz     r16,   152(SP)
4278         lwz     r17,   156(SP)
4279         lwz     r18,   160(SP)
4280         lwz     r19,   164(SP)
4281         lwz     r20,   168(SP)
4282         lwz     r21,   172(SP)
4283         lwz     r22,   176(SP)
4284 #endif
4285
4286         addi    SP, SP, STACKSIZE
4287         blr
4288
4289         EPILOGUE
4290 #endif