@@ -37,43 +37,41 @@ static void sgemv_kernel_4x8( BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, BLASLO
37
37
__asm__ __volatile__
38
38
(
39
39
"vzeroupper \n\t"
40
- "vbroadcastss (%2 ), %%ymm12 \n\t" // x0
41
- "vbroadcastss 4(%2 ), %%ymm13 \n\t" // x1
42
- "vbroadcastss 8(%2 ), %%ymm14 \n\t" // x2
43
- "vbroadcastss 12(%2 ), %%ymm15 \n\t" // x3
44
- "vbroadcastss 16(%2 ), %%ymm0 \n\t" // x4
45
- "vbroadcastss 20(%2 ), %%ymm1 \n\t" // x5
46
- "vbroadcastss 24(%2 ), %%ymm2 \n\t" // x6
47
- "vbroadcastss 28(%2 ), %%ymm3 \n\t" // x7
40
+ "vbroadcastss (%3 ), %%ymm12 \n\t" // x0
41
+ "vbroadcastss 4(%3 ), %%ymm13 \n\t" // x1
42
+ "vbroadcastss 8(%3 ), %%ymm14 \n\t" // x2
43
+ "vbroadcastss 12(%3 ), %%ymm15 \n\t" // x3
44
+ "vbroadcastss 16(%3 ), %%ymm0 \n\t" // x4
45
+ "vbroadcastss 20(%3 ), %%ymm1 \n\t" // x5
46
+ "vbroadcastss 24(%3 ), %%ymm2 \n\t" // x6
47
+ "vbroadcastss 28(%3 ), %%ymm3 \n\t" // x7
48
48
49
49
"vbroadcastss (%9), %%ymm6 \n\t" // alpha
50
50
51
- "movq %8, %%xmm10 \n\t" //save lda
52
-
53
51
"testq $0x04, %1 \n\t"
54
52
"jz 2f \n\t"
55
53
56
- "vmovups (%3 ,%0,4), %%xmm7 \n\t" // 4 * y
54
+ "vmovups (%4 ,%0,4), %%xmm7 \n\t" // 4 * y
57
55
"vxorps %%xmm4 , %%xmm4, %%xmm4 \n\t"
58
56
"vxorps %%xmm5 , %%xmm5, %%xmm5 \n\t"
59
57
60
- "vfmadd231ps (%4 ,%0,4), %%xmm12, %%xmm4 \n\t"
61
- "vfmadd231ps (%5 ,%0,4), %%xmm13, %%xmm5 \n\t"
62
- "vfmadd231ps (%6 ,%0,4), %%xmm14, %%xmm4 \n\t"
63
- "vfmadd231ps (%7 ,%0,4), %%xmm15, %%xmm5 \n\t"
58
+ "vfmadd231ps (%5 ,%0,4), %%xmm12, %%xmm4 \n\t"
59
+ "vfmadd231ps (%6 ,%0,4), %%xmm13, %%xmm5 \n\t"
60
+ "vfmadd231ps (%7 ,%0,4), %%xmm14, %%xmm4 \n\t"
61
+ "vfmadd231ps (%8 ,%0,4), %%xmm15, %%xmm5 \n\t"
64
62
65
- "vfmadd231ps (%4,%8 ,4), %%xmm0 , %%xmm4 \n\t"
66
- "vfmadd231ps (%5,%8 ,4), %%xmm1 , %%xmm5 \n\t"
67
- "vfmadd231ps (%6,%8 ,4), %%xmm2 , %%xmm4 \n\t"
68
- "vfmadd231ps (%7,%8 ,4), %%xmm3 , %%xmm5 \n\t"
63
+ "vfmadd231ps (%5,%2 ,4), %%xmm0 , %%xmm4 \n\t"
64
+ "vfmadd231ps (%6,%2 ,4), %%xmm1 , %%xmm5 \n\t"
65
+ "vfmadd231ps (%7,%2 ,4), %%xmm2 , %%xmm4 \n\t"
66
+ "vfmadd231ps (%8,%2 ,4), %%xmm3 , %%xmm5 \n\t"
69
67
70
68
"vaddps %%xmm4 , %%xmm5 , %%xmm5 \n\t"
71
69
"vmulps %%xmm6 , %%xmm5 , %%xmm5 \n\t"
72
70
"vaddps %%xmm7 , %%xmm5 , %%xmm5 \n\t"
73
71
74
- "vmovups %%xmm5, (%3 ,%0,4) \n\t" // 4 * y
72
+ "vmovups %%xmm5, (%4 ,%0,4) \n\t" // 4 * y
75
73
76
- "addq $4 , %8 \n\t"
74
+ "addq $4 , %2 \n\t"
77
75
"addq $4 , %0 \n\t"
78
76
"subq $4 , %1 \n\t"
79
77
@@ -82,28 +80,28 @@ static void sgemv_kernel_4x8( BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, BLASLO
82
80
"testq $0x08, %1 \n\t"
83
81
"jz 3f \n\t"
84
82
85
- "vmovups (%3 ,%0,4), %%ymm7 \n\t" // 8 * y
83
+ "vmovups (%4 ,%0,4), %%ymm7 \n\t" // 8 * y
86
84
"vxorps %%ymm4 , %%ymm4, %%ymm4 \n\t"
87
85
"vxorps %%ymm5 , %%ymm5, %%ymm5 \n\t"
88
86
89
- "vfmadd231ps (%4 ,%0,4), %%ymm12, %%ymm4 \n\t"
90
- "vfmadd231ps (%5 ,%0,4), %%ymm13, %%ymm5 \n\t"
91
- "vfmadd231ps (%6 ,%0,4), %%ymm14, %%ymm4 \n\t"
92
- "vfmadd231ps (%7 ,%0,4), %%ymm15, %%ymm5 \n\t"
87
+ "vfmadd231ps (%5 ,%0,4), %%ymm12, %%ymm4 \n\t"
88
+ "vfmadd231ps (%6 ,%0,4), %%ymm13, %%ymm5 \n\t"
89
+ "vfmadd231ps (%7 ,%0,4), %%ymm14, %%ymm4 \n\t"
90
+ "vfmadd231ps (%8 ,%0,4), %%ymm15, %%ymm5 \n\t"
93
91
94
- "vfmadd231ps (%4,%8 ,4), %%ymm0 , %%ymm4 \n\t"
95
- "vfmadd231ps (%5,%8 ,4), %%ymm1 , %%ymm5 \n\t"
96
- "vfmadd231ps (%6,%8 ,4), %%ymm2 , %%ymm4 \n\t"
97
- "vfmadd231ps (%7,%8 ,4), %%ymm3 , %%ymm5 \n\t"
92
+ "vfmadd231ps (%5,%2 ,4), %%ymm0 , %%ymm4 \n\t"
93
+ "vfmadd231ps (%6,%2 ,4), %%ymm1 , %%ymm5 \n\t"
94
+ "vfmadd231ps (%7,%2 ,4), %%ymm2 , %%ymm4 \n\t"
95
+ "vfmadd231ps (%8,%2 ,4), %%ymm3 , %%ymm5 \n\t"
98
96
99
97
"vaddps %%ymm4 , %%ymm5 , %%ymm5 \n\t"
100
98
"vmulps %%ymm6 , %%ymm5 , %%ymm5 \n\t"
101
99
"vaddps %%ymm7 , %%ymm5 , %%ymm5 \n\t"
102
100
103
101
104
- "vmovups %%ymm5, (%3 ,%0,4) \n\t" // 8 * y
102
+ "vmovups %%ymm5, (%4 ,%0,4) \n\t" // 8 * y
105
103
106
- "addq $8 , %8 \n\t"
104
+ "addq $8 , %2 \n\t"
107
105
"addq $8 , %0 \n\t"
108
106
"subq $8 , %1 \n\t"
109
107
@@ -118,61 +116,59 @@ static void sgemv_kernel_4x8( BLASLONG n, FLOAT **ap, FLOAT *x, FLOAT *y, BLASLO
118
116
119
117
"vxorps %%ymm4 , %%ymm4, %%ymm4 \n\t"
120
118
"vxorps %%ymm5 , %%ymm5, %%ymm5 \n\t"
121
- "vmovups (%3 ,%0,4), %%ymm8 \n\t" // 8 * y
122
- "vmovups 32(%3 ,%0,4), %%ymm9 \n\t" // 8 * y
123
-
124
- "vfmadd231ps (%4 ,%0,4), %%ymm12, %%ymm4 \n\t"
125
- "vfmadd231ps 32(%4 ,%0,4), %%ymm12, %%ymm5 \n\t"
126
- "vfmadd231ps (%5 ,%0,4), %%ymm13, %%ymm4 \n\t"
127
- "vfmadd231ps 32(%5 ,%0,4), %%ymm13, %%ymm5 \n\t"
128
- "vfmadd231ps (%6 ,%0,4), %%ymm14, %%ymm4 \n\t"
129
- "vfmadd231ps 32(%6 ,%0,4), %%ymm14, %%ymm5 \n\t"
130
- "vfmadd231ps (%7 ,%0,4), %%ymm15, %%ymm4 \n\t"
131
- "vfmadd231ps 32(%7 ,%0,4), %%ymm15, %%ymm5 \n\t"
132
-
133
- "vfmadd231ps (%4,%8 ,4), %%ymm0 , %%ymm4 \n\t"
119
+ "vmovups (%4 ,%0,4), %%ymm8 \n\t" // 8 * y
120
+ "vmovups 32(%4 ,%0,4), %%ymm9 \n\t" // 8 * y
121
+
122
+ "vfmadd231ps (%5 ,%0,4), %%ymm12, %%ymm4 \n\t"
123
+ "vfmadd231ps 32(%5 ,%0,4), %%ymm12, %%ymm5 \n\t"
124
+ "vfmadd231ps (%6 ,%0,4), %%ymm13, %%ymm4 \n\t"
125
+ "vfmadd231ps 32(%6 ,%0,4), %%ymm13, %%ymm5 \n\t"
126
+ "vfmadd231ps (%7 ,%0,4), %%ymm14, %%ymm4 \n\t"
127
+ "vfmadd231ps 32(%7 ,%0,4), %%ymm14, %%ymm5 \n\t"
128
+ "vfmadd231ps (%8 ,%0,4), %%ymm15, %%ymm4 \n\t"
129
+ "vfmadd231ps 32(%8 ,%0,4), %%ymm15, %%ymm5 \n\t"
130
+
131
+ "vfmadd231ps (%5,%2 ,4), %%ymm0 , %%ymm4 \n\t"
134
132
"addq $16, %0 \n\t"
135
- "vfmadd231ps 32(%4,%8 ,4), %%ymm0 , %%ymm5 \n\t"
136
- "vfmadd231ps (%5,%8 ,4), %%ymm1 , %%ymm4 \n\t"
137
- "vfmadd231ps 32(%5,%8 ,4), %%ymm1 , %%ymm5 \n\t"
138
- "vfmadd231ps (%6,%8 ,4), %%ymm2 , %%ymm4 \n\t"
139
- "vfmadd231ps 32(%6,%8 ,4), %%ymm2 , %%ymm5 \n\t"
140
- "vfmadd231ps (%7,%8 ,4), %%ymm3 , %%ymm4 \n\t"
141
- "vfmadd231ps 32(%7,%8 ,4), %%ymm3 , %%ymm5 \n\t"
133
+ "vfmadd231ps 32(%5,%2 ,4), %%ymm0 , %%ymm5 \n\t"
134
+ "vfmadd231ps (%6,%2 ,4), %%ymm1 , %%ymm4 \n\t"
135
+ "vfmadd231ps 32(%6,%2 ,4), %%ymm1 , %%ymm5 \n\t"
136
+ "vfmadd231ps (%7,%2 ,4), %%ymm2 , %%ymm4 \n\t"
137
+ "vfmadd231ps 32(%7,%2 ,4), %%ymm2 , %%ymm5 \n\t"
138
+ "vfmadd231ps (%8,%2 ,4), %%ymm3 , %%ymm4 \n\t"
139
+ "vfmadd231ps 32(%8,%2 ,4), %%ymm3 , %%ymm5 \n\t"
142
140
143
141
"vfmadd231ps %%ymm6 , %%ymm4 , %%ymm8 \n\t"
144
142
"vfmadd231ps %%ymm6 , %%ymm5 , %%ymm9 \n\t"
145
143
146
- "addq $16, %8 \n\t"
147
- "vmovups %%ymm8,-64(%3 ,%0,4) \n\t" // 8 * y
144
+ "addq $16, %2 \n\t"
145
+ "vmovups %%ymm8,-64(%4 ,%0,4) \n\t" // 8 * y
148
146
"subq $16, %1 \n\t"
149
- "vmovups %%ymm9,-32(%3 ,%0,4) \n\t" // 8 * y
147
+ "vmovups %%ymm9,-32(%4 ,%0,4) \n\t" // 8 * y
150
148
151
149
"jnz 1b \n\t"
152
150
153
151
"4: \n\t"
154
152
"vzeroupper \n\t"
155
- "movq %%xmm10, %8 \n\t" //restore lda
156
153
157
154
:
158
155
"+r" (i ), // 0
159
- "+r" (n ) // 1
156
+ "+r" (n ), // 1
157
+ "+r" (lda4 ) // 2
160
158
:
161
- "r" (x ), // 2
162
- "r" (y ), // 3
163
- "r" (ap [0 ]), // 4
164
- "r" (ap [1 ]), // 5
165
- "r" (ap [2 ]), // 6
166
- "r" (ap [3 ]), // 7
167
- "r" (lda4 ), // 8
159
+ "r" (x ), // 3
160
+ "r" (y ), // 4
161
+ "r" (ap [0 ]), // 5
162
+ "r" (ap [1 ]), // 6
163
+ "r" (ap [2 ]), // 7
164
+ "r" (ap [3 ]), // 8
168
165
"r" (alpha ) // 9
169
166
: "cc" ,
170
167
"%xmm0" , "%xmm1" ,
171
168
"%xmm2" , "%xmm3" ,
172
169
"%xmm4" , "%xmm5" ,
173
170
"%xmm6" , "%xmm7" ,
174
171
"%xmm8" , "%xmm9" ,
175
- "%xmm10" ,
176
172
"%xmm12" , "%xmm13" , "%xmm14" , "%xmm15" ,
177
173
"memory"
178
174
);
0 commit comments