1/**********************************Zero Vectors**************************************************/
2
3.macro ZERO_CVEC_8x4
4    vzero  %v16
5    vzero  %v17
6    vzero  %v18
7    vzero  %v19
8    vzero  %v20
9    vzero  %v21
10    vzero  %v22
11    vzero  %v23
12    vzero  %v24
13    vzero  %v25
14    vzero  %v26
15    vzero  %v27
16    vzero  %v28
17    vzero  %v29
18    vzero  %v30
19    vzero  %v31
20.endm
21
22
23.macro ZERO_CVEC_8x2
24    vzero  %v16
25    vzero  %v17
26    vzero  %v18
27    vzero  %v19
28    vzero  %v20
29    vzero  %v21
30    vzero  %v22
31    vzero  %v23
32
33.endm
34
35.macro ZERO_CVEC_8x1
36    vzero  %v16
37    vzero  %v17
38    vzero  %v18
39    vzero  %v19
40.endm
41
42.macro ZERO_CVEC_4x4
43    vzero  %v16
44    vzero  %v17
45    vzero  %v20
46    vzero  %v21
47    vzero  %v24
48    vzero  %v25
49    vzero  %v28
50    vzero  %v29
51.endm
52
53.macro ZERO_CVEC_4x2
54    vzero  %v16
55    vzero  %v17
56    vzero  %v20
57    vzero  %v21
58
59.endm
60
61.macro ZERO_CVEC_4x1
62     lzer %f1
63     lzer %f2
64     lzer %f3
65     lzer %f4
66.endm
67
68.macro ZERO_CVEC_2x4
69    vzero  %v16
70    vzero  %v17
71    vzero  %v20
72    vzero  %v21
73
74.endm
75
76.macro ZERO_CVEC_2x2
77    vzero  %v16
78    vzero  %v20
79
80.endm
81
82.macro ZERO_CVEC_2x1
83     lzer %f1
84     lzer %f2
85.endm
86
87.macro ZERO_CVEC_1x4
88     lzer %f1
89     lzer %f2
90     lzer %f3
91     lzer %f4
92.endm
93
94.macro ZERO_CVEC_1x2
95     lzer %f1
96     lzer %f2
97.endm
98
99.macro ZERO_CVEC_1x1
100    lzer %f1
101.endm
102
103
104/***********************************Helper Calculations*************************************/
105#define unit_size 4
106#define DISP(ind,stride,disp) (ind*stride+disp)
107#define DISP8(ind,disp) (ind*unit_size*8+disp)
108#define DISP4(ind,disp) (ind*unit_size*4+disp)
109#define DISP2(ind,disp) (ind*unit_size*2+disp)
110#define DISP1(ind,disp) (ind*unit_size+disp)
111#define N8  (8*unit_size)
112#define N4  (4*unit_size)
113#define N2  (2*unit_size)
114#define N1  (1*unit_size)
115
116.macro Calculate_8x4_I  PTR_A_REG,PTR_B_REG,Index,IsLast
117        vlm  %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
118        vmrhf %v3,%v1,%v1
119        vmrhf %v5,%v2,%v2
120        vmrlf  %v4,%v1,%v1
121        vmrlf  %v6,%v2,%v2
122        vldeb  %v3, %v3
123        vldeb  %v4, %v4
124        vldeb  %v5, %v5
125        vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG)
126        vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG)
127        vldeb  %v6, %v6
128        vldeb  %v7, %v7
129        vldeb  %v1, %v1
130
131
132        vfmadb    %v16,%v3,%v7,%v16
133        vfmadb    %v17,%v4,%v7,%v17
134        vfmadb    %v18,%v5,%v7,%v18
135        vfmadb    %v19,%v6,%v7,%v19
136        vfmadb    %v20,%v3,%v1,%v20
137        vfmadb    %v21,%v4,%v1,%v21
138        vfmadb    %v22,%v5,%v1,%v22
139        vfmadb    %v23,%v6,%v1,%v23
140        vlrepf %v2, DISP4(\Index ,8)(\PTR_B_REG)
141        vlrepf %v7, DISP4(\Index ,12)(\PTR_B_REG)
142        vldeb  %v2, %v2
143        vldeb  %v7, %v7
144   .if \IsLast==1
145        la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
146   .endif
147        vfmadb    %v24,%v3,%v2,%v24
148        vfmadb    %v25,%v4,%v2,%v25
149        vfmadb    %v26,%v5,%v2,%v26
150        vfmadb    %v27,%v6,%v2,%v27
151        vfmadb    %v28,%v3,%v7,%v28
152        vfmadb    %v29,%v4,%v7,%v29
153        vfmadb    %v30,%v5,%v7,%v30
154        vfmadb    %v31,%v6,%v7,%v31
155    .if \IsLast==1
156        la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG)
157    .endif
158.endm
159
160.macro Calculate_8x2_I  PTR_A_REG,PTR_B_REG,Index,IsLast
161        vlm  %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
162        vmrhf %v3,%v1,%v1
163        vmrhf %v5,%v2,%v2
164        vmrlf  %v4,%v1,%v1
165        vmrlf  %v6,%v2,%v2
166        vldeb  %v3, %v3
167        vldeb  %v4, %v4
168        vldeb  %v5, %v5
169        vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG)
170        vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG)
171        vldeb  %v6, %v6
172        vldeb  %v7, %v7
173        vldeb  %v1, %v1
174        vfmadb    %v16,%v3,%v7,%v16
175        vfmadb    %v17,%v4,%v7,%v17
176        vfmadb    %v18,%v5,%v7,%v18
177        vfmadb    %v19,%v6,%v7,%v19
178        vfmadb    %v20,%v3,%v1,%v20
179        vfmadb    %v21,%v4,%v1,%v21
180    .if \IsLast==1
181        la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
182    .endif
183        vfmadb    %v22,%v5,%v1,%v22
184        vfmadb    %v23,%v6,%v1,%v23
185    .if \IsLast==1
186        la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
187    .endif
188.endm
189
190.macro Calculate_8x1_I  PTR_A_REG,PTR_B_REG,Index,IsLast
191        vlm  %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG)
192        vmrhf %v3,%v1,%v1
193        vmrhf %v5,%v2,%v2
194        vmrlf  %v4,%v1,%v1
195        vmrlf  %v6,%v2,%v2
196        vldeb  %v3, %v3
197        vldeb  %v4, %v4
198        vldeb  %v5, %v5
199        vlrepf %v7, DISP1(\Index ,0)(\PTR_B_REG)
200        vldeb  %v6, %v6
201        vldeb  %v7, %v7
202        vfmadb    %v16,%v3,%v7,%v16
203    .if \IsLast==1
204        la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
205    .endif
206
207        vfmadb    %v17,%v4,%v7,%v17
208        vfmadb    %v18,%v5,%v7,%v18
209        vfmadb    %v19,%v6,%v7,%v19
210    .if \IsLast==1
211        la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG)
212    .endif
213.endm
214
215.macro Calculate_4x4_I  PTR_A_REG,PTR_B_REG,Index,IsLast
216        vl  %v5, DISP4(\Index , 0)(\PTR_A_REG)
217        vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG)
218        vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG)
219        vmrhf %v2,%v5,%v5
220        vmrlf  %v3,%v5,%v5
221        vldeb  %v2, %v2
222        vldeb  %v3, %v3
223        vldeb  %v7, %v7
224        vldeb  %v1, %v1
225        vfmadb    %v16,%v2,%v7,%v16
226        vfmadb    %v17,%v3,%v7,%v17
227        vfmadb    %v20,%v2,%v1,%v20
228        vfmadb    %v21,%v3,%v1,%v21
229        vlrepf %v7, DISP4(\Index ,8)(\PTR_B_REG)
230        vlrepf %v1, DISP4(\Index ,12)(\PTR_B_REG)
231        vldeb  %v7, %v7
232        vldeb  %v1, %v1
233    .if \IsLast==1
234        la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
235    .endif
236        vfmadb    %v24,%v2,%v7,%v24
237        vfmadb    %v25,%v3,%v7,%v25
238        vfmadb    %v28,%v2,%v1,%v28
239        vfmadb    %v29,%v3,%v1,%v29
240    .if \IsLast==1
241        la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG)
242    .endif
243.endm
244
245.macro Calculate_4x2_I  PTR_A_REG,PTR_B_REG,Index,IsLast
246        vl  %v5, DISP4(\Index , 0)(\PTR_A_REG)
247        vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG)
248        vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG)
249        vmrhf %v2,%v5,%v5
250        vmrlf  %v3,%v5,%v5
251        vldeb  %v2, %v2
252        vldeb  %v3, %v3
253        vldeb  %v7, %v7
254        vldeb  %v1, %v1
255        vfmadb    %v16,%v2,%v7,%v16
256        vfmadb    %v17,%v3,%v7,%v17
257    .if \IsLast==1
258        la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
259    .endif
260        vfmadb    %v20,%v2,%v1,%v20
261        vfmadb    %v21,%v3,%v1,%v21
262    .if \IsLast==1
263        la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
264    .endif
265.endm
266
267.macro Calculate_4x1_I  PTR_A_REG,PTR_B_REG,Index,IsLast
268        le %f5,DISP1(\Index ,0)(\PTR_B_REG)
269        maeb %f1,%f5,DISP4(\Index ,0)(\PTR_A_REG)
270        maeb %f2,%f5,DISP4(\Index ,4)(\PTR_A_REG)
271    .if \IsLast==1
272        la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
273    .endif
274        maeb %f3,%f5,DISP4(\Index ,8)(\PTR_A_REG)
275        maeb %f4,%f5,DISP4(\Index ,12)(\PTR_A_REG)
276    .if \IsLast==1
277        la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG)
278    .endif
279.endm
280
281.macro Calculate_2x2_I  PTR_A_REG,PTR_B_REG,Index,IsLast
282        vlrepf %v7,  DISP2(\Index ,0)(\PTR_B_REG)
283        vlrepf %v1,  DISP2(\Index ,4)(\PTR_B_REG)
284        vlef	%v2, DISP2(\Index ,0)(\PTR_A_REG) ,0
285        vlef	%v2, DISP2(\Index ,4)(\PTR_A_REG) ,2
286        vldeb  %v7, %v7
287        vldeb	%v2,%v2
288        vldeb  %v1, %v1
289
290        vfmadb    %v16,%v2,%v7,%v16
291    .if \IsLast==1
292        la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG)
293    .endif
294        vfmadb    %v20,%v2,%v1,%v20
295    .if \IsLast==1
296        la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG)
297    .endif
298.endm
299
300
301
302.macro Calculate_2x1_I  PTR_A_REG,PTR_B_REG,Index,IsLast
303
304        le %f3,DISP1(\Index ,0)(\PTR_B_REG)
305        maeb %f1,%f3,DISP2(\Index ,0)(\PTR_A_REG)
306    .if \IsLast==1
307        la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG)
308    .endif
309        maeb %f2, %f3,DISP2(\Index ,4)(\PTR_A_REG)
310    .if \IsLast==1
311        la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG)
312    .endif
313.endm
314
315.macro  Calculate_1x1_I  PTR_A_REG,PTR_B_REG,Index,IsLast
316     le %f2,DISP1(\Index ,0)(\PTR_A_REG) /**a*/
317    .if \IsLast==1
318      la  \PTR_A_REG,DISP1(\Index ,N1)(\PTR_A_REG)
319    .endif
320     maeb %f1,%f2,DISP1(\Index ,0)(\PTR_B_REG)
321    .if \IsLast==1
322      la  \PTR_B_REG,DISP1(\Index ,N1)(\PTR_B_REG)
323    .endif
324.endm
325
326.macro CALC_8x4  PTR_A_REG,PTR_B_REG
327   Calculate_8x4_I  \PTR_A_REG,\PTR_B_REG,0,1
328.endm
329
330.macro CALC_8x4_4  PTR_A_REG,PTR_B_REG
331   Calculate_8x4_I  \PTR_A_REG,\PTR_B_REG,0,0
332   Calculate_8x4_I  \PTR_A_REG,\PTR_B_REG,1,0
333   Calculate_8x4_I  \PTR_A_REG,\PTR_B_REG,2,0
334   Calculate_8x4_I  \PTR_A_REG,\PTR_B_REG,3,1
335.endm
336
337.macro CALC_8x2  PTR_A_REG,PTR_B_REG
338   Calculate_8x2_I  \PTR_A_REG,\PTR_B_REG,0,1
339.endm
340
341.macro CALC_8x2_4  PTR_A_REG,PTR_B_REG
342   Calculate_8x2_I  \PTR_A_REG,\PTR_B_REG,0,0
343   Calculate_8x2_I  \PTR_A_REG,\PTR_B_REG,1,0
344   Calculate_8x2_I  \PTR_A_REG,\PTR_B_REG,2,0
345   Calculate_8x2_I  \PTR_A_REG,\PTR_B_REG,3,1
346.endm
347
348.macro CALC_8x1  PTR_A_REG,PTR_B_REG
349   Calculate_8x1_I  \PTR_A_REG,\PTR_B_REG,0,1
350.endm
351
352.macro CALC_8x1_4  PTR_A_REG,PTR_B_REG
353   Calculate_8x1_I  \PTR_A_REG,\PTR_B_REG,0,0
354   Calculate_8x1_I  \PTR_A_REG,\PTR_B_REG,1,0
355   Calculate_8x1_I  \PTR_A_REG,\PTR_B_REG,2,0
356   Calculate_8x1_I  \PTR_A_REG,\PTR_B_REG,3,1
357.endm
358
359.macro CALC_4x4  PTR_A_REG,PTR_B_REG
360   Calculate_4x4_I  \PTR_A_REG,\PTR_B_REG,0,1
361.endm
362
363.macro CALC_4x4_4  PTR_A_REG,PTR_B_REG
364   Calculate_4x4_I  \PTR_A_REG,\PTR_B_REG,0,0
365   Calculate_4x4_I  \PTR_A_REG,\PTR_B_REG,1,0
366   Calculate_4x4_I  \PTR_A_REG,\PTR_B_REG,2,0
367   Calculate_4x4_I  \PTR_A_REG,\PTR_B_REG,3,1
368.endm
369
370.macro CALC_4x2  PTR_A_REG,PTR_B_REG
371   Calculate_4x2_I  \PTR_A_REG,\PTR_B_REG,0,1
372.endm
373
374.macro CALC_4x2_4  PTR_A_REG,PTR_B_REG
375   Calculate_4x2_I  \PTR_A_REG,\PTR_B_REG,0,0
376   Calculate_4x2_I  \PTR_A_REG,\PTR_B_REG,1,0
377   Calculate_4x2_I  \PTR_A_REG,\PTR_B_REG,2,0
378   Calculate_4x2_I  \PTR_A_REG,\PTR_B_REG,3,1
379.endm
380
381.macro CALC_4x1  PTR_A_REG,PTR_B_REG
382   Calculate_4x1_I  \PTR_A_REG,\PTR_B_REG,0,1
383.endm
384
385.macro CALC_4x1_4  PTR_A_REG,PTR_B_REG
386   Calculate_4x1_I  \PTR_A_REG,\PTR_B_REG,0,0
387   Calculate_4x1_I  \PTR_A_REG,\PTR_B_REG,1,0
388   Calculate_4x1_I  \PTR_A_REG,\PTR_B_REG,2,0
389   Calculate_4x1_I  \PTR_A_REG,\PTR_B_REG,3,1
390.endm
391
392.macro CALC_2x4  PTR_A_REG,PTR_B_REG
393   Calculate_4x2_I  \PTR_B_REG,\PTR_A_REG,0,1
394.endm
395
396.macro CALC_2x4_4  PTR_A_REG,PTR_B_REG
397   Calculate_4x2_I  \PTR_B_REG,\PTR_A_REG,0,0
398   Calculate_4x2_I  \PTR_B_REG,\PTR_A_REG,1,0
399   Calculate_4x2_I  \PTR_B_REG,\PTR_A_REG,2,0
400   Calculate_4x2_I  \PTR_B_REG,\PTR_A_REG,3,1
401.endm
402
403.macro CALC_2x2  PTR_A_REG,PTR_B_REG
404   Calculate_2x2_I  \PTR_A_REG,\PTR_B_REG,0,1
405.endm
406
407.macro CALC_2x2_4  PTR_A_REG,PTR_B_REG
408   Calculate_2x2_I  \PTR_A_REG,\PTR_B_REG,0,0
409   Calculate_2x2_I  \PTR_A_REG,\PTR_B_REG,1,0
410   Calculate_2x2_I  \PTR_A_REG,\PTR_B_REG,2,0
411   Calculate_2x2_I  \PTR_A_REG,\PTR_B_REG,3,1
412.endm
413
414.macro CALC_2x1  PTR_A_REG,PTR_B_REG
415   Calculate_2x1_I  \PTR_A_REG,\PTR_B_REG,0,1
416.endm
417
418.macro CALC_2x1_4  PTR_A_REG,PTR_B_REG
419   Calculate_2x1_I  \PTR_A_REG,\PTR_B_REG,0,0
420   Calculate_2x1_I  \PTR_A_REG,\PTR_B_REG,1,0
421   Calculate_2x1_I  \PTR_A_REG,\PTR_B_REG,2,0
422   Calculate_2x1_I  \PTR_A_REG,\PTR_B_REG,3,1
423.endm
424
425.macro CALC_1x4  PTR_A_REG,PTR_B_REG
426   Calculate_4x1_I  \PTR_B_REG,\PTR_A_REG,0,1
427.endm
428
429.macro CALC_1x4_4  PTR_A_REG,PTR_B_REG
430   Calculate_4x1_I  \PTR_B_REG,\PTR_A_REG,0,0
431   Calculate_4x1_I  \PTR_B_REG,\PTR_A_REG,1,0
432   Calculate_4x1_I  \PTR_B_REG,\PTR_A_REG,2,0
433   Calculate_4x1_I  \PTR_B_REG,\PTR_A_REG,3,1
434.endm
435
436.macro CALC_1x2  PTR_A_REG,PTR_B_REG
437   Calculate_2x1_I  \PTR_B_REG,\PTR_A_REG,0,1
438.endm
439
440.macro CALC_1x2_4  PTR_A_REG,PTR_B_REG
441   Calculate_2x1_I  \PTR_B_REG,\PTR_A_REG,0,0
442   Calculate_2x1_I  \PTR_B_REG,\PTR_A_REG,1,0
443   Calculate_2x1_I  \PTR_B_REG,\PTR_A_REG,2,0
444   Calculate_2x1_I  \PTR_B_REG,\PTR_A_REG,3,1
445.endm
446
447.macro CALC_1x1  PTR_A_REG,PTR_B_REG
448   Calculate_1x1_I  \PTR_A_REG,\PTR_B_REG,0,1
449.endm
450
451.macro CALC_1x1_4  PTR_A_REG,PTR_B_REG
452   Calculate_1x1_I  \PTR_A_REG,\PTR_B_REG,0,0
453   Calculate_1x1_I  \PTR_A_REG,\PTR_B_REG,1,0
454   Calculate_1x1_I  \PTR_A_REG,\PTR_B_REG,2,0
455   Calculate_1x1_I  \PTR_A_REG,\PTR_B_REG,3,1
456.endm
457
458
459/**************************************STORAGE*************************************************/
460
461
462.macro Multiply_8x1 vr1,vr2,vr3,vr4,va1,va2,va3,va4,vb1
463 #if defined(TRMMKERNEL)
464        vfmdb    \vr1,\va1,\vb1
465        vfmdb    \vr2,\va2,\vb1
466        vfmdb    \vr3,\va3,\vb1
467        vfmdb    \vr4,\va4,\vb1
468 #else
469        vfmadb    \vr1,\va1,\vb1,\vr1
470        vfmadb    \vr2,\va2,\vb1,\vr2
471        vfmadb    \vr3,\va3,\vb1,\vr3
472        vfmadb    \vr4,\va4,\vb1,\vr4
473 #endif
474.endm
475
476.macro Multiply_4x1 vr1,vr2, va1,va2, vb1
477 #if defined(TRMMKERNEL)
478        vfmdb    \vr1,\va1,\vb1
479        vfmdb    \vr2,\va2,\vb1
480 #else
481        vfmadb    \vr1,\va1,\vb1,\vr1
482        vfmadb    \vr2,\va2,\vb1,\vr2
483 #endif
484.endm
485
486.macro Multiply_2x1 vr1, va1,vb1
487 #if defined(TRMMKERNEL)
488        vfmdb    \vr1,\va1,\vb1
489 #else
490        vfmadb    \vr1,\va1,\vb1,\vr1
491 #endif
492.endm
493
494
495.macro STORE_8x4  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2
496    la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
497#if !defined(TRMMKERNEL)
498        vl  %v5, 0(\CIJ_REG)
499        vl %v1 ,  16(\CIJ_REG)
500        vmrhf %v2,%v5,%v5
501        vmrhf %v4,%v1,%v1
502        vmrlf  %v3,%v5,%v5
503        vldeb  %v2, %v2
504        vldeb  %v3, %v3
505        vldeb  %v4, %v4
506        vmrlf  %v5,%v1,%v1
507        vldeb  %v5, %v5
508#endif
509    Multiply_8x1 %v2,%v3,%v4,%v5,  %v16,%v17,%v18,%v19  ,\ALPHA_VECREG
510    vledb  %v2, %v2,0,0
511    vledb  %v3, %v3,0,0
512    vledb  %v4, %v4,0,0
513    vledb  %v5, %v5,0,0
514    vstef  %v2, 0(\CIJ_REG),0
515    vstef  %v2, 4(\CIJ_REG),2
516    vstef  %v3, 8(\CIJ_REG),0
517    vstef  %v3, 12(\CIJ_REG),2
518    vstef  %v4, 16(\CIJ_REG),0
519    vstef  %v4, 20(\CIJ_REG),2
520    vstef  %v5, 24(\CIJ_REG),0
521    vstef  %v5, 28(\CIJ_REG),2
522
523
524    la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
525#if !defined(TRMMKERNEL)
526    vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
527    vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
528    vmrhf %v2,%v16,%v16
529    vmrhf %v4,%v17,%v17
530    vmrlf  %v3,%v16,%v16
531    vldeb  %v2, %v2
532    vldeb  %v3, %v3
533    vldeb  %v4, %v4
534    vmrlf  %v5,%v17,%v17
535    vldeb  %v5, %v5
536#endif
537    Multiply_8x1 %v2,%v3,%v4,%v5,  %v20,%v21,%v22,%v23  ,\ALPHA_VECREG
538    vledb  %v2, %v2,0,0
539    vledb  %v3, %v3,0,0
540    vledb  %v4, %v4,0,0
541    vledb  %v5, %v5,0,0
542    vstef  %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
543    vstef  %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
544    vstef  %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
545    vstef  %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
546    vstef  %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
547    vstef  %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
548    vstef  %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
549    vstef  %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
550
551 #if !defined(TRMMKERNEL)
552    vl %v17,0(\CIJ_REG,\LV1)
553    vl %v18,16(\CIJ_REG,\LV1)
554    vmrhf %v2,%v17,%v17
555    vmrhf %v4,%v18,%v18
556    vmrlf  %v3,%v17,%v17
557    vldeb  %v2, %v2
558    vldeb  %v3, %v3
559    vldeb  %v4, %v4
560    vmrlf  %v5,%v18,%v18
561    vldeb  %v5, %v5
562#endif
563    Multiply_8x1 %v2,%v3,%v4,%v5,  %v24,%v25,%v26,%v27  ,\ALPHA_VECREG
564    vledb  %v2, %v2,0,0
565    vledb  %v3, %v3,0,0
566    vledb  %v4, %v4,0,0
567    vledb  %v5, %v5,0,0
568    vstef  %v2, 0(\CIJ_REG,\LV1),0
569    vstef  %v2, 4(\CIJ_REG,\LV1),2
570    vstef  %v3, 8(\CIJ_REG,\LV1),0
571    vstef  %v3, 12(\CIJ_REG,\LV1),2
572    vstef  %v4, 16(\CIJ_REG,\LV1),0
573    vstef  %v4, 20(\CIJ_REG,\LV1),2
574    vstef  %v5, 24(\CIJ_REG,\LV1),0
575    vstef  %v5, 28(\CIJ_REG,\LV1),2
576
577#if !defined(TRMMKERNEL)
578    vl %v16,0(\CIJ_REG,\LV2)
579    vl %v17,16(\CIJ_REG,\LV2)
580    vmrhf %v2,%v16,%v16
581    vmrhf %v4,%v17,%v17
582    vmrlf  %v3,%v16,%v16
583    vldeb  %v2, %v2
584    vldeb  %v3, %v3
585    vldeb  %v4, %v4
586    vmrlf  %v5,%v17,%v17
587    vldeb  %v5, %v5
588#endif
589    Multiply_8x1 %v2,%v3,%v4,%v5,  %v28,%v29,%v30,%v31  ,\ALPHA_VECREG
590    vledb  %v2, %v2,0,0
591    vledb  %v3, %v3,0,0
592    vledb  %v4, %v4,0,0
593    vledb  %v5, %v5,0,0
594    vstef  %v2, 0(\CIJ_REG,\LV2),0
595    vstef  %v2, 4(\CIJ_REG,\LV2),2
596    vstef  %v3, 8(\CIJ_REG,\LV2),0
597    vstef  %v3, 12(\CIJ_REG,\LV2),2
598    vstef  %v4, 16(\CIJ_REG,\LV2),0
599    vstef  %v4, 20(\CIJ_REG,\LV2),2
600    vstef  %v5, 24(\CIJ_REG,\LV2),0
601    vstef  %v5, 28(\CIJ_REG,\LV2),2
602
603    la \CIJ_REG,N8(\CIJ_REG)
604
605.endm
606
607.macro STORE_8x2  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
608#if !defined(TRMMKERNEL)
609        vl  %v5, 0(\CIJ_REG)
610        vl %v1 ,  16(\CIJ_REG)
611        vmrhf %v2,%v5,%v5
612        vmrhf %v4,%v1,%v1
613        vmrlf  %v3,%v5,%v5
614        vldeb  %v2, %v2
615        vldeb  %v3, %v3
616        vldeb  %v4, %v4
617        vmrlf  %v5,%v1,%v1
618        vldeb  %v5, %v5
619#endif
620    Multiply_8x1 %v2,%v3,%v4,%v5,  %v16,%v17,%v18,%v19  ,\ALPHA_VECREG
621    vledb  %v2, %v2,0,0
622    vledb  %v3, %v3,0,0
623    vledb  %v4, %v4,0,0
624    vledb  %v5, %v5,0,0
625    vstef  %v2, 0(\CIJ_REG),0
626    vstef  %v2, 4(\CIJ_REG),2
627    vstef  %v3, 8(\CIJ_REG),0
628    vstef  %v3, 12(\CIJ_REG),2
629    vstef  %v4, 16(\CIJ_REG),0
630    vstef  %v4, 20(\CIJ_REG),2
631    vstef  %v5, 24(\CIJ_REG),0
632    vstef  %v5, 28(\CIJ_REG),2
633
634#if !defined(TRMMKERNEL)
635    vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
636    vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL)
637    vmrhf %v2,%v16,%v16
638    vmrhf %v4,%v17,%v17
639    vmrlf  %v3,%v16,%v16
640    vldeb  %v2, %v2
641    vldeb  %v3, %v3
642    vldeb  %v4, %v4
643    vmrlf  %v5,%v17,%v17
644    vldeb  %v5, %v5
645#endif
646    Multiply_8x1 %v2,%v3,%v4,%v5,  %v20,%v21,%v22,%v23  ,\ALPHA_VECREG
647    vledb  %v2, %v2,0,0
648    vledb  %v3, %v3,0,0
649    vledb  %v4, %v4,0,0
650    vledb  %v5, %v5,0,0
651    vstef  %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
652    vstef  %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
653    vstef  %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
654    vstef  %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
655    vstef  %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
656    vstef  %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
657    vstef  %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0
658    vstef  %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
659
660   la \CIJ_REG,N8(\CIJ_REG)
661
662.endm
663
664.macro STORE_8x1  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
665
666#if !defined(TRMMKERNEL)
667        vl  %v5, 0(\CIJ_REG)
668        vl %v1 ,  16(\CIJ_REG)
669        vmrhf %v2,%v5,%v5
670        vmrhf %v4,%v1,%v1
671        vmrlf  %v3,%v5,%v5
672        vldeb  %v2, %v2
673        vldeb  %v3, %v3
674        vldeb  %v4, %v4
675        vmrlf  %v5,%v1,%v1
676        vldeb  %v5, %v5
677#endif
678    Multiply_8x1 %v2,%v3,%v4,%v5,  %v16,%v17,%v18,%v19  ,\ALPHA_VECREG
679    vledb  %v2, %v2,0,0
680    vledb  %v3, %v3,0,0
681    vledb  %v4, %v4,0,0
682    vledb  %v5, %v5,0,0
683    vstef  %v2, 0(\CIJ_REG),0
684    vstef  %v2, 4(\CIJ_REG),2
685    vstef  %v3, 8(\CIJ_REG),0
686    vstef  %v3, 12(\CIJ_REG),2
687    vstef  %v4, 16(\CIJ_REG),0
688    vstef  %v4, 20(\CIJ_REG),2
689    vstef  %v5, 24(\CIJ_REG),0
690    vstef  %v5, 28(\CIJ_REG),2
691
692    la \CIJ_REG,N8(\CIJ_REG)
693.endm
694
695
696.macro STORE_4x4  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL,   LV1 ,LV2
697    la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
698#if !defined(TRMMKERNEL)
699        vl  %v5, 0(\CIJ_REG)
700        vmrhf %v1,%v5,%v5
701        vmrlf  %v2,%v5,%v5
702        vldeb  %v1, %v1
703        vldeb  %v2, %v2
704
705#endif
706    Multiply_4x1 %v1,%v2 ,  %v16,%v17   ,\ALPHA_VECREG
707    vledb  %v1, %v1,0,0
708    vledb  %v2, %v2,0,0
709    vstef  %v1, 0(\CIJ_REG),0
710    vstef  %v1, 4(\CIJ_REG),2
711    vstef  %v2, 8(\CIJ_REG),0
712    vstef  %v2, 12(\CIJ_REG),2
713
714    la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
715#if !defined(TRMMKERNEL)
716    vl  %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL )
717    vmrhf %v16,%v5,%v5
718    vmrlf  %v17,%v5,%v5
719    vldeb  %v16, %v16
720    vldeb  %v17, %v17
721#endif
722    Multiply_4x1 %v16,%v17 ,  %v20,%v21  ,\ALPHA_VECREG
723    vledb  %v1, %v16,0,0
724    vledb  %v2, %v17,0,0
725    vstef  %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
726    vstef  %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
727    vstef  %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
728    vstef  %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
729
730 #if !defined(TRMMKERNEL)
731    vl  %v5, 0(\CIJ_REG,\LV1 )
732    vmrhf %v16,%v5,%v5
733    vmrlf  %v17,%v5,%v5
734    vldeb  %v16, %v16
735    vldeb  %v17, %v17
736#endif
737    Multiply_4x1 %v16,%v17 ,  %v24,%v25 ,\ALPHA_VECREG
738    vledb  %v1, %v16,0,0
739    vledb  %v2, %v17,0,0
740    vstef  %v1, 0(\CIJ_REG,\LV1 ),0
741    vstef  %v1, 4(\CIJ_REG,\LV1 ),2
742    vstef  %v2, 8(\CIJ_REG,\LV1 ),0
743    vstef  %v2, 12(\CIJ_REG,\LV1 ),2
744
745#if !defined(TRMMKERNEL)
746    vl  %v5, 0(\CIJ_REG,\LV2 )
747    vmrhf %v16,%v5,%v5
748    vmrlf  %v17,%v5,%v5
749    vldeb  %v16, %v16
750    vldeb  %v17, %v17
751#endif
752    Multiply_4x1 %v16,%v17,   %v28,%v29   ,\ALPHA_VECREG
753    vledb  %v1, %v16,0,0
754    vledb  %v2, %v17,0,0
755    vstef  %v1, 0(\CIJ_REG,\LV2 ),0
756    vstef  %v1, 4(\CIJ_REG,\LV2 ),2
757    vstef  %v2, 8(\CIJ_REG,\LV2 ),0
758    vstef  %v2, 12(\CIJ_REG,\LV2 ),2
759
760   la \CIJ_REG,N4(\CIJ_REG)
761
762.endm
763
764
765.macro STORE_4x2  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
766
767#if !defined(TRMMKERNEL)
768        vl  %v5, 0(\CIJ_REG)
769        vmrhf %v1,%v5,%v5
770        vmrlf  %v2,%v5,%v5
771        vldeb  %v1, %v1
772        vldeb  %v2, %v2
773
774#endif
775    Multiply_4x1 %v1,%v2 ,  %v16,%v17   ,\ALPHA_VECREG
776    vledb  %v1, %v1,0,0
777    vledb  %v2, %v2,0,0
778    vstef  %v1, 0(\CIJ_REG),0
779    vstef  %v1, 4(\CIJ_REG),2
780    vstef  %v2, 8(\CIJ_REG),0
781    vstef  %v2, 12(\CIJ_REG),2
782
783#if !defined(TRMMKERNEL)
784        vl  %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL )
785        vmrhf %v16,%v5,%v5
786        vmrlf  %v17,%v5,%v5
787        vldeb  %v16, %v16
788        vldeb  %v17, %v17
789#endif
790    Multiply_4x1 %v16,%v17 ,  %v20,%v21  ,\ALPHA_VECREG
791    vledb  %v1, %v16,0,0
792    vledb  %v2, %v17,0,0
793    vstef  %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
794    vstef  %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
795    vstef  %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
796    vstef  %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
797
798
799    la \CIJ_REG,N4(\CIJ_REG)
800
801.endm
802
803.macro STORE_4x1  ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
804    ledbr %f7,\ALPHA_FLOAT
805#if  defined(TRMMKERNEL)
806     meebr %f1,%f7
807     meebr %f2,%f7
808     meebr %f3,%f7
809     meebr %f4,%f7
810     ste %f1,0(\CIJ_REG)
811     ste %f2,4(\CIJ_REG )
812     ste %f3,8(\CIJ_REG )
813     ste %f4,12(\CIJ_REG)
814#else
815     le %f5,0(\CIJ_REG)
816     maebr %f5,%f1,%f7
817     ste %f5,0(\CIJ_REG)
818
819
820     le %f6,4(\CIJ_REG )
821     maebr %f6,%f2,%f7
822     ste %f6,4(\CIJ_REG )
823
824     le %f5,8(\CIJ_REG)
825     maebr %f5,%f3,%f7
826     ste %f5,8(\CIJ_REG)
827
828     le %f6,12(\CIJ_REG)
829     maebr %f6,%f4,%f7
830     ste %f6,12(\CIJ_REG)
831#endif
832
833      la \CIJ_REG,N4(\CIJ_REG)
834
835.endm
836
837.macro STORE_2x2  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL
838
839#if !defined(TRMMKERNEL)
840     vlef	%v1,0(\CIJ_REG) ,0
841     vlef	%v1,4(\CIJ_REG) ,2
842     vldeb	%v1,%v1
843
844#endif
845    Multiply_2x1 %v1, %v16,\ALPHA_VECREG
846    vledb  %v1, %v1,0,0
847    vstef  %v1, 0(\CIJ_REG),0
848    vstef  %v1, 4(\CIJ_REG),2
849
850#if !defined(TRMMKERNEL)
851    vlef	%v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL ) ,0
852    vlef	%v16,4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
853    vldeb	%v16,%v16
854#endif
855    Multiply_2x1 %v16, %v20,\ALPHA_VECREG
856    vledb  %v1, %v16,0,0
857    vstef  %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0
858    vstef  %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2
859
860    la \CIJ_REG,N2(\CIJ_REG)
861
862.endm
863
864
865.macro STORE_2x1  ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
866     ledbr %f3,\ALPHA_FLOAT
867#if  defined(TRMMKERNEL)
868     meebr %f1,%f3
869     meebr %f2,%f3
870     ste %f1,0(\CIJ_REG)
871     ste %f2,4(\CIJ_REG)
872#else
873     le %f4,0(\CIJ_REG)
874     le %f5,4(\CIJ_REG)
875     maebr %f4,%f1,%f3
876     maebr %f5,%f2,%f3
877     ste %f4,0(\CIJ_REG)
878     ste %f5,4(\CIJ_REG)
879#endif
880
881    la \CIJ_REG,N2(\CIJ_REG)
882.endm
883
884
885/*STORE C1X1*/
886.macro STORE_1x1  ALPHA_FLOAT,CIJ_REG,LDC_BYTE_ORIGINAL
887     ledbr %f3,\ALPHA_FLOAT
888#if  defined(TRMMKERNEL)
889     meebr %f1,%f3
890     ste %f1,0(\CIJ_REG)
891#else
892     le %f2,0(\CIJ_REG)
893     maebr %f2,%f1,%f3
894     ste %f2,0(\CIJ_REG)
895#endif
896     la \CIJ_REG,N1(\CIJ_REG)
897.endm
898
899/*reversed ones*/
900
901.macro STORE_2x4  ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2
902#if !defined(TRMMKERNEL)
903     vlef	%v1,0(\CIJ_REG) ,0
904     vlef	%v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2
905     vldeb	%v1,%v1
906#endif
907    la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
908    Multiply_2x1 %v1,  %v16 ,\ALPHA_VECREG
909
910    la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
911    vledb  %v1, %v1,0,0
912    vstef  %v1, 0(\CIJ_REG),0
913    vstef  %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
914
915#if !defined(TRMMKERNEL)
916    vlef	%v16,0(\CIJ_REG,\LV1  ) ,0
917    vlef	%v16,0(\CIJ_REG,\LV2 ),2
918    vldeb	%v16,%v16
919#endif
920    Multiply_2x1 %v16,   %v17,\ALPHA_VECREG
921    vledb  %v1, %v16,0,0
922    vstef  %v1, 0(\CIJ_REG ,\LV1 ),0
923    vstef  %v1, 0(\CIJ_REG,\LV2  ),2
924/*2nd*/
925#if !defined(TRMMKERNEL)
926     vlef	%v1,4(\CIJ_REG) ,0
927     vlef	%v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2
928     vldeb	%v1,%v1
929
930#endif
931    Multiply_2x1 %v1,  %v20 ,\ALPHA_VECREG
932    vledb  %v1, %v1,0,0
933    vstef  %v1, 4(\CIJ_REG),0
934    vstef  %v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2
935
936#if !defined(TRMMKERNEL)
937    vlef	%v16,4(\CIJ_REG,\LV1  ) ,0
938    vlef	%v16,4(\CIJ_REG,\LV2 ),2
939    vldeb	%v16,%v16
940#endif
941    Multiply_2x1 %v16,   %v21,\ALPHA_VECREG
942    vledb  %v1, %v16,0,0
943    vstef  %v1, 4(\CIJ_REG ,\LV1 ),0
944    vstef  %v1, 4(\CIJ_REG,\LV2  ),2
945
946    la \CIJ_REG,N2(\CIJ_REG)
947
948.endm
949
950.macro STORE_1x4  ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL  , LV1 ,LV2
951
952    la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL)
953    ledbr %f7,\ALPHA_FLOAT
954    la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL )
955#if  defined(TRMMKERNEL)
956     meebr %f1,%f7
957     meebr %f2,%f7
958     meebr %f3,%f7
959     meebr %f4,%f7
960     ste %f1,0(\CIJ_REG)
961     ste %f2,0(\CIJ_REG, \LDC_BYTE_ORIGINAL)
962     ste %f3,0(\CIJ_REG, \LV1)
963     ste %f4,0(\CIJ_REG, \LV2)
964#else
965     le %f5,0(\CIJ_REG)
966     maebr %f5,%f1,%f7
967     ste %f5,0(\CIJ_REG)
968
969     le %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
970     maebr %f6,%f2,%f7
971     ste %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
972
973     le %f5,0(\CIJ_REG, \LV1)
974     maebr %f5,%f3,%f7
975     ste %f5,0(\CIJ_REG, \LV1)
976
977     le %f6,0(\CIJ_REG, \LV2)
978     maebr %f6,%f4,%f7
979     ste %f6,0(\CIJ_REG, \LV2)
980#endif
981
982    la \CIJ_REG,N1(\CIJ_REG)
983
984.endm
985
986 .macro STORE_1x2  ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL
987     ledbr %f3,\ALPHA_FLOAT
988#if  defined(TRMMKERNEL)
989     meebr %f1,%f3
990     meebr %f2,%f3
991     ste %f1,0(\CIJ_REG)
992     ste %f2,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
993#else
994     le %f4,0(\CIJ_REG)
995     maebr %f4,%f1,%f3
996     ste %f4,0(\CIJ_REG)
997
998     le %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
999     maebr %f5,%f2,%f3
1000     ste %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL)
1001#endif
1002
1003
1004    la \CIJ_REG,N1(\CIJ_REG)
1005
1006.endm
1007
1008
1009
1010
1011/****************************TRMM POINTER REFRESH MACROSES*************************/
1012
1013.macro RefreshPointers  PTR_A,PTR_B,OFF_VAL,B_VAL,C_A,C_B
1014    #if (defined(LEFT) &&  defined(TRANSA)) ||  (!defined(LEFT) && !defined(TRANSA))
1015               /*  ptrbb = bb;*/
1016            lgr \PTR_B,\B_VAL      /*refresh BPOINT*/
1017
1018    #else
1019             /*  ptrba  =ptrba+ off*C_A;
1020              ptrbb = bb + off*C_B;*/
1021.if \C_B==4
1022                .if \C_A==8
1023                        sllg \PTR_B, \OFF_VAL,4
1024                        la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*4*/
1025                        agr \PTR_A,\PTR_B /*ptrba+off*4**/
1026                        la \PTR_B,0(\B_VAL,\PTR_B)
1027                .elseif \C_A==4
1028                        sllg \PTR_B, \OFF_VAL,4
1029                        agr \PTR_A,\PTR_B /*ptrba+off*4**/
1030                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1031                .elseif \C_A==2
1032                        sllg \PTR_B, \OFF_VAL,3
1033                        la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
1034                        agr \PTR_B, \PTR_B
1035                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1036
1037                .elseif \C_A==1
1038                        sllg \PTR_B, \OFF_VAL,2
1039                        agr \PTR_A,\PTR_B /*ptrba+off*4**/
1040                        sllg \PTR_B, \OFF_VAL,4
1041                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1042                .endif
1043
1044.elseif \C_B==2
1045                .if \C_A==8
1046                        sllg \PTR_B, \OFF_VAL,5
1047                        agr \PTR_A,\PTR_B /*ptrba+off*8**/
1048                        sllg \PTR_B, \OFF_VAL,3
1049                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1050                .elseif \C_A==4
1051                        sllg \PTR_B, \OFF_VAL,3
1052                        la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/
1053                        agr \PTR_A,\PTR_B /*ptrba+off*2**/
1054                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1055                .elseif \C_A==2
1056                        sllg \PTR_B, \OFF_VAL,3
1057                        agr \PTR_A,\PTR_B /*ptrba+off*2**/
1058                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1059                .elseif \C_A==1
1060                        sllg \PTR_B, \OFF_VAL,2
1061                        la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
1062                        agr \PTR_B,\PTR_B /* off+off**/
1063                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1064                .endif
1065
1066.elseif \C_B==1
1067                .if \C_A==8
1068                        sllg \PTR_B, \OFF_VAL,5
1069                        agr \PTR_A,\PTR_B /*ptrba+off*8**/
1070                        sllg \PTR_B, \OFF_VAL,2
1071                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1072                .elseif \C_A==4
1073                        sllg \PTR_B, \OFF_VAL,4
1074                        agr \PTR_A,\PTR_B /*ptrba+off*4**/
1075                        sllg \PTR_B, \OFF_VAL,2
1076                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1077                .elseif \C_A==2
1078                        sllg \PTR_B, \OFF_VAL,2
1079                        la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/
1080                        agr \PTR_A,\PTR_B /*ptrba+off*1**/
1081                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1082
1083                .elseif \C_A==1
1084                        sllg \PTR_B, \OFF_VAL,2
1085                        agr \PTR_A,\PTR_B /*ptrba+off*1**/
1086                        la \PTR_B,0(\B_VAL,\PTR_B)        /*refresh BPOINT*/
1087                .endif
1088.endif
1089
1090
1091    #endif
1092.endm
1093
1094/**/
1095.macro RefreshTempBk TEMP_VAL,BK_VAL,OFF_VAL,INCR_A,INCR_B
1096    #if (defined(LEFT) && !defined(TRANSA)) ||  (!defined(LEFT) && defined(TRANSA))
1097                            /* temp = bk-off;*/
1098           sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
1099
1100    #elif defined(LEFT)
1101                            /* temp = off+INCR_A;       // number of values in A */
1102           la \TEMP_VAL,\INCR_A(\OFF_VAL)
1103    #else
1104                            /* temp = off+INCR_B        // number of values in B*/
1105           la \TEMP_VAL,\INCR_B(\OFF_VAL)
1106    #endif
1107
1108.endm
1109
1110
1111.macro RefreshPointersAndOFF TEMP_VAL,BK_VAL,OFF_VAL,PTR_B,PTR_A,C_A,C_B
1112
1113    #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))
1114                    /*temp = bk - off;*/
1115                    sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL
1116    #ifdef LEFT
1117                    /*temp -= 8; // number of values in A*/
1118                    lay \TEMP_VAL,-\C_A(\TEMP_VAL)
1119    #else
1120                    /*temp -= 4; // number of values in B*/
1121                   lay \TEMP_VAL,-\C_B(\TEMP_VAL)
1122    #endif
1123                    /*ptrba += temp*C_A;
1124                    ptrbb += temp*C_B;*/
1125                .if  \C_A==8
1126                        sllg \TEMP_VAL, \TEMP_VAL,5
1127                .elseif \C_A==4
1128                        sllg \TEMP_VAL, \TEMP_VAL,4 /*temp*4*/
1129                .elseif \C_A==2
1130                        sllg \TEMP_VAL, \TEMP_VAL,3 /*temp*2*/
1131                .elseif \C_A==1
1132                        sllg \TEMP_VAL, \TEMP_VAL,2 /*temp*1*/
1133                .endif
1134                la \PTR_A,0(\PTR_A,\TEMP_VAL) /*ptrba+temp*C_A*/
1135                /*we do not need to refresh ptrbb. so lets ignore it*/
1136
1137    #endif
1138
1139    #ifdef LEFT
1140                    /*off += 8; // number of values in A*/
1141                    aghi \OFF_VAL,\C_A
1142    #endif
1143.endm