~ubuntu-branches/ubuntu/trusty/atlas/trusty

« back to all changes in this revision

Viewing changes to tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-07-27 14:26:05 UTC
  • mfrom: (18.1.8 sid)
  • Revision ID: package-import@ubuntu.com-20130727142605-5rh3p972h1whdo99
Tags: 3.10.1-2
* Allow the generic package to build on machines with CPU throttling
  enabled. Otherwise the package FTBFS on some buildds (e.g. biber).
  Implementation is done by reactivating the "-Si cputhrchk 0" flag
  (cpu-throtthling-check.diff), and using it in debian/rules.
* Add architectural defaults for armel and mips.
* armhf.diff: do not enforce 32-registers FPU for Fortran

Show diffs side-by-side

added added

removed removed

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