3
#include "atlas_misc.h"
6
(const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc)
9
/*--- achitecture specific declarations ---*/
11
/*--- program specific declarations ---*/
14
vector zerovec = {0.0,0.0};
18
float *pC1 = C+(ldc SHIFT);
19
const float *stM = A + MB*KB;
20
const float *stN = B + NB*KB;
21
const int incAm = 2*KB-KB+12;
22
const int incBm = -KB+12;
23
const int incCm = (2 SHIFT);
24
const int incAn = -MB*KB;
25
const int incBn = 2*KB;
26
const int incCn = ((ldc*2-MB) SHIFT);
28
/*--- initial arhitecture specific statements ---*/
31
/*--- main program statements ---*/
32
vec_mov_mr_1(&beta,reg0);
33
vec_mov_rm(reg0,&betavec);
44
vec_mov_mr_1(pC0,reg0);
45
vec_mov_mr_1(pC0+(1 SHIFT),reg1);
46
vec_mov_mr_1(pC1,reg2);
47
vec_mov_mr_1(pC1+(1 SHIFT),reg3);
49
vec_mov_mr(betavec,reg7);
50
vec_mov_mr_1(pC0,reg0);
51
vec_mul_rr(reg7,reg0);
52
vec_mov_mr_1(pC0+(1 SHIFT),reg1);
53
vec_mul_rr(reg7,reg1);
54
vec_mov_mr_1(pC1,reg2);
55
vec_mul_rr(reg7,reg2);
56
vec_mov_mr_1(pC1+(1 SHIFT),reg3);
57
vec_mul_rr(reg7,reg3);
61
vec_mov_mr(pA0+KB,reg5);
64
vec_mov_mr(pA0+KB,reg7);
66
for (k=0; k<KB-12; k+=16)
68
vec_add_rr(reg4,reg0);
69
vec_mov_mr(pA0+2,reg4);
70
vec_mul_mr(pB0+KB,reg6);
71
vec_add_rr(reg5,reg1);
72
vec_mov_mr(pA0+2+KB,reg5);
73
vec_mul_mr(pB0+KB,reg7);
74
vec_add_rr(reg6,reg2);
75
vec_mov_mr(pA0+2,reg6);
76
vec_mul_mr(pB0+2,reg4);
77
vec_add_rr(reg7,reg3);
78
vec_mov_mr(pA0+2+KB,reg7);
79
vec_mul_mr(pB0+2,reg5);
80
vec_add_rr(reg4,reg0);
81
vec_mov_mr(pA0+4,reg4);
82
vec_mul_mr(pB0+2+KB,reg6);
83
vec_add_rr(reg5,reg1);
84
vec_mov_mr(pA0+4+KB,reg5);
85
vec_mul_mr(pB0+2+KB,reg7);
86
vec_add_rr(reg6,reg2);
87
vec_mov_mr(pA0+4,reg6);
88
vec_mul_mr(pB0+4,reg4);
89
vec_add_rr(reg7,reg3);
90
vec_mov_mr(pA0+4+KB,reg7);
91
vec_mul_mr(pB0+4,reg5);
92
vec_add_rr(reg4,reg0);
93
vec_mov_mr(pA0+6,reg4);
94
vec_mul_mr(pB0+4+KB,reg6);
95
vec_add_rr(reg5,reg1);
96
vec_mov_mr(pA0+6+KB,reg5);
97
vec_mul_mr(pB0+4+KB,reg7);
98
vec_add_rr(reg6,reg2);
99
vec_mov_mr(pA0+6,reg6);
100
vec_mul_mr(pB0+6,reg4);
101
vec_add_rr(reg7,reg3);
102
vec_mov_mr(pA0+6+KB,reg7);
103
vec_mul_mr(pB0+6,reg5);
104
vec_add_rr(reg4,reg0);
105
vec_mov_mr(pA0+8,reg4);
106
vec_mul_mr(pB0+6+KB,reg6);
107
vec_add_rr(reg5,reg1);
108
vec_mov_mr(pA0+8+KB,reg5);
109
vec_mul_mr(pB0+6+KB,reg7);
110
vec_add_rr(reg6,reg2);
111
vec_mov_mr(pA0+8,reg6);
112
vec_mul_mr(pB0+8,reg4);
113
vec_add_rr(reg7,reg3);
114
vec_mov_mr(pA0+8+KB,reg7);
115
vec_mul_mr(pB0+8,reg5);
116
vec_add_rr(reg4,reg0);
117
vec_mov_mr(pA0+10,reg4);
118
vec_mul_mr(pB0+8+KB,reg6);
119
vec_add_rr(reg5,reg1);
120
vec_mov_mr(pA0+10+KB,reg5);
121
vec_mul_mr(pB0+8+KB,reg7);
122
vec_add_rr(reg6,reg2);
123
vec_mov_mr(pA0+10,reg6);
124
vec_mul_mr(pB0+10,reg4);
125
vec_add_rr(reg7,reg3);
126
vec_mov_mr(pA0+10+KB,reg7);
127
vec_mul_mr(pB0+10,reg5);
128
vec_add_rr(reg4,reg0);
129
vec_mov_mr(pA0+12,reg4);
130
vec_mul_mr(pB0+10+KB,reg6);
131
vec_add_rr(reg5,reg1);
132
vec_mov_mr(pA0+12+KB,reg5);
133
vec_mul_mr(pB0+10+KB,reg7);
134
vec_add_rr(reg6,reg2);
135
vec_mov_mr(pA0+12,reg6);
136
vec_mul_mr(pB0+12,reg4);
137
vec_add_rr(reg7,reg3);
138
vec_mov_mr(pA0+12+KB,reg7);
139
vec_mul_mr(pB0+12,reg5);
140
vec_add_rr(reg4,reg0);
141
vec_mov_mr(pA0+14,reg4);
142
vec_mul_mr(pB0+12+KB,reg6);
143
vec_add_rr(reg5,reg1);
144
vec_mov_mr(pA0+14+KB,reg5);
145
vec_mul_mr(pB0+12+KB,reg7);
146
vec_add_rr(reg6,reg2);
147
vec_mov_mr(pA0+14,reg6);
148
vec_mul_mr(pB0+14,reg4);
149
vec_add_rr(reg7,reg3);
150
vec_mov_mr(pA0+14+KB,reg7);
151
vec_mul_mr(pB0+14,reg5);
152
vec_add_rr(reg4,reg0);
153
vec_mov_mr(pA0+16,reg4);
154
vec_mul_mr(pB0+14+KB,reg6);
155
vec_add_rr(reg5,reg1);
156
vec_mov_mr(pA0+16+KB,reg5);
157
vec_mul_mr(pB0+14+KB,reg7);
158
vec_add_rr(reg6,reg2);
159
vec_mov_mr(pA0+16,reg6);
160
vec_mul_mr(pB0+16,reg4);
161
vec_add_rr(reg7,reg3);
162
vec_mov_mr(pA0+16+KB,reg7);
163
vec_mul_mr(pB0+16,reg5);
168
vec_add_rr(reg4,reg0);
169
vec_mov_mr(pA0+2,reg4);
170
vec_mul_mr(pB0+KB,reg6);
171
vec_add_rr(reg5,reg1);
172
vec_mov_mr(pA0+2+KB,reg5);
173
vec_mul_mr(pB0+KB,reg7);
174
vec_add_rr(reg6,reg2);
175
vec_mov_mr(pA0+2,reg6);
176
vec_mul_mr(pB0+2,reg4);
177
vec_add_rr(reg7,reg3);
178
vec_mov_mr(pA0+2+KB,reg7);
179
vec_mul_mr(pB0+2,reg5);
180
vec_add_rr(reg4,reg0);
181
vec_mov_mr(pA0+4,reg4);
182
vec_mul_mr(pB0+2+KB,reg6);
183
vec_add_rr(reg5,reg1);
184
vec_mov_mr(pA0+4+KB,reg5);
185
vec_mul_mr(pB0+2+KB,reg7);
186
vec_add_rr(reg6,reg2);
187
vec_mov_mr(pA0+4,reg6);
188
vec_mul_mr(pB0+4,reg4);
189
vec_add_rr(reg7,reg3);
190
vec_mov_mr(pA0+4+KB,reg7);
191
vec_mul_mr(pB0+4,reg5);
192
vec_add_rr(reg4,reg0);
193
vec_mov_mr(pA0+6,reg4);
194
vec_mul_mr(pB0+4+KB,reg6);
195
vec_add_rr(reg5,reg1);
196
vec_mov_mr(pA0+6+KB,reg5);
197
vec_mul_mr(pB0+4+KB,reg7);
198
vec_add_rr(reg6,reg2);
199
vec_mov_mr(pA0+6,reg6);
200
vec_mul_mr(pB0+6,reg4);
201
vec_add_rr(reg7,reg3);
202
vec_mov_mr(pA0+6+KB,reg7);
203
vec_mul_mr(pB0+6,reg5);
204
vec_add_rr(reg4,reg0);
205
vec_mov_mr(pA0+8,reg4);
206
vec_mul_mr(pB0+6+KB,reg6);
207
vec_add_rr(reg5,reg1);
208
vec_mov_mr(pA0+8+KB,reg5);
209
vec_mul_mr(pB0+6+KB,reg7);
210
vec_add_rr(reg6,reg2);
211
vec_mov_mr(pA0+8,reg6);
212
vec_mul_mr(pB0+8,reg4);
213
vec_add_rr(reg7,reg3);
214
vec_mov_mr(pA0+8+KB,reg7);
215
vec_mul_mr(pB0+8,reg5);
216
vec_add_rr(reg4,reg0);
217
vec_mov_mr(pA0+10,reg4);
218
vec_mul_mr(pB0+8+KB,reg6);
219
vec_add_rr(reg5,reg1);
220
vec_mov_mr(pA0+10+KB,reg5);
221
vec_mul_mr(pB0+8+KB,reg7);
222
vec_add_rr(reg6,reg2);
223
vec_mov_mr(pA0+10,reg6);
224
vec_mul_mr(pB0+10,reg4);
225
vec_add_rr(reg7,reg3);
226
vec_mov_mr(pA0+10+KB,reg7);
227
vec_mul_mr(pB0+10,reg5);
228
vec_add_rr(reg4,reg0);
229
vec_add_rr(reg5,reg1);
230
vec_mul_mr(pB0+10+KB,reg6);
231
vec_add_rr(reg6,reg2);
232
vec_mul_mr(pB0+10+KB,reg7);
233
vec_add_rr(reg7,reg3);
238
vec_mov_rm_1(reg0,pC0);
239
vec_mov_rm_1(reg1,pC0+(1 SHIFT));
240
vec_mov_rm_1(reg2,pC1);
241
vec_mov_rm_1(reg3,pC1+(1 SHIFT));