added dgemm-, dtrmm-, zgemm- and ztrmm-kernel for power8
[platform/upstream/openblas.git] / kernel / power / dgemm_macros_16x4_power8.S
1 /*********************************************************************
2 * Macros for N=4, M=16                                               *
3 *********************************************************************/
4
5 .macro LOAD4x16_1
6
7         lxvd2x  vs0,    0,      AO
8         lxvd2x  vs1,    o16,    AO
9         lxvd2x  vs2,    o32,    AO
10         lxvd2x  vs3,    o48,    AO
11
12         lxvdsx  vs24,   0,      BO
13         lxvdsx  vs25,   o8,     BO
14
15         addi            AO, AO, 64
16
17         lxvd2x  vs4,    0,      AO
18         lxvd2x  vs5,    o16,    AO
19         lxvd2x  vs6,    o32,    AO
20         lxvd2x  vs7,    o48,    AO
21
22         lxvdsx  vs26,   o16,    BO
23         lxvdsx  vs27,   o24,    BO
24
25         addi            AO, AO, 64
26         addi            BO, BO, 32
27
28 .endm
29
30 .macro KERNEL4x16_I1
31
32         xvmuldp                 vs32,   vs0,    vs24
33         xvmuldp                 vs33,   vs1,    vs24
34         xvmuldp                 vs34,   vs2,    vs24
35         xvmuldp                 vs35,   vs3,    vs24
36
37         lxvd2x  vs8,    0,      AO
38         lxvd2x  vs9,    o16,    AO
39
40         xvmuldp                 vs36,   vs4,    vs24
41         xvmuldp                 vs37,   vs5,    vs24
42         xvmuldp                 vs38,   vs6,    vs24
43         xvmuldp                 vs39,   vs7,    vs24
44
45         lxvdsx  vs28,   0,      BO
46         lxvdsx  vs29,   o8,     BO
47
48         xvmuldp                 vs40,   vs0,    vs25
49         xvmuldp                 vs41,   vs1,    vs25
50         xvmuldp                 vs42,   vs2,    vs25
51         xvmuldp                 vs43,   vs3,    vs25
52
53         lxvd2x  vs10,   o32,    AO
54         lxvd2x  vs11,   o48,    AO
55
56         xvmuldp                 vs44,   vs4,    vs25
57         xvmuldp                 vs45,   vs5,    vs25
58         xvmuldp                 vs46,   vs6,    vs25
59         xvmuldp                 vs47,   vs7,    vs25
60
61         addi            AO, AO, 64
62
63         xvmuldp                 vs48,   vs0,    vs26
64         xvmuldp                 vs49,   vs1,    vs26
65         xvmuldp                 vs50,   vs2,    vs26
66         xvmuldp                 vs51,   vs3,    vs26
67
68         lxvd2x  vs12,   0,      AO
69         lxvd2x  vs13,   o16,    AO
70
71         xvmuldp                 vs52,   vs4,    vs26
72         xvmuldp                 vs53,   vs5,    vs26
73         xvmuldp                 vs54,   vs6,    vs26
74         xvmuldp                 vs55,   vs7,    vs26
75
76         lxvd2x  vs14,   o32,    AO
77         lxvd2x  vs15,   o48,    AO
78
79         xvmuldp                 vs56,   vs0,    vs27
80         xvmuldp                 vs57,   vs1,    vs27
81         xvmuldp                 vs58,   vs2,    vs27
82         xvmuldp                 vs59,   vs3,    vs27
83
84         lxvdsx  vs30,   o16,    BO
85         lxvdsx  vs31,   o24,    BO
86
87         xvmuldp                 vs60,   vs4,    vs27
88         xvmuldp                 vs61,   vs5,    vs27
89         xvmuldp                 vs62,   vs6,    vs27
90         xvmuldp                 vs63,   vs7,    vs27
91
92         addi            AO, AO, 64
93         addi            BO, BO, 32
94
95 .endm
96
97 .macro KERNEL4x16_1
98
99         xvmaddadp               vs32,   vs0,    vs24
100         xvmaddadp               vs33,   vs1,    vs24
101         xvmaddadp               vs34,   vs2,    vs24
102         xvmaddadp               vs35,   vs3,    vs24
103
104         lxvd2x  vs8,    0,      AO
105         lxvd2x  vs9,    o16,    AO
106
107         xvmaddadp               vs36,   vs4,    vs24
108         xvmaddadp               vs37,   vs5,    vs24
109         xvmaddadp               vs38,   vs6,    vs24
110         xvmaddadp               vs39,   vs7,    vs24
111
112         lxvdsx  vs28,   0,      BO
113         lxvdsx  vs29,   o8,     BO
114
115         xvmaddadp               vs40,   vs0,    vs25
116         xvmaddadp               vs41,   vs1,    vs25
117         xvmaddadp               vs42,   vs2,    vs25
118         xvmaddadp               vs43,   vs3,    vs25
119
120         lxvd2x  vs10,   o32,    AO
121         lxvd2x  vs11,   o48,    AO
122
123         xvmaddadp               vs44,   vs4,    vs25
124         xvmaddadp               vs45,   vs5,    vs25
125         xvmaddadp               vs46,   vs6,    vs25
126         xvmaddadp               vs47,   vs7,    vs25
127
128         addi            AO, AO, 64
129
130         xvmaddadp               vs48,   vs0,    vs26
131         xvmaddadp               vs49,   vs1,    vs26
132         xvmaddadp               vs50,   vs2,    vs26
133         xvmaddadp               vs51,   vs3,    vs26
134
135         lxvd2x  vs12,   0,      AO
136         lxvd2x  vs13,   o16,    AO
137
138         xvmaddadp               vs52,   vs4,    vs26
139         xvmaddadp               vs53,   vs5,    vs26
140         xvmaddadp               vs54,   vs6,    vs26
141         xvmaddadp               vs55,   vs7,    vs26
142
143         lxvd2x  vs14,   o32,    AO
144         lxvd2x  vs15,   o48,    AO
145
146         xvmaddadp               vs56,   vs0,    vs27
147         xvmaddadp               vs57,   vs1,    vs27
148         xvmaddadp               vs58,   vs2,    vs27
149         xvmaddadp               vs59,   vs3,    vs27
150
151
152         lxvdsx  vs30,   o16,    BO
153         lxvdsx  vs31,   o24,    BO
154
155         xvmaddadp               vs60,   vs4,    vs27
156         xvmaddadp               vs61,   vs5,    vs27
157         xvmaddadp               vs62,   vs6,    vs27
158         xvmaddadp               vs63,   vs7,    vs27
159
160         addi            AO, AO, 64
161         addi            BO, BO, 32
162
163 .endm
164
165 .macro KERNEL4x16_2
166
167         xvmaddadp               vs32,   vs8,    vs28
168         xvmaddadp               vs33,   vs9,    vs28
169         xvmaddadp               vs34,   vs10,   vs28
170         xvmaddadp               vs35,   vs11,   vs28
171
172         lxvd2x  vs0,    0,      AO
173         lxvd2x  vs1,    o16,    AO
174
175         xvmaddadp               vs36,   vs12,   vs28
176         xvmaddadp               vs37,   vs13,   vs28
177         xvmaddadp               vs38,   vs14,   vs28
178         xvmaddadp               vs39,   vs15,   vs28
179
180         lxvdsx  vs24,   0,      BO
181         lxvdsx  vs25,   o8,     BO
182
183         xvmaddadp               vs40,   vs8,    vs29
184         xvmaddadp               vs41,   vs9,    vs29
185         xvmaddadp               vs42,   vs10,   vs29
186         xvmaddadp               vs43,   vs11,   vs29
187
188         lxvd2x  vs2,    o32,    AO
189         lxvd2x  vs3,    o48,    AO
190
191         xvmaddadp               vs44,   vs12,   vs29
192         xvmaddadp               vs45,   vs13,   vs29
193         xvmaddadp               vs46,   vs14,   vs29
194         xvmaddadp               vs47,   vs15,   vs29
195
196         addi            AO, AO, 64
197
198         xvmaddadp               vs48,   vs8,    vs30
199         xvmaddadp               vs49,   vs9,    vs30
200         xvmaddadp               vs50,   vs10,   vs30
201         xvmaddadp               vs51,   vs11,   vs30
202
203         lxvd2x  vs4,    0,      AO
204         lxvd2x  vs5,    o16,    AO
205
206         xvmaddadp               vs52,   vs12,   vs30
207         xvmaddadp               vs53,   vs13,   vs30
208         xvmaddadp               vs54,   vs14,   vs30
209         xvmaddadp               vs55,   vs15,   vs30
210
211         lxvd2x  vs6,    o32,    AO
212         lxvd2x  vs7,    o48,    AO
213
214         xvmaddadp               vs56,   vs8,    vs31
215         xvmaddadp               vs57,   vs9,    vs31
216         xvmaddadp               vs58,   vs10,   vs31
217         xvmaddadp               vs59,   vs11,   vs31
218
219         lxvdsx  vs26,   o16,    BO
220         lxvdsx  vs27,   o24,    BO
221
222         xvmaddadp               vs60,   vs12,   vs31
223         xvmaddadp               vs61,   vs13,   vs31
224         xvmaddadp               vs62,   vs14,   vs31
225         xvmaddadp               vs63,   vs15,   vs31
226
227         addi            AO, AO, 64
228         addi            BO, BO, 32
229
230 .endm
231
232 .macro KERNEL4x16_E2
233
234
235         xvmaddadp               vs32,   vs8,    vs28
236         xvmaddadp               vs33,   vs9,    vs28
237         xvmaddadp               vs34,   vs10,   vs28
238         xvmaddadp               vs35,   vs11,   vs28
239         xvmaddadp               vs36,   vs12,   vs28
240         xvmaddadp               vs37,   vs13,   vs28
241         xvmaddadp               vs38,   vs14,   vs28
242         xvmaddadp               vs39,   vs15,   vs28
243
244         xvmaddadp               vs40,   vs8,    vs29
245         xvmaddadp               vs41,   vs9,    vs29
246         xvmaddadp               vs42,   vs10,   vs29
247         xvmaddadp               vs43,   vs11,   vs29
248         xvmaddadp               vs44,   vs12,   vs29
249         xvmaddadp               vs45,   vs13,   vs29
250         xvmaddadp               vs46,   vs14,   vs29
251         xvmaddadp               vs47,   vs15,   vs29
252
253         xvmaddadp               vs48,   vs8,    vs30
254         xvmaddadp               vs49,   vs9,    vs30
255         xvmaddadp               vs50,   vs10,   vs30
256         xvmaddadp               vs51,   vs11,   vs30
257         xvmaddadp               vs52,   vs12,   vs30
258         xvmaddadp               vs53,   vs13,   vs30
259         xvmaddadp               vs54,   vs14,   vs30
260         xvmaddadp               vs55,   vs15,   vs30
261
262         xvmaddadp               vs56,   vs8,    vs31
263         xvmaddadp               vs57,   vs9,    vs31
264         xvmaddadp               vs58,   vs10,   vs31
265         xvmaddadp               vs59,   vs11,   vs31
266         xvmaddadp               vs60,   vs12,   vs31
267         xvmaddadp               vs61,   vs13,   vs31
268         xvmaddadp               vs62,   vs14,   vs31
269         xvmaddadp               vs63,   vs15,   vs31
270
271 .endm
272
273 .macro KERNEL4x16_SUBI1
274
275         lxvd2x  vs0,    0,      AO
276         lxvd2x  vs1,    o16,    AO
277         lxvd2x  vs2,    o32,    AO
278         lxvd2x  vs3,    o48,    AO
279
280         lxvdsx  vs24,   0,      BO
281         lxvdsx  vs25,   o8,     BO
282         lxvdsx  vs26,   o16,    BO
283         lxvdsx  vs27,   o24,    BO
284
285         addi            AO, AO, 64
286         addi            BO, BO, 32
287
288         lxvd2x  vs4,    0,      AO
289         lxvd2x  vs5,    o16,    AO
290         lxvd2x  vs6,    o32,    AO
291         lxvd2x  vs7,    o48,    AO
292
293         addi            AO, AO, 64
294
295
296         xvmuldp                 vs32,   vs0,    vs24
297         xvmuldp                 vs33,   vs1,    vs24
298         xvmuldp                 vs34,   vs2,    vs24
299         xvmuldp                 vs35,   vs3,    vs24
300         xvmuldp                 vs36,   vs4,    vs24
301         xvmuldp                 vs37,   vs5,    vs24
302         xvmuldp                 vs38,   vs6,    vs24
303         xvmuldp                 vs39,   vs7,    vs24
304
305         xvmuldp                 vs40,   vs0,    vs25
306         xvmuldp                 vs41,   vs1,    vs25
307         xvmuldp                 vs42,   vs2,    vs25
308         xvmuldp                 vs43,   vs3,    vs25
309         xvmuldp                 vs44,   vs4,    vs25
310         xvmuldp                 vs45,   vs5,    vs25
311         xvmuldp                 vs46,   vs6,    vs25
312         xvmuldp                 vs47,   vs7,    vs25
313
314         xvmuldp                 vs48,   vs0,    vs26
315         xvmuldp                 vs49,   vs1,    vs26
316         xvmuldp                 vs50,   vs2,    vs26
317         xvmuldp                 vs51,   vs3,    vs26
318         xvmuldp                 vs52,   vs4,    vs26
319         xvmuldp                 vs53,   vs5,    vs26
320         xvmuldp                 vs54,   vs6,    vs26
321         xvmuldp                 vs55,   vs7,    vs26
322
323         xvmuldp                 vs56,   vs0,    vs27
324         xvmuldp                 vs57,   vs1,    vs27
325         xvmuldp                 vs58,   vs2,    vs27
326         xvmuldp                 vs59,   vs3,    vs27
327         xvmuldp                 vs60,   vs4,    vs27
328         xvmuldp                 vs61,   vs5,    vs27
329         xvmuldp                 vs62,   vs6,    vs27
330         xvmuldp                 vs63,   vs7,    vs27
331
332 .endm
333
334 .macro KERNEL4x16_SUB1
335
336         lxvd2x  vs0,    0,      AO
337         lxvd2x  vs1,    o16,    AO
338         lxvd2x  vs2,    o32,    AO
339         lxvd2x  vs3,    o48,    AO
340
341         lxvdsx  vs24,   0,      BO
342         lxvdsx  vs25,   o8,     BO
343         lxvdsx  vs26,   o16,    BO
344         lxvdsx  vs27,   o24,    BO
345
346         addi            AO, AO, 64
347         addi            BO, BO, 32
348
349         lxvd2x  vs4,    0,      AO
350         lxvd2x  vs5,    o16,    AO
351         lxvd2x  vs6,    o32,    AO
352         lxvd2x  vs7,    o48,    AO
353
354         addi            AO, AO, 64
355
356
357         xvmaddadp               vs32,   vs0,    vs24
358         xvmaddadp               vs33,   vs1,    vs24
359         xvmaddadp               vs34,   vs2,    vs24
360         xvmaddadp               vs35,   vs3,    vs24
361         xvmaddadp               vs36,   vs4,    vs24
362         xvmaddadp               vs37,   vs5,    vs24
363         xvmaddadp               vs38,   vs6,    vs24
364         xvmaddadp               vs39,   vs7,    vs24
365
366         xvmaddadp               vs40,   vs0,    vs25
367         xvmaddadp               vs41,   vs1,    vs25
368         xvmaddadp               vs42,   vs2,    vs25
369         xvmaddadp               vs43,   vs3,    vs25
370         xvmaddadp               vs44,   vs4,    vs25
371         xvmaddadp               vs45,   vs5,    vs25
372         xvmaddadp               vs46,   vs6,    vs25
373         xvmaddadp               vs47,   vs7,    vs25
374
375         xvmaddadp               vs48,   vs0,    vs26
376         xvmaddadp               vs49,   vs1,    vs26
377         xvmaddadp               vs50,   vs2,    vs26
378         xvmaddadp               vs51,   vs3,    vs26
379         xvmaddadp               vs52,   vs4,    vs26
380         xvmaddadp               vs53,   vs5,    vs26
381         xvmaddadp               vs54,   vs6,    vs26
382         xvmaddadp               vs55,   vs7,    vs26
383
384         xvmaddadp               vs56,   vs0,    vs27
385         xvmaddadp               vs57,   vs1,    vs27
386         xvmaddadp               vs58,   vs2,    vs27
387         xvmaddadp               vs59,   vs3,    vs27
388         xvmaddadp               vs60,   vs4,    vs27
389         xvmaddadp               vs61,   vs5,    vs27
390         xvmaddadp               vs62,   vs6,    vs27
391         xvmaddadp               vs63,   vs7,    vs27
392
393 .endm
394
395 .macro SAVE4x16
396
397         mr              T1,     CO
398         addi            T2,     T1,     64
399
400 #ifndef TRMMKERNEL
401         lxvd2x          vs0,    0,      T1
402         lxvd2x          vs1,    o16,    T1
403         lxvd2x          vs2,    o32,    T1
404         lxvd2x          vs3,    o48,    T1
405
406         lxvd2x          vs4,    0,      T2
407         lxvd2x          vs5,    o16,    T2
408         lxvd2x          vs6,    o32,    T2
409         lxvd2x          vs7,    o48,    T2
410 #endif
411
412 #ifndef TRMMKERNEL
413         xvmaddadp       vs0,    vs32,   alpha_r
414         xvmaddadp       vs1,    vs33,   alpha_r
415         xvmaddadp       vs2,    vs34,   alpha_r
416         xvmaddadp       vs3,    vs35,   alpha_r
417         xvmaddadp       vs4,    vs36,   alpha_r
418         xvmaddadp       vs5,    vs37,   alpha_r
419         xvmaddadp       vs6,    vs38,   alpha_r
420         xvmaddadp       vs7,    vs39,   alpha_r
421 #else
422         xvmuldp         vs0,    vs32,   alpha_r
423         xvmuldp         vs1,    vs33,   alpha_r
424         xvmuldp         vs2,    vs34,   alpha_r
425         xvmuldp         vs3,    vs35,   alpha_r
426         xvmuldp         vs4,    vs36,   alpha_r
427         xvmuldp         vs5,    vs37,   alpha_r
428         xvmuldp         vs6,    vs38,   alpha_r
429         xvmuldp         vs7,    vs39,   alpha_r
430 #endif
431
432         stxvd2x         vs0,    0,      T1
433         stxvd2x         vs1,    o16,    T1
434         stxvd2x         vs2,    o32,    T1
435         stxvd2x         vs3,    o48,    T1
436
437         dcbt            T1, PRE
438
439         stxvd2x         vs4,    0,      T2
440         stxvd2x         vs5,    o16,    T2
441         stxvd2x         vs6,    o32,    T2
442         stxvd2x         vs7,    o48,    T2
443
444         add             T1,     T1,     LDC
445         add             T2,     T2,     LDC
446
447 #ifndef TRMMKERNEL
448         lxvd2x          vs8,    0,      T1
449         lxvd2x          vs9,    o16,    T1
450         lxvd2x          vs10,   o32,    T1
451         lxvd2x          vs11,   o48,    T1
452
453         lxvd2x          vs12,   0,      T2
454         lxvd2x          vs13,   o16,    T2
455         lxvd2x          vs14,   o32,    T2
456         lxvd2x          vs15,   o48,    T2
457 #endif
458
459 #ifndef TRMMKERNEL
460         xvmaddadp       vs8,    vs40,   alpha_r
461         xvmaddadp       vs9,    vs41,   alpha_r
462         xvmaddadp       vs10,   vs42,   alpha_r
463         xvmaddadp       vs11,   vs43,   alpha_r
464         xvmaddadp       vs12,   vs44,   alpha_r
465         xvmaddadp       vs13,   vs45,   alpha_r
466         xvmaddadp       vs14,   vs46,   alpha_r
467         xvmaddadp       vs15,   vs47,   alpha_r
468 #else
469         xvmuldp         vs8,    vs40,   alpha_r
470         xvmuldp         vs9,    vs41,   alpha_r
471         xvmuldp         vs10,   vs42,   alpha_r
472         xvmuldp         vs11,   vs43,   alpha_r
473         xvmuldp         vs12,   vs44,   alpha_r
474         xvmuldp         vs13,   vs45,   alpha_r
475         xvmuldp         vs14,   vs46,   alpha_r
476         xvmuldp         vs15,   vs47,   alpha_r
477 #endif
478
479         stxvd2x         vs8,    0,      T1
480         stxvd2x         vs9,    o16,    T1
481         stxvd2x         vs10,   o32,    T1
482         stxvd2x         vs11,   o48,    T1
483
484         dcbt            T1, PRE
485
486         stxvd2x         vs12,   0,      T2
487         stxvd2x         vs13,   o16,    T2
488         stxvd2x         vs14,   o32,    T2
489         stxvd2x         vs15,   o48,    T2
490
491         add             T1,     T1,     LDC
492         add             T2,     T2,     LDC
493
494 #ifndef TRMMKERNEL
495         lxvd2x          vs0,    0,      T1
496         lxvd2x          vs1,    o16,    T1
497         lxvd2x          vs2,    o32,    T1
498         lxvd2x          vs3,    o48,    T1
499
500         lxvd2x          vs4,    0,      T2
501         lxvd2x          vs5,    o16,    T2
502         lxvd2x          vs6,    o32,    T2
503         lxvd2x          vs7,    o48,    T2
504 #endif
505
506 #ifndef TRMMKERNEL
507         xvmaddadp       vs0,    vs48,   alpha_r
508         xvmaddadp       vs1,    vs49,   alpha_r
509         xvmaddadp       vs2,    vs50,   alpha_r
510         xvmaddadp       vs3,    vs51,   alpha_r
511         xvmaddadp       vs4,    vs52,   alpha_r
512         xvmaddadp       vs5,    vs53,   alpha_r
513         xvmaddadp       vs6,    vs54,   alpha_r
514         xvmaddadp       vs7,    vs55,   alpha_r
515 #else
516         xvmuldp         vs0,    vs48,   alpha_r
517         xvmuldp         vs1,    vs49,   alpha_r
518         xvmuldp         vs2,    vs50,   alpha_r
519         xvmuldp         vs3,    vs51,   alpha_r
520         xvmuldp         vs4,    vs52,   alpha_r
521         xvmuldp         vs5,    vs53,   alpha_r
522         xvmuldp         vs6,    vs54,   alpha_r
523         xvmuldp         vs7,    vs55,   alpha_r
524 #endif
525
526         stxvd2x         vs0,    0,      T1
527         stxvd2x         vs1,    o16,    T1
528         stxvd2x         vs2,    o32,    T1
529         stxvd2x         vs3,    o48,    T1
530
531         dcbt            T1, PRE
532
533         stxvd2x         vs4,    0,      T2
534         stxvd2x         vs5,    o16,    T2
535         stxvd2x         vs6,    o32,    T2
536         stxvd2x         vs7,    o48,    T2
537
538         add             T1,     T1,     LDC
539         add             T2,     T2,     LDC
540
541 #ifndef TRMMKERNEL
542         lxvd2x          vs8,    0,      T1
543         lxvd2x          vs9,    o16,    T1
544         lxvd2x          vs10,   o32,    T1
545         lxvd2x          vs11,   o48,    T1
546
547         lxvd2x          vs12,   0,      T2
548         lxvd2x          vs13,   o16,    T2
549         lxvd2x          vs14,   o32,    T2
550         lxvd2x          vs15,   o48,    T2
551 #endif
552
553 #ifndef TRMMKERNEL
554         xvmaddadp       vs8,    vs56,   alpha_r
555         xvmaddadp       vs9,    vs57,   alpha_r
556         xvmaddadp       vs10,   vs58,   alpha_r
557         xvmaddadp       vs11,   vs59,   alpha_r
558         xvmaddadp       vs12,   vs60,   alpha_r
559         xvmaddadp       vs13,   vs61,   alpha_r
560         xvmaddadp       vs14,   vs62,   alpha_r
561         xvmaddadp       vs15,   vs63,   alpha_r
562 #else
563         xvmuldp         vs8,    vs56,   alpha_r
564         xvmuldp         vs9,    vs57,   alpha_r
565         xvmuldp         vs10,   vs58,   alpha_r
566         xvmuldp         vs11,   vs59,   alpha_r
567         xvmuldp         vs12,   vs60,   alpha_r
568         xvmuldp         vs13,   vs61,   alpha_r
569         xvmuldp         vs14,   vs62,   alpha_r
570         xvmuldp         vs15,   vs63,   alpha_r
571 #endif
572
573         stxvd2x         vs8,    0,      T1
574         stxvd2x         vs9,    o16,    T1
575         stxvd2x         vs10,   o32,    T1
576         stxvd2x         vs11,   o48,    T1
577
578         dcbt            T1, PRE
579
580         stxvd2x         vs12,   0,      T2
581         stxvd2x         vs13,   o16,    T2
582         stxvd2x         vs14,   o32,    T2
583         stxvd2x         vs15,   o48,    T2
584
585         addi            CO,     CO,     128
586
587 .endm
588
589 /*********************************************************************
590 * Macros for N=4, M=8                                                *
591 *********************************************************************/
592
593 .macro LOAD4x8_1
594
595         lxvd2x  vs0,    0,      AO
596         lxvd2x  vs1,    o16,    AO
597
598         lxvdsx  vs24,   0,      BO
599         lxvdsx  vs25,   o8,     BO
600
601         lxvd2x  vs2,    o32,    AO
602         lxvd2x  vs3,    o48,    AO
603
604         lxvdsx  vs26,   o16,    BO
605         lxvdsx  vs27,   o24,    BO
606
607         addi            AO, AO, 64
608         addi            BO, BO, 32
609
610 .endm
611
612 .macro KERNEL4x8_I1
613
614         xvmuldp                 vs32,   vs0,    vs24
615         xvmuldp                 vs33,   vs1,    vs24
616         xvmuldp                 vs34,   vs2,    vs24
617         xvmuldp                 vs35,   vs3,    vs24
618
619         lxvd2x  vs8,    0,      AO
620         lxvd2x  vs9,    o16,    AO
621
622         xvmuldp                 vs40,   vs0,    vs25
623         xvmuldp                 vs41,   vs1,    vs25
624
625         lxvdsx  vs28,   0,      BO
626         lxvdsx  vs29,   o8,     BO
627
628         xvmuldp                 vs42,   vs2,    vs25
629         xvmuldp                 vs43,   vs3,    vs25
630
631         xvmuldp                 vs48,   vs0,    vs26
632         xvmuldp                 vs49,   vs1,    vs26
633
634         lxvd2x  vs10,   o32,    AO
635         lxvd2x  vs11,   o48,    AO
636
637         xvmuldp                 vs50,   vs2,    vs26
638         xvmuldp                 vs51,   vs3,    vs26
639
640         lxvdsx  vs30,   o16,    BO
641         lxvdsx  vs31,   o24,    BO
642
643         xvmuldp                 vs56,   vs0,    vs27
644         xvmuldp                 vs57,   vs1,    vs27
645         xvmuldp                 vs58,   vs2,    vs27
646         xvmuldp                 vs59,   vs3,    vs27
647
648         addi            AO, AO, 64
649         addi            BO, BO, 32
650
651 .endm
652
653 .macro KERNEL4x8_1
654
655         xvmaddadp               vs32,   vs0,    vs24
656         xvmaddadp               vs33,   vs1,    vs24
657         xvmaddadp               vs34,   vs2,    vs24
658         xvmaddadp               vs35,   vs3,    vs24
659
660         lxvd2x  vs8,    0,      AO
661         lxvd2x  vs9,    o16,    AO
662
663         xvmaddadp               vs40,   vs0,    vs25
664         xvmaddadp               vs41,   vs1,    vs25
665         xvmaddadp               vs42,   vs2,    vs25
666         xvmaddadp               vs43,   vs3,    vs25
667
668         lxvdsx  vs28,   0,      BO
669         lxvdsx  vs29,   o8,     BO
670
671         xvmaddadp               vs48,   vs0,    vs26
672         xvmaddadp               vs49,   vs1,    vs26
673
674         lxvd2x  vs10,   o32,    AO
675         lxvd2x  vs11,   o48,    AO
676
677         xvmaddadp               vs50,   vs2,    vs26
678         xvmaddadp               vs51,   vs3,    vs26
679
680         lxvdsx  vs30,   o16,    BO
681         lxvdsx  vs31,   o24,    BO
682
683         xvmaddadp               vs56,   vs0,    vs27
684         xvmaddadp               vs57,   vs1,    vs27
685         xvmaddadp               vs58,   vs2,    vs27
686         xvmaddadp               vs59,   vs3,    vs27
687
688         addi            AO, AO, 64
689         addi            BO, BO, 32
690
691 .endm
692
693 .macro KERNEL4x8_2
694
695         xvmaddadp               vs32,   vs8,    vs28
696         xvmaddadp               vs33,   vs9,    vs28
697         xvmaddadp               vs34,   vs10,   vs28
698         xvmaddadp               vs35,   vs11,   vs28
699
700         lxvd2x  vs0,    0,      AO
701         lxvd2x  vs1,    o16,    AO
702
703         xvmaddadp               vs40,   vs8,    vs29
704         xvmaddadp               vs41,   vs9,    vs29
705         xvmaddadp               vs42,   vs10,   vs29
706         xvmaddadp               vs43,   vs11,   vs29
707
708         lxvdsx  vs24,   0,      BO
709         lxvdsx  vs25,   o8,     BO
710
711         xvmaddadp               vs48,   vs8,    vs30
712         xvmaddadp               vs49,   vs9,    vs30
713
714         lxvd2x  vs2,    o32,    AO
715         lxvd2x  vs3,    o48,    AO
716
717         xvmaddadp               vs50,   vs10,   vs30
718         xvmaddadp               vs51,   vs11,   vs30
719
720         lxvdsx  vs26,   o16,    BO
721         lxvdsx  vs27,   o24,    BO
722
723         xvmaddadp               vs56,   vs8,    vs31
724         xvmaddadp               vs57,   vs9,    vs31
725         xvmaddadp               vs58,   vs10,   vs31
726         xvmaddadp               vs59,   vs11,   vs31
727
728         addi            AO, AO, 64
729         addi            BO, BO, 32
730
731 .endm
732
733 .macro KERNEL4x8_E2
734
735
736         xvmaddadp               vs32,   vs8,    vs28
737         xvmaddadp               vs33,   vs9,    vs28
738         xvmaddadp               vs34,   vs10,   vs28
739         xvmaddadp               vs35,   vs11,   vs28
740
741         xvmaddadp               vs40,   vs8,    vs29
742         xvmaddadp               vs41,   vs9,    vs29
743         xvmaddadp               vs42,   vs10,   vs29
744         xvmaddadp               vs43,   vs11,   vs29
745
746         xvmaddadp               vs48,   vs8,    vs30
747         xvmaddadp               vs49,   vs9,    vs30
748         xvmaddadp               vs50,   vs10,   vs30
749         xvmaddadp               vs51,   vs11,   vs30
750
751         xvmaddadp               vs56,   vs8,    vs31
752         xvmaddadp               vs57,   vs9,    vs31
753         xvmaddadp               vs58,   vs10,   vs31
754         xvmaddadp               vs59,   vs11,   vs31
755
756 .endm
757
758 .macro KERNEL4x8_SUBI1
759
760         lxvd2x  vs0,    0,      AO
761         lxvd2x  vs1,    o16,    AO
762         lxvd2x  vs2,    o32,    AO
763         lxvd2x  vs3,    o48,    AO
764
765         lxvdsx  vs24,   0,      BO
766         lxvdsx  vs25,   o8,     BO
767         lxvdsx  vs26,   o16,    BO
768         lxvdsx  vs27,   o24,    BO
769
770         addi            AO, AO, 64
771         addi            BO, BO, 32
772
773
774         xvmuldp                 vs32,   vs0,    vs24
775         xvmuldp                 vs33,   vs1,    vs24
776         xvmuldp                 vs34,   vs2,    vs24
777         xvmuldp                 vs35,   vs3,    vs24
778
779         xvmuldp                 vs40,   vs0,    vs25
780         xvmuldp                 vs41,   vs1,    vs25
781         xvmuldp                 vs42,   vs2,    vs25
782         xvmuldp                 vs43,   vs3,    vs25
783
784         xvmuldp                 vs48,   vs0,    vs26
785         xvmuldp                 vs49,   vs1,    vs26
786         xvmuldp                 vs50,   vs2,    vs26
787         xvmuldp                 vs51,   vs3,    vs26
788
789         xvmuldp                 vs56,   vs0,    vs27
790         xvmuldp                 vs57,   vs1,    vs27
791         xvmuldp                 vs58,   vs2,    vs27
792         xvmuldp                 vs59,   vs3,    vs27
793
794 .endm
795
796 .macro KERNEL4x8_SUB1
797
798         lxvd2x  vs0,    0,      AO
799         lxvd2x  vs1,    o16,    AO
800         lxvd2x  vs2,    o32,    AO
801         lxvd2x  vs3,    o48,    AO
802
803         lxvdsx  vs24,   0,      BO
804         lxvdsx  vs25,   o8,     BO
805         lxvdsx  vs26,   o16,    BO
806         lxvdsx  vs27,   o24,    BO
807
808         addi            AO, AO, 64
809         addi            BO, BO, 32
810
811
812         xvmaddadp               vs32,   vs0,    vs24
813         xvmaddadp               vs33,   vs1,    vs24
814         xvmaddadp               vs34,   vs2,    vs24
815         xvmaddadp               vs35,   vs3,    vs24
816
817         xvmaddadp               vs40,   vs0,    vs25
818         xvmaddadp               vs41,   vs1,    vs25
819         xvmaddadp               vs42,   vs2,    vs25
820         xvmaddadp               vs43,   vs3,    vs25
821
822         xvmaddadp               vs48,   vs0,    vs26
823         xvmaddadp               vs49,   vs1,    vs26
824         xvmaddadp               vs50,   vs2,    vs26
825         xvmaddadp               vs51,   vs3,    vs26
826
827         xvmaddadp               vs56,   vs0,    vs27
828         xvmaddadp               vs57,   vs1,    vs27
829         xvmaddadp               vs58,   vs2,    vs27
830         xvmaddadp               vs59,   vs3,    vs27
831
832 .endm
833
834 .macro SAVE4x8
835
836         mr              T1,     CO
837
838 #ifndef TRMMKERNEL
839         lxvd2x          vs0,    0,      T1
840         lxvd2x          vs1,    o16,    T1
841         lxvd2x          vs2,    o32,    T1
842         lxvd2x          vs3,    o48,    T1
843 #endif
844
845 #ifndef TRMMKERNEL
846         xvmaddadp       vs0,    vs32,   alpha_r
847         xvmaddadp       vs1,    vs33,   alpha_r
848         xvmaddadp       vs2,    vs34,   alpha_r
849         xvmaddadp       vs3,    vs35,   alpha_r
850 #else
851         xvmuldp         vs0,    vs32,   alpha_r
852         xvmuldp         vs1,    vs33,   alpha_r
853         xvmuldp         vs2,    vs34,   alpha_r
854         xvmuldp         vs3,    vs35,   alpha_r
855 #endif
856
857         stxvd2x         vs0,    0,      T1
858         stxvd2x         vs1,    o16,    T1
859         stxvd2x         vs2,    o32,    T1
860         stxvd2x         vs3,    o48,    T1
861
862         add             T1,     T1,     LDC
863
864 #ifndef TRMMKERNEL
865         lxvd2x          vs8,    0,      T1
866         lxvd2x          vs9,    o16,    T1
867         lxvd2x          vs10,   o32,    T1
868         lxvd2x          vs11,   o48,    T1
869 #endif
870
871 #ifndef TRMMKERNEL
872         xvmaddadp       vs8,    vs40,   alpha_r
873         xvmaddadp       vs9,    vs41,   alpha_r
874         xvmaddadp       vs10,   vs42,   alpha_r
875         xvmaddadp       vs11,   vs43,   alpha_r
876 #else
877         xvmuldp         vs8,    vs40,   alpha_r
878         xvmuldp         vs9,    vs41,   alpha_r
879         xvmuldp         vs10,   vs42,   alpha_r
880         xvmuldp         vs11,   vs43,   alpha_r
881 #endif
882
883         stxvd2x         vs8,    0,      T1
884         stxvd2x         vs9,    o16,    T1
885         stxvd2x         vs10,   o32,    T1
886         stxvd2x         vs11,   o48,    T1
887
888         add             T1,     T1,     LDC
889
890 #ifndef TRMMKERNEL
891         lxvd2x          vs0,    0,      T1
892         lxvd2x          vs1,    o16,    T1
893         lxvd2x          vs2,    o32,    T1
894         lxvd2x          vs3,    o48,    T1
895 #endif
896
897 #ifndef TRMMKERNEL
898         xvmaddadp       vs0,    vs48,   alpha_r
899         xvmaddadp       vs1,    vs49,   alpha_r
900         xvmaddadp       vs2,    vs50,   alpha_r
901         xvmaddadp       vs3,    vs51,   alpha_r
902 #else
903         xvmuldp         vs0,    vs48,   alpha_r
904         xvmuldp         vs1,    vs49,   alpha_r
905         xvmuldp         vs2,    vs50,   alpha_r
906         xvmuldp         vs3,    vs51,   alpha_r
907 #endif
908
909         stxvd2x         vs0,    0,      T1
910         stxvd2x         vs1,    o16,    T1
911         stxvd2x         vs2,    o32,    T1
912         stxvd2x         vs3,    o48,    T1
913
914         add             T1,     T1,     LDC
915
916 #ifndef TRMMKERNEL
917         lxvd2x          vs8,    0,      T1
918         lxvd2x          vs9,    o16,    T1
919         lxvd2x          vs10,   o32,    T1
920         lxvd2x          vs11,   o48,    T1
921 #endif
922
923 #ifndef TRMMKERNEL
924         xvmaddadp       vs8,    vs56,   alpha_r
925         xvmaddadp       vs9,    vs57,   alpha_r
926         xvmaddadp       vs10,   vs58,   alpha_r
927         xvmaddadp       vs11,   vs59,   alpha_r
928 #else
929         xvmuldp         vs8,    vs56,   alpha_r
930         xvmuldp         vs9,    vs57,   alpha_r
931         xvmuldp         vs10,   vs58,   alpha_r
932         xvmuldp         vs11,   vs59,   alpha_r
933 #endif
934
935         stxvd2x         vs8,    0,      T1
936         stxvd2x         vs9,    o16,    T1
937         stxvd2x         vs10,   o32,    T1
938         stxvd2x         vs11,   o48,    T1
939
940         addi            CO,     CO,     64
941
942 .endm
943
944 /*********************************************************************
945 * Macros for N=4, M=4                                                *
946 *********************************************************************/
947
948 .macro LOAD4x4_1
949
950         lxvd2x  vs0,    0,      AO
951         lxvd2x  vs1,    o16,    AO
952
953         lxvdsx  vs24,   0,      BO
954         lxvdsx  vs25,   o8,     BO
955         lxvdsx  vs26,   o16,    BO
956         lxvdsx  vs27,   o24,    BO
957
958         addi            AO, AO, 32
959         addi            BO, BO, 32
960
961 .endm
962
963 .macro KERNEL4x4_I1
964
965         lxvd2x  vs8,    0,      AO
966         lxvd2x  vs9,    o16,    AO
967
968         lxvdsx  vs28,   0,      BO
969         lxvdsx  vs29,   o8,     BO
970         lxvdsx  vs30,   o16,    BO
971         lxvdsx  vs31,   o24,    BO
972
973         addi            AO, AO, 32
974         addi            BO, BO, 32
975
976
977         xvmuldp                 vs32,   vs0,    vs24
978         xvmuldp                 vs33,   vs1,    vs24
979
980         xvmuldp                 vs40,   vs0,    vs25
981         xvmuldp                 vs41,   vs1,    vs25
982
983         xvmuldp                 vs48,   vs0,    vs26
984         xvmuldp                 vs49,   vs1,    vs26
985
986         xvmuldp                 vs56,   vs0,    vs27
987         xvmuldp                 vs57,   vs1,    vs27
988
989 .endm
990
991 .macro KERNEL4x4_1
992
993         lxvd2x  vs8,    0,      AO
994         lxvd2x  vs9,    o16,    AO
995
996         lxvdsx  vs28,   0,      BO
997         lxvdsx  vs29,   o8,     BO
998         lxvdsx  vs30,   o16,    BO
999         lxvdsx  vs31,   o24,    BO
1000
1001         addi            AO, AO, 32
1002         addi            BO, BO, 32
1003
1004
1005         xvmaddadp               vs32,   vs0,    vs24
1006         xvmaddadp               vs33,   vs1,    vs24
1007
1008         xvmaddadp               vs40,   vs0,    vs25
1009         xvmaddadp               vs41,   vs1,    vs25
1010
1011         xvmaddadp               vs48,   vs0,    vs26
1012         xvmaddadp               vs49,   vs1,    vs26
1013
1014         xvmaddadp               vs56,   vs0,    vs27
1015         xvmaddadp               vs57,   vs1,    vs27
1016
1017 .endm
1018
1019 .macro KERNEL4x4_2
1020
1021         lxvd2x  vs0,    0,      AO
1022         lxvd2x  vs1,    o16,    AO
1023
1024         lxvdsx  vs24,   0,      BO
1025         lxvdsx  vs25,   o8,     BO
1026         lxvdsx  vs26,   o16,    BO
1027         lxvdsx  vs27,   o24,    BO
1028
1029         addi            AO, AO, 32
1030         addi            BO, BO, 32
1031
1032
1033         xvmaddadp               vs32,   vs8,    vs28
1034         xvmaddadp               vs33,   vs9,    vs28
1035
1036         xvmaddadp               vs40,   vs8,    vs29
1037         xvmaddadp               vs41,   vs9,    vs29
1038
1039         xvmaddadp               vs48,   vs8,    vs30
1040         xvmaddadp               vs49,   vs9,    vs30
1041
1042         xvmaddadp               vs56,   vs8,    vs31
1043         xvmaddadp               vs57,   vs9,    vs31
1044
1045 .endm
1046
1047 .macro KERNEL4x4_E2
1048
1049
1050         xvmaddadp               vs32,   vs8,    vs28
1051         xvmaddadp               vs33,   vs9,    vs28
1052
1053         xvmaddadp               vs40,   vs8,    vs29
1054         xvmaddadp               vs41,   vs9,    vs29
1055
1056         xvmaddadp               vs48,   vs8,    vs30
1057         xvmaddadp               vs49,   vs9,    vs30
1058
1059         xvmaddadp               vs56,   vs8,    vs31
1060         xvmaddadp               vs57,   vs9,    vs31
1061
1062 .endm
1063
1064 .macro KERNEL4x4_SUBI1
1065
1066         lxvd2x  vs0,    0,      AO
1067         lxvd2x  vs1,    o16,    AO
1068
1069         lxvdsx  vs24,   0,      BO
1070         lxvdsx  vs25,   o8,     BO
1071         lxvdsx  vs26,   o16,    BO
1072         lxvdsx  vs27,   o24,    BO
1073
1074         addi            AO, AO, 32
1075         addi            BO, BO, 32
1076
1077
1078         xvmuldp                 vs32,   vs0,    vs24
1079         xvmuldp                 vs33,   vs1,    vs24
1080
1081         xvmuldp                 vs40,   vs0,    vs25
1082         xvmuldp                 vs41,   vs1,    vs25
1083
1084         xvmuldp                 vs48,   vs0,    vs26
1085         xvmuldp                 vs49,   vs1,    vs26
1086
1087         xvmuldp                 vs56,   vs0,    vs27
1088         xvmuldp                 vs57,   vs1,    vs27
1089
1090 .endm
1091
1092 .macro KERNEL4x4_SUB1
1093
1094         lxvd2x  vs0,    0,      AO
1095         lxvd2x  vs1,    o16,    AO
1096
1097         lxvdsx  vs24,   0,      BO
1098         lxvdsx  vs25,   o8,     BO
1099         lxvdsx  vs26,   o16,    BO
1100         lxvdsx  vs27,   o24,    BO
1101
1102         addi            AO, AO, 32
1103         addi            BO, BO, 32
1104
1105
1106         xvmaddadp               vs32,   vs0,    vs24
1107         xvmaddadp               vs33,   vs1,    vs24
1108
1109         xvmaddadp               vs40,   vs0,    vs25
1110         xvmaddadp               vs41,   vs1,    vs25
1111
1112         xvmaddadp               vs48,   vs0,    vs26
1113         xvmaddadp               vs49,   vs1,    vs26
1114
1115         xvmaddadp               vs56,   vs0,    vs27
1116         xvmaddadp               vs57,   vs1,    vs27
1117
1118 .endm
1119
1120 .macro SAVE4x4
1121
1122         mr              T1,     CO
1123
1124 #ifndef TRMMKERNEL
1125         lxvd2x          vs0,    0,      T1
1126         lxvd2x          vs1,    o16,    T1
1127 #endif
1128
1129 #ifndef TRMMKERNEL
1130         xvmaddadp       vs0,    vs32,   alpha_r
1131         xvmaddadp       vs1,    vs33,   alpha_r
1132 #else
1133         xvmuldp         vs0,    vs32,   alpha_r
1134         xvmuldp         vs1,    vs33,   alpha_r
1135 #endif
1136
1137         stxvd2x         vs0,    0,      T1
1138         stxvd2x         vs1,    o16,    T1
1139
1140         add             T1,     T1,     LDC
1141
1142 #ifndef TRMMKERNEL
1143         lxvd2x          vs8,    0,      T1
1144         lxvd2x          vs9,    o16,    T1
1145 #endif
1146
1147 #ifndef TRMMKERNEL
1148         xvmaddadp       vs8,    vs40,   alpha_r
1149         xvmaddadp       vs9,    vs41,   alpha_r
1150 #else
1151         xvmuldp         vs8,    vs40,   alpha_r
1152         xvmuldp         vs9,    vs41,   alpha_r
1153 #endif
1154
1155         stxvd2x         vs8,    0,      T1
1156         stxvd2x         vs9,    o16,    T1
1157
1158         add             T1,     T1,     LDC
1159
1160 #ifndef TRMMKERNEL
1161         lxvd2x          vs0,    0,      T1
1162         lxvd2x          vs1,    o16,    T1
1163 #endif
1164
1165 #ifndef TRMMKERNEL
1166         xvmaddadp       vs0,    vs48,   alpha_r
1167         xvmaddadp       vs1,    vs49,   alpha_r
1168 #else
1169         xvmuldp         vs0,    vs48,   alpha_r
1170         xvmuldp         vs1,    vs49,   alpha_r
1171 #endif
1172
1173         stxvd2x         vs0,    0,      T1
1174         stxvd2x         vs1,    o16,    T1
1175
1176         add             T1,     T1,     LDC
1177
1178 #ifndef TRMMKERNEL
1179         lxvd2x          vs8,    0,      T1
1180         lxvd2x          vs9,    o16,    T1
1181 #endif
1182
1183 #ifndef TRMMKERNEL
1184         xvmaddadp       vs8,    vs56,   alpha_r
1185         xvmaddadp       vs9,    vs57,   alpha_r
1186 #else
1187         xvmuldp         vs8,    vs56,   alpha_r
1188         xvmuldp         vs9,    vs57,   alpha_r
1189 #endif
1190
1191         stxvd2x         vs8,    0,      T1
1192         stxvd2x         vs9,    o16,    T1
1193
1194         addi            CO,     CO,     32
1195
1196 .endm
1197
1198 /*********************************************************************
1199 * Macros for N=4, M=2                                                *
1200 *********************************************************************/
1201
1202 .macro LOAD4x2_1
1203
1204         lxvd2x  vs0,    0,      AO
1205
1206         lxvdsx  vs24,   0,      BO
1207         lxvdsx  vs25,   o8,     BO
1208         lxvdsx  vs26,   o16,    BO
1209         lxvdsx  vs27,   o24,    BO
1210
1211         addi            AO, AO, 16
1212         addi            BO, BO, 32
1213
1214 .endm
1215
1216 .macro KERNEL4x2_I1
1217
1218         lxvd2x  vs8,    0,      AO
1219
1220         lxvdsx  vs28,   0,      BO
1221         lxvdsx  vs29,   o8,     BO
1222         lxvdsx  vs30,   o16,    BO
1223         lxvdsx  vs31,   o24,    BO
1224
1225         addi            AO, AO, 16
1226         addi            BO, BO, 32
1227
1228
1229         xvmuldp                 vs32,   vs0,    vs24
1230
1231         xvmuldp                 vs40,   vs0,    vs25
1232
1233         xvmuldp                 vs48,   vs0,    vs26
1234
1235         xvmuldp                 vs56,   vs0,    vs27
1236
1237 .endm
1238
1239 .macro KERNEL4x2_1
1240
1241         lxvd2x  vs8,    0,      AO
1242
1243         lxvdsx  vs28,   0,      BO
1244         lxvdsx  vs29,   o8,     BO
1245         lxvdsx  vs30,   o16,    BO
1246         lxvdsx  vs31,   o24,    BO
1247
1248         addi            AO, AO, 16
1249         addi            BO, BO, 32
1250
1251
1252         xvmaddadp               vs32,   vs0,    vs24
1253
1254         xvmaddadp               vs40,   vs0,    vs25
1255
1256         xvmaddadp               vs48,   vs0,    vs26
1257
1258         xvmaddadp               vs56,   vs0,    vs27
1259
1260 .endm
1261
1262 .macro KERNEL4x2_2
1263
1264         lxvd2x  vs0,    0,      AO
1265
1266         lxvdsx  vs24,   0,      BO
1267         lxvdsx  vs25,   o8,     BO
1268         lxvdsx  vs26,   o16,    BO
1269         lxvdsx  vs27,   o24,    BO
1270
1271         addi            AO, AO, 16
1272         addi            BO, BO, 32
1273
1274
1275         xvmaddadp               vs32,   vs8,    vs28
1276
1277         xvmaddadp               vs40,   vs8,    vs29
1278
1279         xvmaddadp               vs48,   vs8,    vs30
1280
1281         xvmaddadp               vs56,   vs8,    vs31
1282
1283 .endm
1284
1285 .macro KERNEL4x2_E2
1286
1287
1288         xvmaddadp               vs32,   vs8,    vs28
1289
1290         xvmaddadp               vs40,   vs8,    vs29
1291
1292         xvmaddadp               vs48,   vs8,    vs30
1293
1294         xvmaddadp               vs56,   vs8,    vs31
1295
1296 .endm
1297
1298 .macro KERNEL4x2_SUBI1
1299
1300         lxvd2x  vs0,    0,      AO
1301
1302         lxvdsx  vs24,   0,      BO
1303         lxvdsx  vs25,   o8,     BO
1304         lxvdsx  vs26,   o16,    BO
1305         lxvdsx  vs27,   o24,    BO
1306
1307         addi            AO, AO, 16
1308         addi            BO, BO, 32
1309
1310
1311         xvmuldp                 vs32,   vs0,    vs24
1312
1313         xvmuldp                 vs40,   vs0,    vs25
1314
1315         xvmuldp                 vs48,   vs0,    vs26
1316
1317         xvmuldp                 vs56,   vs0,    vs27
1318
1319 .endm
1320
1321 .macro KERNEL4x2_SUB1
1322
1323         lxvd2x  vs0,    0,      AO
1324
1325         lxvdsx  vs24,   0,      BO
1326         lxvdsx  vs25,   o8,     BO
1327         lxvdsx  vs26,   o16,    BO
1328         lxvdsx  vs27,   o24,    BO
1329
1330         addi            AO, AO, 16
1331         addi            BO, BO, 32
1332
1333
1334         xvmaddadp               vs32,   vs0,    vs24
1335
1336         xvmaddadp               vs40,   vs0,    vs25
1337
1338         xvmaddadp               vs48,   vs0,    vs26
1339
1340         xvmaddadp               vs56,   vs0,    vs27
1341
1342 .endm
1343
1344 .macro SAVE4x2
1345
1346         mr              T1,     CO
1347
1348 #ifndef TRMMKERNEL
1349         lxvd2x          vs0,    0,      T1
1350 #endif
1351
1352 #ifndef TRMMKERNEL
1353         xvmaddadp       vs0,    vs32,   alpha_r
1354 #else
1355         xvmuldp         vs0,    vs32,   alpha_r
1356 #endif
1357
1358         stxvd2x         vs0,    0,      T1
1359
1360         add             T1,     T1,     LDC
1361
1362 #ifndef TRMMKERNEL
1363         lxvd2x          vs8,    0,      T1
1364 #endif
1365
1366 #ifndef TRMMKERNEL
1367         xvmaddadp       vs8,    vs40,   alpha_r
1368 #else
1369         xvmuldp         vs8,    vs40,   alpha_r
1370 #endif
1371
1372         stxvd2x         vs8,    0,      T1
1373
1374         add             T1,     T1,     LDC
1375
1376 #ifndef TRMMKERNEL
1377         lxvd2x          vs0,    0,      T1
1378 #endif
1379
1380 #ifndef TRMMKERNEL
1381         xvmaddadp       vs0,    vs48,   alpha_r
1382 #else
1383         xvmuldp         vs0,    vs48,   alpha_r
1384 #endif
1385
1386         stxvd2x         vs0,    0,      T1
1387
1388         add             T1,     T1,     LDC
1389
1390 #ifndef TRMMKERNEL
1391         lxvd2x          vs8,    0,      T1
1392 #endif
1393
1394 #ifndef TRMMKERNEL
1395         xvmaddadp       vs8,    vs56,   alpha_r
1396 #else
1397         xvmuldp         vs8,    vs56,   alpha_r
1398 #endif
1399
1400         stxvd2x         vs8,    0,      T1
1401
1402         addi            CO,     CO,     16
1403
1404 .endm
1405
1406 /*********************************************************************
1407 * Macros for N=4, M=1                                                *
1408 *********************************************************************/
1409
1410 .macro LOAD4x1_1
1411
1412         lxsdx   vs0,    0,      AO
1413
1414         lxsdx   vs24,   0,      BO
1415         lxsdx   vs25,   o8,     BO
1416         lxsdx   vs26,   o16,    BO
1417         lxsdx   vs27,   o24,    BO
1418
1419         addi            AO, AO, 8
1420         addi            BO, BO, 32
1421
1422 .endm
1423
1424 .macro KERNEL4x1_I1
1425
1426         lxsdx   vs8,    0,      AO
1427
1428         lxsdx   vs28,   0,      BO
1429         lxsdx   vs29,   o8,     BO
1430         lxsdx   vs30,   o16,    BO
1431         lxsdx   vs31,   o24,    BO
1432
1433         addi            AO, AO, 8
1434         addi            BO, BO, 32
1435
1436
1437         xsmuldp                 vs32,   vs0,    vs24
1438
1439         xsmuldp                 vs40,   vs0,    vs25
1440
1441         xsmuldp                 vs48,   vs0,    vs26
1442
1443         xsmuldp                 vs56,   vs0,    vs27
1444
1445 .endm
1446
1447 .macro KERNEL4x1_1
1448
1449         lxsdx   vs8,    0,      AO
1450
1451         lxsdx   vs28,   0,      BO
1452         lxsdx   vs29,   o8,     BO
1453         lxsdx   vs30,   o16,    BO
1454         lxsdx   vs31,   o24,    BO
1455
1456         addi            AO, AO, 8
1457         addi            BO, BO, 32
1458
1459
1460         xsmaddadp               vs32,   vs0,    vs24
1461
1462         xsmaddadp               vs40,   vs0,    vs25
1463
1464         xsmaddadp               vs48,   vs0,    vs26
1465
1466         xsmaddadp               vs56,   vs0,    vs27
1467
1468 .endm
1469
1470 .macro KERNEL4x1_2
1471
1472         lxsdx   vs0,    0,      AO
1473
1474         lxsdx   vs24,   0,      BO
1475         lxsdx   vs25,   o8,     BO
1476         lxsdx   vs26,   o16,    BO
1477         lxsdx   vs27,   o24,    BO
1478
1479         addi            AO, AO, 8
1480         addi            BO, BO, 32
1481
1482
1483         xsmaddadp               vs32,   vs8,    vs28
1484
1485         xsmaddadp               vs40,   vs8,    vs29
1486
1487         xsmaddadp               vs48,   vs8,    vs30
1488
1489         xsmaddadp               vs56,   vs8,    vs31
1490
1491 .endm
1492
1493 .macro KERNEL4x1_E2
1494
1495
1496         xsmaddadp               vs32,   vs8,    vs28
1497
1498         xsmaddadp               vs40,   vs8,    vs29
1499
1500         xsmaddadp               vs48,   vs8,    vs30
1501
1502         xsmaddadp               vs56,   vs8,    vs31
1503
1504 .endm
1505
1506 .macro KERNEL4x1_SUBI1
1507
1508         lxsdx   vs0,    0,      AO
1509
1510         lxsdx   vs24,   0,      BO
1511         lxsdx   vs25,   o8,     BO
1512         lxsdx   vs26,   o16,    BO
1513         lxsdx   vs27,   o24,    BO
1514
1515         addi            AO, AO, 8
1516         addi            BO, BO, 32
1517
1518
1519         xsmuldp                 vs32,   vs0,    vs24
1520
1521         xsmuldp                 vs40,   vs0,    vs25
1522
1523         xsmuldp                 vs48,   vs0,    vs26
1524
1525         xsmuldp                 vs56,   vs0,    vs27
1526
1527 .endm
1528
1529 .macro KERNEL4x1_SUB1
1530
1531         lxsdx   vs0,    0,      AO
1532
1533         lxsdx   vs24,   0,      BO
1534         lxsdx   vs25,   o8,     BO
1535         lxsdx   vs26,   o16,    BO
1536         lxsdx   vs27,   o24,    BO
1537
1538         addi            AO, AO, 8
1539         addi            BO, BO, 32
1540
1541
1542         xsmaddadp               vs32,   vs0,    vs24
1543
1544         xsmaddadp               vs40,   vs0,    vs25
1545
1546         xsmaddadp               vs48,   vs0,    vs26
1547
1548         xsmaddadp               vs56,   vs0,    vs27
1549
1550 .endm
1551
1552 .macro SAVE4x1
1553
1554         mr              T1,     CO
1555
1556 #ifndef TRMMKERNEL
1557         lxsdx           vs0,    0,      T1
1558 #endif
1559
1560 #ifndef TRMMKERNEL
1561         xsmaddadp       vs0,    vs32,   alpha_r
1562 #else
1563         xsmuldp         vs0,    vs32,   alpha_r
1564 #endif
1565
1566         stxsdx          vs0,    0,      T1
1567
1568         add             T1,     T1,     LDC
1569
1570 #ifndef TRMMKERNEL
1571         lxsdx           vs8,    0,      T1
1572 #endif
1573
1574 #ifndef TRMMKERNEL
1575         xsmaddadp       vs8,    vs40,   alpha_r
1576 #else
1577         xsmuldp         vs8,    vs40,   alpha_r
1578 #endif
1579
1580         stxsdx          vs8,    0,      T1
1581
1582         add             T1,     T1,     LDC
1583
1584 #ifndef TRMMKERNEL
1585         lxsdx           vs0,    0,      T1
1586 #endif
1587
1588 #ifndef TRMMKERNEL
1589         xsmaddadp       vs0,    vs48,   alpha_r
1590 #else
1591         xsmuldp         vs0,    vs48,   alpha_r
1592 #endif
1593
1594         stxsdx          vs0,    0,      T1
1595
1596         add             T1,     T1,     LDC
1597
1598 #ifndef TRMMKERNEL
1599         lxsdx           vs8,    0,      T1
1600 #endif
1601
1602 #ifndef TRMMKERNEL
1603         xsmaddadp       vs8,    vs56,   alpha_r
1604 #else
1605         xsmuldp         vs8,    vs56,   alpha_r
1606 #endif
1607
1608         stxsdx          vs8,    0,      T1
1609
1610         addi            CO,     CO,     8
1611
1612 .endm
1613
1614 /*********************************************************************
1615 * Macros for N=2, M=16                                               *
1616 *********************************************************************/
1617
1618 .macro LOAD2x16_1
1619
1620         lxvd2x  vs0,    0,      AO
1621         lxvd2x  vs1,    o16,    AO
1622         lxvd2x  vs2,    o32,    AO
1623         lxvd2x  vs3,    o48,    AO
1624
1625         lxvdsx  vs24,   0,      BO
1626         lxvdsx  vs25,   o8,     BO
1627
1628         addi            AO, AO, 64
1629         addi            BO, BO, 16
1630
1631         lxvd2x  vs4,    0,      AO
1632         lxvd2x  vs5,    o16,    AO
1633         lxvd2x  vs6,    o32,    AO
1634         lxvd2x  vs7,    o48,    AO
1635
1636         addi            AO, AO, 64
1637
1638 .endm
1639
1640 .macro KERNEL2x16_I1
1641
1642         lxvd2x  vs8,    0,      AO
1643         lxvd2x  vs9,    o16,    AO
1644         lxvd2x  vs10,   o32,    AO
1645         lxvd2x  vs11,   o48,    AO
1646
1647         lxvdsx  vs28,   0,      BO
1648         lxvdsx  vs29,   o8,     BO
1649
1650         addi            AO, AO, 64
1651         addi            BO, BO, 16
1652
1653         lxvd2x  vs12,   0,      AO
1654         lxvd2x  vs13,   o16,    AO
1655         lxvd2x  vs14,   o32,    AO
1656         lxvd2x  vs15,   o48,    AO
1657
1658         addi            AO, AO, 64
1659
1660
1661         xvmuldp                 vs32,   vs0,    vs24
1662         xvmuldp                 vs33,   vs1,    vs24
1663         xvmuldp                 vs34,   vs2,    vs24
1664         xvmuldp                 vs35,   vs3,    vs24
1665         xvmuldp                 vs36,   vs4,    vs24
1666         xvmuldp                 vs37,   vs5,    vs24
1667         xvmuldp                 vs38,   vs6,    vs24
1668         xvmuldp                 vs39,   vs7,    vs24
1669
1670         xvmuldp                 vs40,   vs0,    vs25
1671         xvmuldp                 vs41,   vs1,    vs25
1672         xvmuldp                 vs42,   vs2,    vs25
1673         xvmuldp                 vs43,   vs3,    vs25
1674         xvmuldp                 vs44,   vs4,    vs25
1675         xvmuldp                 vs45,   vs5,    vs25
1676         xvmuldp                 vs46,   vs6,    vs25
1677         xvmuldp                 vs47,   vs7,    vs25
1678
1679 .endm
1680
1681 .macro KERNEL2x16_1
1682
1683         lxvd2x  vs8,    0,      AO
1684         lxvd2x  vs9,    o16,    AO
1685         lxvd2x  vs10,   o32,    AO
1686         lxvd2x  vs11,   o48,    AO
1687
1688         lxvdsx  vs28,   0,      BO
1689         lxvdsx  vs29,   o8,     BO
1690
1691         addi            AO, AO, 64
1692         addi            BO, BO, 16
1693
1694         lxvd2x  vs12,   0,      AO
1695         lxvd2x  vs13,   o16,    AO
1696         lxvd2x  vs14,   o32,    AO
1697         lxvd2x  vs15,   o48,    AO
1698
1699         addi            AO, AO, 64
1700
1701
1702         xvmaddadp               vs32,   vs0,    vs24
1703         xvmaddadp               vs33,   vs1,    vs24
1704         xvmaddadp               vs34,   vs2,    vs24
1705         xvmaddadp               vs35,   vs3,    vs24
1706         xvmaddadp               vs36,   vs4,    vs24
1707         xvmaddadp               vs37,   vs5,    vs24
1708         xvmaddadp               vs38,   vs6,    vs24
1709         xvmaddadp               vs39,   vs7,    vs24
1710
1711         xvmaddadp               vs40,   vs0,    vs25
1712         xvmaddadp               vs41,   vs1,    vs25
1713         xvmaddadp               vs42,   vs2,    vs25
1714         xvmaddadp               vs43,   vs3,    vs25
1715         xvmaddadp               vs44,   vs4,    vs25
1716         xvmaddadp               vs45,   vs5,    vs25
1717         xvmaddadp               vs46,   vs6,    vs25
1718         xvmaddadp               vs47,   vs7,    vs25
1719
1720 .endm
1721
1722 .macro KERNEL2x16_2
1723
1724         lxvd2x  vs0,    0,      AO
1725         lxvd2x  vs1,    o16,    AO
1726         lxvd2x  vs2,    o32,    AO
1727         lxvd2x  vs3,    o48,    AO
1728
1729         lxvdsx  vs24,   0,      BO
1730         lxvdsx  vs25,   o8,     BO
1731
1732         addi            AO, AO, 64
1733         addi            BO, BO, 16
1734
1735         lxvd2x  vs4,    0,      AO
1736         lxvd2x  vs5,    o16,    AO
1737         lxvd2x  vs6,    o32,    AO
1738         lxvd2x  vs7,    o48,    AO
1739
1740         addi            AO, AO, 64
1741
1742
1743         xvmaddadp               vs32,   vs8,    vs28
1744         xvmaddadp               vs33,   vs9,    vs28
1745         xvmaddadp               vs34,   vs10,   vs28
1746         xvmaddadp               vs35,   vs11,   vs28
1747         xvmaddadp               vs36,   vs12,   vs28
1748         xvmaddadp               vs37,   vs13,   vs28
1749         xvmaddadp               vs38,   vs14,   vs28
1750         xvmaddadp               vs39,   vs15,   vs28
1751
1752         xvmaddadp               vs40,   vs8,    vs29
1753         xvmaddadp               vs41,   vs9,    vs29
1754         xvmaddadp               vs42,   vs10,   vs29
1755         xvmaddadp               vs43,   vs11,   vs29
1756         xvmaddadp               vs44,   vs12,   vs29
1757         xvmaddadp               vs45,   vs13,   vs29
1758         xvmaddadp               vs46,   vs14,   vs29
1759         xvmaddadp               vs47,   vs15,   vs29
1760
1761 .endm
1762
1763 .macro KERNEL2x16_E2
1764
1765
1766         xvmaddadp               vs32,   vs8,    vs28
1767         xvmaddadp               vs33,   vs9,    vs28
1768         xvmaddadp               vs34,   vs10,   vs28
1769         xvmaddadp               vs35,   vs11,   vs28
1770         xvmaddadp               vs36,   vs12,   vs28
1771         xvmaddadp               vs37,   vs13,   vs28
1772         xvmaddadp               vs38,   vs14,   vs28
1773         xvmaddadp               vs39,   vs15,   vs28
1774
1775         xvmaddadp               vs40,   vs8,    vs29
1776         xvmaddadp               vs41,   vs9,    vs29
1777         xvmaddadp               vs42,   vs10,   vs29
1778         xvmaddadp               vs43,   vs11,   vs29
1779         xvmaddadp               vs44,   vs12,   vs29
1780         xvmaddadp               vs45,   vs13,   vs29
1781         xvmaddadp               vs46,   vs14,   vs29
1782         xvmaddadp               vs47,   vs15,   vs29
1783
1784 .endm
1785
1786 .macro KERNEL2x16_SUBI1
1787
1788         lxvd2x  vs0,    0,      AO
1789         lxvd2x  vs1,    o16,    AO
1790         lxvd2x  vs2,    o32,    AO
1791         lxvd2x  vs3,    o48,    AO
1792
1793         lxvdsx  vs24,   0,      BO
1794         lxvdsx  vs25,   o8,     BO
1795
1796         addi            AO, AO, 64
1797         addi            BO, BO, 16
1798
1799         lxvd2x  vs4,    0,      AO
1800         lxvd2x  vs5,    o16,    AO
1801         lxvd2x  vs6,    o32,    AO
1802         lxvd2x  vs7,    o48,    AO
1803
1804         addi            AO, AO, 64
1805
1806
1807         xvmuldp                 vs32,   vs0,    vs24
1808         xvmuldp                 vs33,   vs1,    vs24
1809         xvmuldp                 vs34,   vs2,    vs24
1810         xvmuldp                 vs35,   vs3,    vs24
1811         xvmuldp                 vs36,   vs4,    vs24
1812         xvmuldp                 vs37,   vs5,    vs24
1813         xvmuldp                 vs38,   vs6,    vs24
1814         xvmuldp                 vs39,   vs7,    vs24
1815
1816         xvmuldp                 vs40,   vs0,    vs25
1817         xvmuldp                 vs41,   vs1,    vs25
1818         xvmuldp                 vs42,   vs2,    vs25
1819         xvmuldp                 vs43,   vs3,    vs25
1820         xvmuldp                 vs44,   vs4,    vs25
1821         xvmuldp                 vs45,   vs5,    vs25
1822         xvmuldp                 vs46,   vs6,    vs25
1823         xvmuldp                 vs47,   vs7,    vs25
1824
1825 .endm
1826
1827 .macro KERNEL2x16_SUB1
1828
1829         lxvd2x  vs0,    0,      AO
1830         lxvd2x  vs1,    o16,    AO
1831         lxvd2x  vs2,    o32,    AO
1832         lxvd2x  vs3,    o48,    AO
1833
1834         lxvdsx  vs24,   0,      BO
1835         lxvdsx  vs25,   o8,     BO
1836
1837         addi            AO, AO, 64
1838         addi            BO, BO, 16
1839
1840         lxvd2x  vs4,    0,      AO
1841         lxvd2x  vs5,    o16,    AO
1842         lxvd2x  vs6,    o32,    AO
1843         lxvd2x  vs7,    o48,    AO
1844
1845         addi            AO, AO, 64
1846
1847
1848         xvmaddadp               vs32,   vs0,    vs24
1849         xvmaddadp               vs33,   vs1,    vs24
1850         xvmaddadp               vs34,   vs2,    vs24
1851         xvmaddadp               vs35,   vs3,    vs24
1852         xvmaddadp               vs36,   vs4,    vs24
1853         xvmaddadp               vs37,   vs5,    vs24
1854         xvmaddadp               vs38,   vs6,    vs24
1855         xvmaddadp               vs39,   vs7,    vs24
1856
1857         xvmaddadp               vs40,   vs0,    vs25
1858         xvmaddadp               vs41,   vs1,    vs25
1859         xvmaddadp               vs42,   vs2,    vs25
1860         xvmaddadp               vs43,   vs3,    vs25
1861         xvmaddadp               vs44,   vs4,    vs25
1862         xvmaddadp               vs45,   vs5,    vs25
1863         xvmaddadp               vs46,   vs6,    vs25
1864         xvmaddadp               vs47,   vs7,    vs25
1865
1866 .endm
1867
1868 .macro SAVE2x16
1869
1870         mr              T1,     CO
1871         addi            T2,     T1,     64
1872
1873 #ifndef TRMMKERNEL
1874         lxvd2x          vs0,    0,      T1
1875         lxvd2x          vs1,    o16,    T1
1876         lxvd2x          vs2,    o32,    T1
1877         lxvd2x          vs3,    o48,    T1
1878
1879         lxvd2x          vs4,    0,      T2
1880         lxvd2x          vs5,    o16,    T2
1881         lxvd2x          vs6,    o32,    T2
1882         lxvd2x          vs7,    o48,    T2
1883 #endif
1884
1885 #ifndef TRMMKERNEL
1886         xvmaddadp       vs0,    vs32,   alpha_r
1887         xvmaddadp       vs1,    vs33,   alpha_r
1888         xvmaddadp       vs2,    vs34,   alpha_r
1889         xvmaddadp       vs3,    vs35,   alpha_r
1890         xvmaddadp       vs4,    vs36,   alpha_r
1891         xvmaddadp       vs5,    vs37,   alpha_r
1892         xvmaddadp       vs6,    vs38,   alpha_r
1893         xvmaddadp       vs7,    vs39,   alpha_r
1894 #else
1895         xvmuldp         vs0,    vs32,   alpha_r
1896         xvmuldp         vs1,    vs33,   alpha_r
1897         xvmuldp         vs2,    vs34,   alpha_r
1898         xvmuldp         vs3,    vs35,   alpha_r
1899         xvmuldp         vs4,    vs36,   alpha_r
1900         xvmuldp         vs5,    vs37,   alpha_r
1901         xvmuldp         vs6,    vs38,   alpha_r
1902         xvmuldp         vs7,    vs39,   alpha_r
1903 #endif
1904
1905         stxvd2x         vs0,    0,      T1
1906         stxvd2x         vs1,    o16,    T1
1907         stxvd2x         vs2,    o32,    T1
1908         stxvd2x         vs3,    o48,    T1
1909
1910         stxvd2x         vs4,    0,      T2
1911         stxvd2x         vs5,    o16,    T2
1912         stxvd2x         vs6,    o32,    T2
1913         stxvd2x         vs7,    o48,    T2
1914
1915         add             T1,     T1,     LDC
1916         add             T2,     T2,     LDC
1917
1918 #ifndef TRMMKERNEL
1919         lxvd2x          vs8,    0,      T1
1920         lxvd2x          vs9,    o16,    T1
1921         lxvd2x          vs10,   o32,    T1
1922         lxvd2x          vs11,   o48,    T1
1923
1924         lxvd2x          vs12,   0,      T2
1925         lxvd2x          vs13,   o16,    T2
1926         lxvd2x          vs14,   o32,    T2
1927         lxvd2x          vs15,   o48,    T2
1928 #endif
1929
1930 #ifndef TRMMKERNEL
1931         xvmaddadp       vs8,    vs40,   alpha_r
1932         xvmaddadp       vs9,    vs41,   alpha_r
1933         xvmaddadp       vs10,   vs42,   alpha_r
1934         xvmaddadp       vs11,   vs43,   alpha_r
1935         xvmaddadp       vs12,   vs44,   alpha_r
1936         xvmaddadp       vs13,   vs45,   alpha_r
1937         xvmaddadp       vs14,   vs46,   alpha_r
1938         xvmaddadp       vs15,   vs47,   alpha_r
1939 #else
1940         xvmuldp         vs8,    vs40,   alpha_r
1941         xvmuldp         vs9,    vs41,   alpha_r
1942         xvmuldp         vs10,   vs42,   alpha_r
1943         xvmuldp         vs11,   vs43,   alpha_r
1944         xvmuldp         vs12,   vs44,   alpha_r
1945         xvmuldp         vs13,   vs45,   alpha_r
1946         xvmuldp         vs14,   vs46,   alpha_r
1947         xvmuldp         vs15,   vs47,   alpha_r
1948 #endif
1949
1950         stxvd2x         vs8,    0,      T1
1951         stxvd2x         vs9,    o16,    T1
1952         stxvd2x         vs10,   o32,    T1
1953         stxvd2x         vs11,   o48,    T1
1954
1955         stxvd2x         vs12,   0,      T2
1956         stxvd2x         vs13,   o16,    T2
1957         stxvd2x         vs14,   o32,    T2
1958         stxvd2x         vs15,   o48,    T2
1959
1960         addi            CO,     CO,     128
1961
1962 .endm
1963
1964 /*********************************************************************
1965 * Macros for N=4, M=8                                                *
1966 *********************************************************************/
1967
1968 .macro LOAD2x8_1
1969
1970         lxvd2x  vs0,    0,      AO
1971         lxvd2x  vs1,    o16,    AO
1972         lxvd2x  vs2,    o32,    AO
1973         lxvd2x  vs3,    o48,    AO
1974
1975         lxvdsx  vs24,   0,      BO
1976         lxvdsx  vs25,   o8,     BO
1977
1978         addi            AO, AO, 64
1979         addi            BO, BO, 16
1980
1981 .endm
1982
1983 .macro KERNEL2x8_I1
1984
1985         lxvd2x  vs8,    0,      AO
1986         lxvd2x  vs9,    o16,    AO
1987         lxvd2x  vs10,   o32,    AO
1988         lxvd2x  vs11,   o48,    AO
1989
1990         lxvdsx  vs28,   0,      BO
1991         lxvdsx  vs29,   o8,     BO
1992
1993         addi            AO, AO, 64
1994         addi            BO, BO, 16
1995
1996
1997         xvmuldp                 vs32,   vs0,    vs24
1998         xvmuldp                 vs33,   vs1,    vs24
1999         xvmuldp                 vs34,   vs2,    vs24
2000         xvmuldp                 vs35,   vs3,    vs24
2001
2002         xvmuldp                 vs40,   vs0,    vs25
2003         xvmuldp                 vs41,   vs1,    vs25
2004         xvmuldp                 vs42,   vs2,    vs25
2005         xvmuldp                 vs43,   vs3,    vs25
2006
2007 .endm
2008
2009 .macro KERNEL2x8_1
2010
2011         lxvd2x  vs8,    0,      AO
2012         lxvd2x  vs9,    o16,    AO
2013         lxvd2x  vs10,   o32,    AO
2014         lxvd2x  vs11,   o48,    AO
2015
2016         lxvdsx  vs28,   0,      BO
2017         lxvdsx  vs29,   o8,     BO
2018
2019         addi            AO, AO, 64
2020         addi            BO, BO, 16
2021
2022
2023         xvmaddadp               vs32,   vs0,    vs24
2024         xvmaddadp               vs33,   vs1,    vs24
2025         xvmaddadp               vs34,   vs2,    vs24
2026         xvmaddadp               vs35,   vs3,    vs24
2027
2028         xvmaddadp               vs40,   vs0,    vs25
2029         xvmaddadp               vs41,   vs1,    vs25
2030         xvmaddadp               vs42,   vs2,    vs25
2031         xvmaddadp               vs43,   vs3,    vs25
2032
2033 .endm
2034
2035 .macro KERNEL2x8_2
2036
2037         lxvd2x  vs0,    0,      AO
2038         lxvd2x  vs1,    o16,    AO
2039         lxvd2x  vs2,    o32,    AO
2040         lxvd2x  vs3,    o48,    AO
2041
2042         lxvdsx  vs24,   0,      BO
2043         lxvdsx  vs25,   o8,     BO
2044
2045         addi            AO, AO, 64
2046         addi            BO, BO, 16
2047
2048
2049         xvmaddadp               vs32,   vs8,    vs28
2050         xvmaddadp               vs33,   vs9,    vs28
2051         xvmaddadp               vs34,   vs10,   vs28
2052         xvmaddadp               vs35,   vs11,   vs28
2053
2054         xvmaddadp               vs40,   vs8,    vs29
2055         xvmaddadp               vs41,   vs9,    vs29
2056         xvmaddadp               vs42,   vs10,   vs29
2057         xvmaddadp               vs43,   vs11,   vs29
2058
2059 .endm
2060
2061 .macro KERNEL2x8_E2
2062
2063
2064         xvmaddadp               vs32,   vs8,    vs28
2065         xvmaddadp               vs33,   vs9,    vs28
2066         xvmaddadp               vs34,   vs10,   vs28
2067         xvmaddadp               vs35,   vs11,   vs28
2068
2069         xvmaddadp               vs40,   vs8,    vs29
2070         xvmaddadp               vs41,   vs9,    vs29
2071         xvmaddadp               vs42,   vs10,   vs29
2072         xvmaddadp               vs43,   vs11,   vs29
2073
2074 .endm
2075
2076 .macro KERNEL2x8_SUBI1
2077
2078         lxvd2x  vs0,    0,      AO
2079         lxvd2x  vs1,    o16,    AO
2080         lxvd2x  vs2,    o32,    AO
2081         lxvd2x  vs3,    o48,    AO
2082
2083         lxvdsx  vs24,   0,      BO
2084         lxvdsx  vs25,   o8,     BO
2085
2086         addi            AO, AO, 64
2087         addi            BO, BO, 16
2088
2089
2090         xvmuldp                 vs32,   vs0,    vs24
2091         xvmuldp                 vs33,   vs1,    vs24
2092         xvmuldp                 vs34,   vs2,    vs24
2093         xvmuldp                 vs35,   vs3,    vs24
2094
2095         xvmuldp                 vs40,   vs0,    vs25
2096         xvmuldp                 vs41,   vs1,    vs25
2097         xvmuldp                 vs42,   vs2,    vs25
2098         xvmuldp                 vs43,   vs3,    vs25
2099
2100 .endm
2101
2102 .macro KERNEL2x8_SUB1
2103
2104         lxvd2x  vs0,    0,      AO
2105         lxvd2x  vs1,    o16,    AO
2106         lxvd2x  vs2,    o32,    AO
2107         lxvd2x  vs3,    o48,    AO
2108
2109         lxvdsx  vs24,   0,      BO
2110         lxvdsx  vs25,   o8,     BO
2111
2112         addi            AO, AO, 64
2113         addi            BO, BO, 16
2114
2115
2116         xvmaddadp               vs32,   vs0,    vs24
2117         xvmaddadp               vs33,   vs1,    vs24
2118         xvmaddadp               vs34,   vs2,    vs24
2119         xvmaddadp               vs35,   vs3,    vs24
2120
2121         xvmaddadp               vs40,   vs0,    vs25
2122         xvmaddadp               vs41,   vs1,    vs25
2123         xvmaddadp               vs42,   vs2,    vs25
2124         xvmaddadp               vs43,   vs3,    vs25
2125
2126 .endm
2127
2128 .macro SAVE2x8
2129
2130         mr              T1,     CO
2131
2132 #ifndef TRMMKERNEL
2133         lxvd2x          vs0,    0,      T1
2134         lxvd2x          vs1,    o16,    T1
2135         lxvd2x          vs2,    o32,    T1
2136         lxvd2x          vs3,    o48,    T1
2137 #endif
2138
2139 #ifndef TRMMKERNEL
2140         xvmaddadp       vs0,    vs32,   alpha_r
2141         xvmaddadp       vs1,    vs33,   alpha_r
2142         xvmaddadp       vs2,    vs34,   alpha_r
2143         xvmaddadp       vs3,    vs35,   alpha_r
2144 #else
2145         xvmuldp         vs0,    vs32,   alpha_r
2146         xvmuldp         vs1,    vs33,   alpha_r
2147         xvmuldp         vs2,    vs34,   alpha_r
2148         xvmuldp         vs3,    vs35,   alpha_r
2149 #endif
2150
2151         stxvd2x         vs0,    0,      T1
2152         stxvd2x         vs1,    o16,    T1
2153         stxvd2x         vs2,    o32,    T1
2154         stxvd2x         vs3,    o48,    T1
2155
2156         add             T1,     T1,     LDC
2157
2158 #ifndef TRMMKERNEL
2159         lxvd2x          vs8,    0,      T1
2160         lxvd2x          vs9,    o16,    T1
2161         lxvd2x          vs10,   o32,    T1
2162         lxvd2x          vs11,   o48,    T1
2163 #endif
2164
2165 #ifndef TRMMKERNEL
2166         xvmaddadp       vs8,    vs40,   alpha_r
2167         xvmaddadp       vs9,    vs41,   alpha_r
2168         xvmaddadp       vs10,   vs42,   alpha_r
2169         xvmaddadp       vs11,   vs43,   alpha_r
2170 #else
2171         xvmuldp         vs8,    vs40,   alpha_r
2172         xvmuldp         vs9,    vs41,   alpha_r
2173         xvmuldp         vs10,   vs42,   alpha_r
2174         xvmuldp         vs11,   vs43,   alpha_r
2175 #endif
2176
2177         stxvd2x         vs8,    0,      T1
2178         stxvd2x         vs9,    o16,    T1
2179         stxvd2x         vs10,   o32,    T1
2180         stxvd2x         vs11,   o48,    T1
2181
2182         addi            CO,     CO,     64
2183
2184 .endm
2185
2186 /*********************************************************************
2187 * Macros for N=2, M=4                                                *
2188 *********************************************************************/
2189
2190 .macro LOAD2x4_1
2191
2192         lxvd2x  vs0,    0,      AO
2193         lxvd2x  vs1,    o16,    AO
2194
2195         lxvdsx  vs24,   0,      BO
2196         lxvdsx  vs25,   o8,     BO
2197
2198         addi            AO, AO, 32
2199         addi            BO, BO, 16
2200
2201 .endm
2202
2203 .macro KERNEL2x4_I1
2204
2205         lxvd2x  vs8,    0,      AO
2206         lxvd2x  vs9,    o16,    AO
2207
2208         lxvdsx  vs28,   0,      BO
2209         lxvdsx  vs29,   o8,     BO
2210
2211         addi            AO, AO, 32
2212         addi            BO, BO, 16
2213
2214
2215         xvmuldp                 vs32,   vs0,    vs24
2216         xvmuldp                 vs33,   vs1,    vs24
2217
2218         xvmuldp                 vs40,   vs0,    vs25
2219         xvmuldp                 vs41,   vs1,    vs25
2220
2221 .endm
2222
2223 .macro KERNEL2x4_1
2224
2225         lxvd2x  vs8,    0,      AO
2226         lxvd2x  vs9,    o16,    AO
2227
2228         lxvdsx  vs28,   0,      BO
2229         lxvdsx  vs29,   o8,     BO
2230
2231         addi            AO, AO, 32
2232         addi            BO, BO, 16
2233
2234
2235         xvmaddadp               vs32,   vs0,    vs24
2236         xvmaddadp               vs33,   vs1,    vs24
2237
2238         xvmaddadp               vs40,   vs0,    vs25
2239         xvmaddadp               vs41,   vs1,    vs25
2240
2241 .endm
2242
2243 .macro KERNEL2x4_2
2244
2245         lxvd2x  vs0,    0,      AO
2246         lxvd2x  vs1,    o16,    AO
2247
2248         lxvdsx  vs24,   0,      BO
2249         lxvdsx  vs25,   o8,     BO
2250
2251         addi            AO, AO, 32
2252         addi            BO, BO, 16
2253
2254
2255         xvmaddadp               vs32,   vs8,    vs28
2256         xvmaddadp               vs33,   vs9,    vs28
2257
2258         xvmaddadp               vs40,   vs8,    vs29
2259         xvmaddadp               vs41,   vs9,    vs29
2260
2261 .endm
2262
2263 .macro KERNEL2x4_E2
2264
2265
2266         xvmaddadp               vs32,   vs8,    vs28
2267         xvmaddadp               vs33,   vs9,    vs28
2268
2269         xvmaddadp               vs40,   vs8,    vs29
2270         xvmaddadp               vs41,   vs9,    vs29
2271
2272 .endm
2273
2274 .macro KERNEL2x4_SUBI1
2275
2276         lxvd2x  vs0,    0,      AO
2277         lxvd2x  vs1,    o16,    AO
2278
2279         lxvdsx  vs24,   0,      BO
2280         lxvdsx  vs25,   o8,     BO
2281
2282         addi            AO, AO, 32
2283         addi            BO, BO, 16
2284
2285
2286         xvmuldp                 vs32,   vs0,    vs24
2287         xvmuldp                 vs33,   vs1,    vs24
2288
2289         xvmuldp                 vs40,   vs0,    vs25
2290         xvmuldp                 vs41,   vs1,    vs25
2291
2292 .endm
2293
2294 .macro KERNEL2x4_SUB1
2295
2296         lxvd2x  vs0,    0,      AO
2297         lxvd2x  vs1,    o16,    AO
2298
2299         lxvdsx  vs24,   0,      BO
2300         lxvdsx  vs25,   o8,     BO
2301
2302         addi            AO, AO, 32
2303         addi            BO, BO, 16
2304
2305
2306         xvmaddadp               vs32,   vs0,    vs24
2307         xvmaddadp               vs33,   vs1,    vs24
2308
2309         xvmaddadp               vs40,   vs0,    vs25
2310         xvmaddadp               vs41,   vs1,    vs25
2311
2312 .endm
2313
2314 .macro SAVE2x4
2315
2316         mr              T1,     CO
2317
2318 #ifndef TRMMKERNEL
2319         lxvd2x          vs0,    0,      T1
2320         lxvd2x          vs1,    o16,    T1
2321 #endif
2322
2323 #ifndef TRMMKERNEL
2324         xvmaddadp       vs0,    vs32,   alpha_r
2325         xvmaddadp       vs1,    vs33,   alpha_r
2326 #else
2327         xvmuldp         vs0,    vs32,   alpha_r
2328         xvmuldp         vs1,    vs33,   alpha_r
2329 #endif
2330
2331         stxvd2x         vs0,    0,      T1
2332         stxvd2x         vs1,    o16,    T1
2333
2334         add             T1,     T1,     LDC
2335
2336 #ifndef TRMMKERNEL
2337         lxvd2x          vs8,    0,      T1
2338         lxvd2x          vs9,    o16,    T1
2339 #endif
2340
2341 #ifndef TRMMKERNEL
2342         xvmaddadp       vs8,    vs40,   alpha_r
2343         xvmaddadp       vs9,    vs41,   alpha_r
2344 #else
2345         xvmuldp         vs8,    vs40,   alpha_r
2346         xvmuldp         vs9,    vs41,   alpha_r
2347 #endif
2348
2349         stxvd2x         vs8,    0,      T1
2350         stxvd2x         vs9,    o16,    T1
2351
2352         addi            CO,     CO,     32
2353
2354 .endm
2355
2356 /*********************************************************************
2357 * Macros for N=2, M=2                                                *
2358 *********************************************************************/
2359
2360 .macro LOAD2x2_1
2361
2362         lxvd2x  vs0,    0,      AO
2363
2364         lxvdsx  vs24,   0,      BO
2365         lxvdsx  vs25,   o8,     BO
2366
2367         addi            AO, AO, 16
2368         addi            BO, BO, 16
2369
2370 .endm
2371
2372 .macro KERNEL2x2_I1
2373
2374         lxvd2x  vs8,    0,      AO
2375
2376         lxvdsx  vs28,   0,      BO
2377         lxvdsx  vs29,   o8,     BO
2378
2379         addi            AO, AO, 16
2380         addi            BO, BO, 16
2381
2382
2383         xvmuldp                 vs32,   vs0,    vs24
2384
2385         xvmuldp                 vs40,   vs0,    vs25
2386
2387 .endm
2388
2389 .macro KERNEL2x2_1
2390
2391         lxvd2x  vs8,    0,      AO
2392
2393         lxvdsx  vs28,   0,      BO
2394         lxvdsx  vs29,   o8,     BO
2395
2396         addi            AO, AO, 16
2397         addi            BO, BO, 16
2398
2399
2400         xvmaddadp               vs32,   vs0,    vs24
2401
2402         xvmaddadp               vs40,   vs0,    vs25
2403
2404 .endm
2405
2406 .macro KERNEL2x2_2
2407
2408         lxvd2x  vs0,    0,      AO
2409
2410         lxvdsx  vs24,   0,      BO
2411         lxvdsx  vs25,   o8,     BO
2412
2413         addi            AO, AO, 16
2414         addi            BO, BO, 16
2415
2416
2417         xvmaddadp               vs32,   vs8,    vs28
2418
2419         xvmaddadp               vs40,   vs8,    vs29
2420
2421 .endm
2422
2423 .macro KERNEL2x2_E2
2424
2425
2426         xvmaddadp               vs32,   vs8,    vs28
2427
2428         xvmaddadp               vs40,   vs8,    vs29
2429
2430 .endm
2431
2432 .macro KERNEL2x2_SUBI1
2433
2434         lxvd2x  vs0,    0,      AO
2435
2436         lxvdsx  vs24,   0,      BO
2437         lxvdsx  vs25,   o8,     BO
2438
2439         addi            AO, AO, 16
2440         addi            BO, BO, 16
2441
2442
2443         xvmuldp                 vs32,   vs0,    vs24
2444
2445         xvmuldp                 vs40,   vs0,    vs25
2446
2447 .endm
2448
2449 .macro KERNEL2x2_SUB1
2450
2451         lxvd2x  vs0,    0,      AO
2452
2453         lxvdsx  vs24,   0,      BO
2454         lxvdsx  vs25,   o8,     BO
2455
2456         addi            AO, AO, 16
2457         addi            BO, BO, 16
2458
2459
2460         xvmaddadp               vs32,   vs0,    vs24
2461
2462         xvmaddadp               vs40,   vs0,    vs25
2463
2464 .endm
2465
2466 .macro SAVE2x2
2467
2468         mr              T1,     CO
2469
2470 #ifndef TRMMKERNEL
2471         lxvd2x          vs0,    0,      T1
2472 #endif
2473
2474 #ifndef TRMMKERNEL
2475         xvmaddadp       vs0,    vs32,   alpha_r
2476 #else
2477         xvmuldp         vs0,    vs32,   alpha_r
2478 #endif
2479
2480         stxvd2x         vs0,    0,      T1
2481
2482         add             T1,     T1,     LDC
2483
2484 #ifndef TRMMKERNEL
2485         lxvd2x          vs8,    0,      T1
2486 #endif
2487
2488 #ifndef TRMMKERNEL
2489         xvmaddadp       vs8,    vs40,   alpha_r
2490 #else
2491         xvmuldp         vs8,    vs40,   alpha_r
2492 #endif
2493
2494         stxvd2x         vs8,    0,      T1
2495
2496         addi            CO,     CO,     16
2497
2498 .endm
2499
2500 /*********************************************************************
2501 * Macros for N=2, M=1                                                *
2502 *********************************************************************/
2503
2504 .macro LOAD2x1_1
2505
2506         lxsdx   vs0,    0,      AO
2507
2508         lxsdx   vs24,   0,      BO
2509         lxsdx   vs25,   o8,     BO
2510
2511         addi            AO, AO, 8
2512         addi            BO, BO, 16
2513
2514 .endm
2515
2516 .macro KERNEL2x1_I1
2517
2518         lxsdx   vs8,    0,      AO
2519
2520         lxsdx   vs28,   0,      BO
2521         lxsdx   vs29,   o8,     BO
2522
2523         addi            AO, AO, 8
2524         addi            BO, BO, 16
2525
2526
2527         xsmuldp                 vs32,   vs0,    vs24
2528
2529         xsmuldp                 vs40,   vs0,    vs25
2530
2531 .endm
2532
2533 .macro KERNEL2x1_1
2534
2535         lxsdx   vs8,    0,      AO
2536
2537         lxsdx   vs28,   0,      BO
2538         lxsdx   vs29,   o8,     BO
2539
2540         addi            AO, AO, 8
2541         addi            BO, BO, 16
2542
2543
2544         xsmaddadp               vs32,   vs0,    vs24
2545
2546         xsmaddadp               vs40,   vs0,    vs25
2547
2548 .endm
2549
2550 .macro KERNEL2x1_2
2551
2552         lxsdx   vs0,    0,      AO
2553
2554         lxsdx   vs24,   0,      BO
2555         lxsdx   vs25,   o8,     BO
2556
2557         addi            AO, AO, 8
2558         addi            BO, BO, 16
2559
2560
2561         xsmaddadp               vs32,   vs8,    vs28
2562
2563         xsmaddadp               vs40,   vs8,    vs29
2564
2565 .endm
2566
2567 .macro KERNEL2x1_E2
2568
2569
2570         xsmaddadp               vs32,   vs8,    vs28
2571
2572         xsmaddadp               vs40,   vs8,    vs29
2573
2574 .endm
2575
2576 .macro KERNEL2x1_SUBI1
2577
2578         lxsdx   vs0,    0,      AO
2579
2580         lxsdx   vs24,   0,      BO
2581         lxsdx   vs25,   o8,     BO
2582
2583         addi            AO, AO, 8
2584         addi            BO, BO, 16
2585
2586
2587         xsmuldp                 vs32,   vs0,    vs24
2588
2589         xsmuldp                 vs40,   vs0,    vs25
2590
2591 .endm
2592
2593 .macro KERNEL2x1_SUB1
2594
2595         lxsdx   vs0,    0,      AO
2596
2597         lxsdx   vs24,   0,      BO
2598         lxsdx   vs25,   o8,     BO
2599
2600         addi            AO, AO, 8
2601         addi            BO, BO, 16
2602
2603
2604         xsmaddadp               vs32,   vs0,    vs24
2605
2606         xsmaddadp               vs40,   vs0,    vs25
2607
2608 .endm
2609
2610 .macro SAVE2x1
2611
2612         mr              T1,     CO
2613
2614 #ifndef TRMMKERNEL
2615         lxsdx           vs0,    0,      T1
2616 #endif
2617
2618 #ifndef TRMMKERNEL
2619         xsmaddadp       vs0,    vs32,   alpha_r
2620 #else
2621         xsmuldp         vs0,    vs32,   alpha_r
2622 #endif
2623
2624         stxsdx          vs0,    0,      T1
2625
2626         add             T1,     T1,     LDC
2627
2628 #ifndef TRMMKERNEL
2629         lxsdx           vs8,    0,      T1
2630 #endif
2631
2632 #ifndef TRMMKERNEL
2633         xsmaddadp       vs8,    vs40,   alpha_r
2634 #else
2635         xsmuldp         vs8,    vs40,   alpha_r
2636 #endif
2637
2638         stxsdx          vs8,    0,      T1
2639
2640         addi            CO,     CO,     8
2641
2642 .endm
2643
2644 /*********************************************************************
2645 * Macros for N=1, M=16                                               *
2646 *********************************************************************/
2647
2648 .macro LOAD1x16_1
2649
2650         lxvd2x  vs0,    0,      AO
2651         lxvd2x  vs1,    o16,    AO
2652         lxvd2x  vs2,    o32,    AO
2653         lxvd2x  vs3,    o48,    AO
2654
2655         lxvdsx  vs24,   0,      BO
2656
2657         addi            AO, AO, 64
2658         addi            BO, BO, 8
2659
2660         lxvd2x  vs4,    0,      AO
2661         lxvd2x  vs5,    o16,    AO
2662         lxvd2x  vs6,    o32,    AO
2663         lxvd2x  vs7,    o48,    AO
2664
2665         addi            AO, AO, 64
2666
2667 .endm
2668
2669 .macro KERNEL1x16_I1
2670
2671         lxvd2x  vs8,    0,      AO
2672         lxvd2x  vs9,    o16,    AO
2673         lxvd2x  vs10,   o32,    AO
2674         lxvd2x  vs11,   o48,    AO
2675
2676         lxvdsx  vs28,   0,      BO
2677
2678         addi            AO, AO, 64
2679         addi            BO, BO, 8
2680
2681         lxvd2x  vs12,   0,      AO
2682         lxvd2x  vs13,   o16,    AO
2683         lxvd2x  vs14,   o32,    AO
2684         lxvd2x  vs15,   o48,    AO
2685
2686         addi            AO, AO, 64
2687
2688
2689         xvmuldp                 vs32,   vs0,    vs24
2690         xvmuldp                 vs33,   vs1,    vs24
2691         xvmuldp                 vs34,   vs2,    vs24
2692         xvmuldp                 vs35,   vs3,    vs24
2693         xvmuldp                 vs36,   vs4,    vs24
2694         xvmuldp                 vs37,   vs5,    vs24
2695         xvmuldp                 vs38,   vs6,    vs24
2696         xvmuldp                 vs39,   vs7,    vs24
2697
2698 .endm
2699
2700 .macro KERNEL1x16_1
2701
2702         lxvd2x  vs8,    0,      AO
2703         lxvd2x  vs9,    o16,    AO
2704         lxvd2x  vs10,   o32,    AO
2705         lxvd2x  vs11,   o48,    AO
2706
2707         lxvdsx  vs28,   0,      BO
2708
2709         addi            AO, AO, 64
2710         addi            BO, BO, 8
2711
2712         lxvd2x  vs12,   0,      AO
2713         lxvd2x  vs13,   o16,    AO
2714         lxvd2x  vs14,   o32,    AO
2715         lxvd2x  vs15,   o48,    AO
2716
2717         addi            AO, AO, 64
2718
2719
2720         xvmaddadp               vs32,   vs0,    vs24
2721         xvmaddadp               vs33,   vs1,    vs24
2722         xvmaddadp               vs34,   vs2,    vs24
2723         xvmaddadp               vs35,   vs3,    vs24
2724         xvmaddadp               vs36,   vs4,    vs24
2725         xvmaddadp               vs37,   vs5,    vs24
2726         xvmaddadp               vs38,   vs6,    vs24
2727         xvmaddadp               vs39,   vs7,    vs24
2728
2729 .endm
2730
2731 .macro KERNEL1x16_2
2732
2733         lxvd2x  vs0,    0,      AO
2734         lxvd2x  vs1,    o16,    AO
2735         lxvd2x  vs2,    o32,    AO
2736         lxvd2x  vs3,    o48,    AO
2737
2738         lxvdsx  vs24,   0,      BO
2739
2740         addi            AO, AO, 64
2741         addi            BO, BO, 8
2742
2743         lxvd2x  vs4,    0,      AO
2744         lxvd2x  vs5,    o16,    AO
2745         lxvd2x  vs6,    o32,    AO
2746         lxvd2x  vs7,    o48,    AO
2747
2748         addi            AO, AO, 64
2749
2750
2751         xvmaddadp               vs32,   vs8,    vs28
2752         xvmaddadp               vs33,   vs9,    vs28
2753         xvmaddadp               vs34,   vs10,   vs28
2754         xvmaddadp               vs35,   vs11,   vs28
2755         xvmaddadp               vs36,   vs12,   vs28
2756         xvmaddadp               vs37,   vs13,   vs28
2757         xvmaddadp               vs38,   vs14,   vs28
2758         xvmaddadp               vs39,   vs15,   vs28
2759
2760 .endm
2761
2762 .macro KERNEL1x16_E2
2763
2764
2765         xvmaddadp               vs32,   vs8,    vs28
2766         xvmaddadp               vs33,   vs9,    vs28
2767         xvmaddadp               vs34,   vs10,   vs28
2768         xvmaddadp               vs35,   vs11,   vs28
2769         xvmaddadp               vs36,   vs12,   vs28
2770         xvmaddadp               vs37,   vs13,   vs28
2771         xvmaddadp               vs38,   vs14,   vs28
2772         xvmaddadp               vs39,   vs15,   vs28
2773
2774 .endm
2775
2776 .macro KERNEL1x16_SUBI1
2777
2778         lxvd2x  vs0,    0,      AO
2779         lxvd2x  vs1,    o16,    AO
2780         lxvd2x  vs2,    o32,    AO
2781         lxvd2x  vs3,    o48,    AO
2782
2783         lxvdsx  vs24,   0,      BO
2784
2785         addi            AO, AO, 64
2786         addi            BO, BO, 8
2787
2788         lxvd2x  vs4,    0,      AO
2789         lxvd2x  vs5,    o16,    AO
2790         lxvd2x  vs6,    o32,    AO
2791         lxvd2x  vs7,    o48,    AO
2792
2793         addi            AO, AO, 64
2794
2795
2796         xvmuldp                 vs32,   vs0,    vs24
2797         xvmuldp                 vs33,   vs1,    vs24
2798         xvmuldp                 vs34,   vs2,    vs24
2799         xvmuldp                 vs35,   vs3,    vs24
2800         xvmuldp                 vs36,   vs4,    vs24
2801         xvmuldp                 vs37,   vs5,    vs24
2802         xvmuldp                 vs38,   vs6,    vs24
2803         xvmuldp                 vs39,   vs7,    vs24
2804
2805 .endm
2806
2807 .macro KERNEL1x16_SUB1
2808
2809         lxvd2x  vs0,    0,      AO
2810         lxvd2x  vs1,    o16,    AO
2811         lxvd2x  vs2,    o32,    AO
2812         lxvd2x  vs3,    o48,    AO
2813
2814         lxvdsx  vs24,   0,      BO
2815
2816         addi            AO, AO, 64
2817         addi            BO, BO, 8
2818
2819         lxvd2x  vs4,    0,      AO
2820         lxvd2x  vs5,    o16,    AO
2821         lxvd2x  vs6,    o32,    AO
2822         lxvd2x  vs7,    o48,    AO
2823
2824         addi            AO, AO, 64
2825
2826
2827         xvmaddadp               vs32,   vs0,    vs24
2828         xvmaddadp               vs33,   vs1,    vs24
2829         xvmaddadp               vs34,   vs2,    vs24
2830         xvmaddadp               vs35,   vs3,    vs24
2831         xvmaddadp               vs36,   vs4,    vs24
2832         xvmaddadp               vs37,   vs5,    vs24
2833         xvmaddadp               vs38,   vs6,    vs24
2834         xvmaddadp               vs39,   vs7,    vs24
2835
2836 .endm
2837
2838 .macro SAVE1x16
2839
2840         mr              T1,     CO
2841         addi            T2,     T1,     64
2842
2843 #ifndef TRMMKERNEL
2844         lxvd2x          vs0,    0,      T1
2845         lxvd2x          vs1,    o16,    T1
2846         lxvd2x          vs2,    o32,    T1
2847         lxvd2x          vs3,    o48,    T1
2848
2849         lxvd2x          vs4,    0,      T2
2850         lxvd2x          vs5,    o16,    T2
2851         lxvd2x          vs6,    o32,    T2
2852         lxvd2x          vs7,    o48,    T2
2853 #endif
2854
2855 #ifndef TRMMKERNEL
2856         xvmaddadp       vs0,    vs32,   alpha_r
2857         xvmaddadp       vs1,    vs33,   alpha_r
2858         xvmaddadp       vs2,    vs34,   alpha_r
2859         xvmaddadp       vs3,    vs35,   alpha_r
2860         xvmaddadp       vs4,    vs36,   alpha_r
2861         xvmaddadp       vs5,    vs37,   alpha_r
2862         xvmaddadp       vs6,    vs38,   alpha_r
2863         xvmaddadp       vs7,    vs39,   alpha_r
2864 #else
2865         xvmuldp         vs0,    vs32,   alpha_r
2866         xvmuldp         vs1,    vs33,   alpha_r
2867         xvmuldp         vs2,    vs34,   alpha_r
2868         xvmuldp         vs3,    vs35,   alpha_r
2869         xvmuldp         vs4,    vs36,   alpha_r
2870         xvmuldp         vs5,    vs37,   alpha_r
2871         xvmuldp         vs6,    vs38,   alpha_r
2872         xvmuldp         vs7,    vs39,   alpha_r
2873 #endif
2874
2875         stxvd2x         vs0,    0,      T1
2876         stxvd2x         vs1,    o16,    T1
2877         stxvd2x         vs2,    o32,    T1
2878         stxvd2x         vs3,    o48,    T1
2879
2880         stxvd2x         vs4,    0,      T2
2881         stxvd2x         vs5,    o16,    T2
2882         stxvd2x         vs6,    o32,    T2
2883         stxvd2x         vs7,    o48,    T2
2884
2885         addi            CO,     CO,     128
2886
2887 .endm
2888
2889 /*********************************************************************
2890 * Macros for N=4, M=8                                                *
2891 *********************************************************************/
2892
2893 .macro LOAD1x8_1
2894
2895         lxvd2x  vs0,    0,      AO
2896         lxvd2x  vs1,    o16,    AO
2897         lxvd2x  vs2,    o32,    AO
2898         lxvd2x  vs3,    o48,    AO
2899
2900         lxvdsx  vs24,   0,      BO
2901
2902         addi            AO, AO, 64
2903         addi            BO, BO, 8
2904
2905 .endm
2906
2907 .macro KERNEL1x8_I1
2908
2909         lxvd2x  vs8,    0,      AO
2910         lxvd2x  vs9,    o16,    AO
2911         lxvd2x  vs10,   o32,    AO
2912         lxvd2x  vs11,   o48,    AO
2913
2914         lxvdsx  vs28,   0,      BO
2915
2916         addi            AO, AO, 64
2917         addi            BO, BO, 8
2918
2919
2920         xvmuldp                 vs32,   vs0,    vs24
2921         xvmuldp                 vs33,   vs1,    vs24
2922         xvmuldp                 vs34,   vs2,    vs24
2923         xvmuldp                 vs35,   vs3,    vs24
2924
2925 .endm
2926
2927 .macro KERNEL1x8_1
2928
2929         lxvd2x  vs8,    0,      AO
2930         lxvd2x  vs9,    o16,    AO
2931         lxvd2x  vs10,   o32,    AO
2932         lxvd2x  vs11,   o48,    AO
2933
2934         lxvdsx  vs28,   0,      BO
2935
2936         addi            AO, AO, 64
2937         addi            BO, BO, 8
2938
2939
2940         xvmaddadp               vs32,   vs0,    vs24
2941         xvmaddadp               vs33,   vs1,    vs24
2942         xvmaddadp               vs34,   vs2,    vs24
2943         xvmaddadp               vs35,   vs3,    vs24
2944
2945 .endm
2946
2947 .macro KERNEL1x8_2
2948
2949         lxvd2x  vs0,    0,      AO
2950         lxvd2x  vs1,    o16,    AO
2951         lxvd2x  vs2,    o32,    AO
2952         lxvd2x  vs3,    o48,    AO
2953
2954         lxvdsx  vs24,   0,      BO
2955
2956         addi            AO, AO, 64
2957         addi            BO, BO, 8
2958
2959
2960         xvmaddadp               vs32,   vs8,    vs28
2961         xvmaddadp               vs33,   vs9,    vs28
2962         xvmaddadp               vs34,   vs10,   vs28
2963         xvmaddadp               vs35,   vs11,   vs28
2964
2965 .endm
2966
2967 .macro KERNEL1x8_E2
2968
2969
2970         xvmaddadp               vs32,   vs8,    vs28
2971         xvmaddadp               vs33,   vs9,    vs28
2972         xvmaddadp               vs34,   vs10,   vs28
2973         xvmaddadp               vs35,   vs11,   vs28
2974
2975 .endm
2976
2977 .macro KERNEL1x8_SUBI1
2978
2979         lxvd2x  vs0,    0,      AO
2980         lxvd2x  vs1,    o16,    AO
2981         lxvd2x  vs2,    o32,    AO
2982         lxvd2x  vs3,    o48,    AO
2983
2984         lxvdsx  vs24,   0,      BO
2985
2986         addi            AO, AO, 64
2987         addi            BO, BO, 8
2988
2989
2990         xvmuldp                 vs32,   vs0,    vs24
2991         xvmuldp                 vs33,   vs1,    vs24
2992         xvmuldp                 vs34,   vs2,    vs24
2993         xvmuldp                 vs35,   vs3,    vs24
2994
2995 .endm
2996
2997 .macro KERNEL1x8_SUB1
2998
2999         lxvd2x  vs0,    0,      AO
3000         lxvd2x  vs1,    o16,    AO
3001         lxvd2x  vs2,    o32,    AO
3002         lxvd2x  vs3,    o48,    AO
3003
3004         lxvdsx  vs24,   0,      BO
3005
3006         addi            AO, AO, 64
3007         addi            BO, BO, 8
3008
3009
3010         xvmaddadp               vs32,   vs0,    vs24
3011         xvmaddadp               vs33,   vs1,    vs24
3012         xvmaddadp               vs34,   vs2,    vs24
3013         xvmaddadp               vs35,   vs3,    vs24
3014
3015 .endm
3016
3017 .macro SAVE1x8
3018
3019         mr              T1,     CO
3020
3021 #ifndef TRMMKERNEL
3022         lxvd2x          vs0,    0,      T1
3023         lxvd2x          vs1,    o16,    T1
3024         lxvd2x          vs2,    o32,    T1
3025         lxvd2x          vs3,    o48,    T1
3026 #endif
3027
3028 #ifndef TRMMKERNEL
3029         xvmaddadp       vs0,    vs32,   alpha_r
3030         xvmaddadp       vs1,    vs33,   alpha_r
3031         xvmaddadp       vs2,    vs34,   alpha_r
3032         xvmaddadp       vs3,    vs35,   alpha_r
3033 #else
3034         xvmuldp         vs0,    vs32,   alpha_r
3035         xvmuldp         vs1,    vs33,   alpha_r
3036         xvmuldp         vs2,    vs34,   alpha_r
3037         xvmuldp         vs3,    vs35,   alpha_r
3038 #endif
3039
3040         stxvd2x         vs0,    0,      T1
3041         stxvd2x         vs1,    o16,    T1
3042         stxvd2x         vs2,    o32,    T1
3043         stxvd2x         vs3,    o48,    T1
3044
3045         addi            CO,     CO,     64
3046
3047 .endm
3048
3049 /*********************************************************************
3050 * Macros for N=1, M=4                                                *
3051 *********************************************************************/
3052
3053 .macro LOAD1x4_1
3054
3055         lxvd2x  vs0,    0,      AO
3056         lxvd2x  vs1,    o16,    AO
3057
3058         lxvdsx  vs24,   0,      BO
3059
3060         addi            AO, AO, 32
3061         addi            BO, BO, 8
3062
3063 .endm
3064
3065 .macro KERNEL1x4_I1
3066
3067         lxvd2x  vs8,    0,      AO
3068         lxvd2x  vs9,    o16,    AO
3069
3070         lxvdsx  vs28,   0,      BO
3071
3072         addi            AO, AO, 32
3073         addi            BO, BO, 8
3074
3075
3076         xvmuldp                 vs32,   vs0,    vs24
3077         xvmuldp                 vs33,   vs1,    vs24
3078
3079 .endm
3080
3081 .macro KERNEL1x4_1
3082
3083         lxvd2x  vs8,    0,      AO
3084         lxvd2x  vs9,    o16,    AO
3085
3086         lxvdsx  vs28,   0,      BO
3087
3088         addi            AO, AO, 32
3089         addi            BO, BO, 8
3090
3091
3092         xvmaddadp               vs32,   vs0,    vs24
3093         xvmaddadp               vs33,   vs1,    vs24
3094
3095 .endm
3096
3097 .macro KERNEL1x4_2
3098
3099         lxvd2x  vs0,    0,      AO
3100         lxvd2x  vs1,    o16,    AO
3101
3102         lxvdsx  vs24,   0,      BO
3103
3104         addi            AO, AO, 32
3105         addi            BO, BO, 8
3106
3107
3108         xvmaddadp               vs32,   vs8,    vs28
3109         xvmaddadp               vs33,   vs9,    vs28
3110
3111 .endm
3112
3113 .macro KERNEL1x4_E2
3114
3115
3116         xvmaddadp               vs32,   vs8,    vs28
3117         xvmaddadp               vs33,   vs9,    vs28
3118
3119 .endm
3120
3121 .macro KERNEL1x4_SUBI1
3122
3123         lxvd2x  vs0,    0,      AO
3124         lxvd2x  vs1,    o16,    AO
3125
3126         lxvdsx  vs24,   0,      BO
3127
3128         addi            AO, AO, 32
3129         addi            BO, BO, 8
3130
3131
3132         xvmuldp                 vs32,   vs0,    vs24
3133         xvmuldp                 vs33,   vs1,    vs24
3134
3135 .endm
3136
3137 .macro KERNEL1x4_SUB1
3138
3139         lxvd2x  vs0,    0,      AO
3140         lxvd2x  vs1,    o16,    AO
3141
3142         lxvdsx  vs24,   0,      BO
3143
3144         addi            AO, AO, 32
3145         addi            BO, BO, 8
3146
3147
3148         xvmaddadp               vs32,   vs0,    vs24
3149         xvmaddadp               vs33,   vs1,    vs24
3150
3151 .endm
3152
3153 .macro SAVE1x4
3154
3155         mr              T1,     CO
3156
3157 #ifndef TRMMKERNEL
3158         lxvd2x          vs0,    0,      T1
3159         lxvd2x          vs1,    o16,    T1
3160 #endif
3161
3162 #ifndef TRMMKERNEL
3163         xvmaddadp       vs0,    vs32,   alpha_r
3164         xvmaddadp       vs1,    vs33,   alpha_r
3165 #else
3166         xvmuldp         vs0,    vs32,   alpha_r
3167         xvmuldp         vs1,    vs33,   alpha_r
3168 #endif
3169
3170         stxvd2x         vs0,    0,      T1
3171         stxvd2x         vs1,    o16,    T1
3172
3173         addi            CO,     CO,     32
3174
3175 .endm
3176
3177 /*********************************************************************
3178 * Macros for N=1, M=2                                                *
3179 *********************************************************************/
3180
3181 .macro LOAD1x2_1
3182
3183         lxvd2x  vs0,    0,      AO
3184
3185         lxvdsx  vs24,   0,      BO
3186
3187         addi            AO, AO, 16
3188         addi            BO, BO, 8
3189
3190 .endm
3191
3192 .macro KERNEL1x2_I1
3193
3194         lxvd2x  vs8,    0,      AO
3195
3196         lxvdsx  vs28,   0,      BO
3197
3198         addi            AO, AO, 16
3199         addi            BO, BO, 8
3200
3201
3202         xvmuldp                 vs32,   vs0,    vs24
3203
3204 .endm
3205
3206 .macro KERNEL1x2_1
3207
3208         lxvd2x  vs8,    0,      AO
3209
3210         lxvdsx  vs28,   0,      BO
3211
3212         addi            AO, AO, 16
3213         addi            BO, BO, 8
3214
3215
3216         xvmaddadp               vs32,   vs0,    vs24
3217
3218 .endm
3219
3220 .macro KERNEL1x2_2
3221
3222         lxvd2x  vs0,    0,      AO
3223
3224         lxvdsx  vs24,   0,      BO
3225
3226         addi            AO, AO, 16
3227         addi            BO, BO, 8
3228
3229
3230         xvmaddadp               vs32,   vs8,    vs28
3231
3232 .endm
3233
3234 .macro KERNEL1x2_E2
3235
3236
3237         xvmaddadp               vs32,   vs8,    vs28
3238
3239 .endm
3240
3241 .macro KERNEL1x2_SUBI1
3242
3243         lxvd2x  vs0,    0,      AO
3244
3245         lxvdsx  vs24,   0,      BO
3246
3247         addi            AO, AO, 16
3248         addi            BO, BO, 8
3249
3250
3251         xvmuldp                 vs32,   vs0,    vs24
3252
3253 .endm
3254
3255 .macro KERNEL1x2_SUB1
3256
3257         lxvd2x  vs0,    0,      AO
3258
3259         lxvdsx  vs24,   0,      BO
3260
3261         addi            AO, AO, 16
3262         addi            BO, BO, 8
3263
3264
3265         xvmaddadp               vs32,   vs0,    vs24
3266
3267 .endm
3268
3269 .macro SAVE1x2
3270
3271         mr              T1,     CO
3272
3273 #ifndef TRMMKERNEL
3274         lxvd2x          vs0,    0,      T1
3275 #endif
3276
3277 #ifndef TRMMKERNEL
3278         xvmaddadp       vs0,    vs32,   alpha_r
3279 #else
3280         xvmuldp         vs0,    vs32,   alpha_r
3281 #endif
3282
3283         stxvd2x         vs0,    0,      T1
3284
3285         addi            CO,     CO,     16
3286
3287 .endm
3288
3289 /*********************************************************************
3290 * Macros for N=1, M=1                                                *
3291 *********************************************************************/
3292
3293 .macro LOAD1x1_1
3294
3295         lxsdx   vs0,    0,      AO
3296
3297         lxsdx   vs24,   0,      BO
3298
3299         addi            AO, AO, 8
3300         addi            BO, BO, 8
3301
3302 .endm
3303
3304 .macro KERNEL1x1_I1
3305
3306         lxsdx   vs8,    0,      AO
3307
3308         lxsdx   vs28,   0,      BO
3309
3310         addi            AO, AO, 8
3311         addi            BO, BO, 8
3312
3313
3314         xsmuldp                 vs32,   vs0,    vs24
3315
3316 .endm
3317
3318 .macro KERNEL1x1_1
3319
3320         lxsdx   vs8,    0,      AO
3321
3322         lxsdx   vs28,   0,      BO
3323
3324         addi            AO, AO, 8
3325         addi            BO, BO, 8
3326
3327
3328         xsmaddadp               vs32,   vs0,    vs24
3329
3330 .endm
3331
3332 .macro KERNEL1x1_2
3333
3334         lxsdx   vs0,    0,      AO
3335
3336         lxsdx   vs24,   0,      BO
3337
3338         addi            AO, AO, 8
3339         addi            BO, BO, 8
3340
3341
3342         xsmaddadp               vs32,   vs8,    vs28
3343
3344 .endm
3345
3346 .macro KERNEL1x1_E2
3347
3348
3349         xsmaddadp               vs32,   vs8,    vs28
3350
3351 .endm
3352
3353 .macro KERNEL1x1_SUBI1
3354
3355         lxsdx   vs0,    0,      AO
3356
3357         lxsdx   vs24,   0,      BO
3358
3359         addi            AO, AO, 8
3360         addi            BO, BO, 8
3361
3362
3363         xsmuldp                 vs32,   vs0,    vs24
3364
3365 .endm
3366
3367 .macro KERNEL1x1_SUB1
3368
3369         lxsdx   vs0,    0,      AO
3370
3371         lxsdx   vs24,   0,      BO
3372
3373         addi            AO, AO, 8
3374         addi            BO, BO, 8
3375
3376
3377         xsmaddadp               vs32,   vs0,    vs24
3378
3379 .endm
3380
3381 .macro SAVE1x1
3382
3383         mr              T1,     CO
3384
3385 #ifndef TRMMKERNEL
3386         lxsdx           vs0,    0,      T1
3387 #endif
3388
3389 #ifndef TRMMKERNEL
3390         xsmaddadp       vs0,    vs32,   alpha_r
3391 #else
3392         xsmuldp         vs0,    vs32,   alpha_r
3393 #endif
3394
3395         stxsdx          vs0,    0,      T1
3396
3397         addi            CO,     CO,     8
3398
3399 .endm
3400