~ubuntu-branches/ubuntu/vivid/atlas/vivid

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2002-04-13 10:07:52 UTC
  • Revision ID: james.westby@ubuntu.com-20020413100752-va9zm0rd4gpurdkq
Tags: upstream-3.2.1ln
ImportĀ upstreamĀ versionĀ 3.2.1ln

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#define THREEDNOW
 
2
#include "SSE3Dnow.h"
 
3
#include "atlas_misc.h"
 
4
 
 
5
void ATL_USERMM
 
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)
 
7
 
 
8
{
 
9
   /*--- achitecture specific declarations ---*/
 
10
 
 
11
   /*--- program specific declarations ---*/
 
12
   int i, j, k;
 
13
   vector betavec;
 
14
   vector zerovec = {0.0,0.0};
 
15
   const float *pA0 = A;
 
16
   const float *pB0 = B;
 
17
   float *pC0 = C;
 
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);
 
27
 
 
28
   /*--- initial arhitecture specific statements ---*/
 
29
   vec_enter();
 
30
 
 
31
   /*--- main program statements ---*/
 
32
   vec_mov_mr_1(&beta,reg0);
 
33
   vec_mov_rm(reg0,&betavec);
 
34
   do /* N-loop */
 
35
   {
 
36
      do /* M-loop */
 
37
      {
 
38
#ifdef BETA0
 
39
         vec_zero(reg0);
 
40
         vec_zero(reg1);
 
41
         vec_zero(reg2);
 
42
         vec_zero(reg3);
 
43
#elif defined(BETA1)
 
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);
 
48
#else
 
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);
 
58
#endif
 
59
         vec_mov_mr(pA0,reg4);
 
60
         vec_mul_mr(pB0,reg4);
 
61
         vec_mov_mr(pA0+KB,reg5);
 
62
         vec_mul_mr(pB0,reg5);
 
63
         vec_mov_mr(pA0,reg6);
 
64
         vec_mov_mr(pA0+KB,reg7);
 
65
         align();
 
66
         for (k=0; k<KB-12; k+=16)
 
67
         {
 
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);
 
164
 
 
165
            pA0 += 16;
 
166
            pB0 += 16;
 
167
         }
 
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);
 
234
         vec_sum(reg0);
 
235
         vec_sum(reg1);
 
236
         vec_sum(reg2);
 
237
         vec_sum(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));
 
242
         pA0 += incAm;
 
243
         pB0 += incBm;
 
244
         pC0 += incCm;
 
245
         pC1 += incCm;
 
246
      }
 
247
      while(pA0 != stM);
 
248
 
 
249
      pA0 += incAn;
 
250
      pB0 += incBn;
 
251
      pC0 += incCn;
 
252
      pC1 += incCn;
 
253
   }
 
254
   while(pB0 != stN);
 
255
 
 
256
   vec_exit();
 
257
}