Skip to content

Commit 5c3458a

Browse files
authored
Merge pull request #2199 from martin-frbg/zen-dtrsm
Replace most vpermpd calls in the Haswell DTRSM_RN kernel
2 parents 96a794e + acf6002 commit 5c3458a

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

kernel/x86_64/dtrsm_kernel_RN_haswell.c

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
132132
"1: \n\t"
133133

134134
" vmovups (%8,%1,4), %%ymm4 \n\t" // read a
135-
" vpermpd $0xb1 , %%ymm0 , %%ymm3 \n\t"
135+
" vpermilpd $0x05 , %%ymm0 , %%ymm3 \n\t" // was vpermpd 0xb1
136136

137137
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm8 \n\t"
138138
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm12 \n\t"
@@ -143,7 +143,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
143143

144144
" vpermpd $0x1b , %%ymm3 , %%ymm0 \n\t"
145145
" vmovups 32(%9,%1,8), %%ymm6 \n\t" // read b1
146-
" vpermpd $0xb1 , %%ymm0 , %%ymm3 \n\t"
146+
" vpermilpd $0x05 , %%ymm0 , %%ymm3 \n\t"
147147
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm10 \n\t"
148148
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm14 \n\t"
149149

@@ -160,7 +160,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
160160
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm8 \n\t"
161161
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm12 \n\t"
162162

163-
" vpermpd $0xb1 , %%ymm4 , %%ymm4 \n\t"
163+
" vpermilpd $0x05 , %%ymm4 , %%ymm4 \n\t"
164164
" vmovups (%9,%1,8), %%ymm1 \n\t" // read b0
165165
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm9 \n\t"
166166
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm13 \n\t"
@@ -170,7 +170,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
170170
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm10 \n\t"
171171
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm14 \n\t"
172172

173-
" vpermpd $0xb1 , %%ymm4 , %%ymm4 \n\t"
173+
" vpermilpd $0x05 , %%ymm4 , %%ymm4 \n\t"
174174
" addq $8, %1 \n\t"
175175
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm11 \n\t"
176176
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm15 \n\t"
@@ -185,15 +185,15 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
185185
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm8 \n\t"
186186
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm12 \n\t"
187187

188-
" vpermpd $0xb1 , %%ymm0 , %%ymm0 \n\t"
188+
" vpermilpd $0x05 , %%ymm0 , %%ymm0 \n\t"
189189
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm9 \n\t"
190190
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm13 \n\t"
191191

192192
" vpermpd $0x1b , %%ymm0 , %%ymm0 \n\t"
193193
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm10 \n\t"
194194
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm14 \n\t"
195195

196-
" vpermpd $0xb1 , %%ymm0 , %%ymm0 \n\t"
196+
" vpermilpd $0x05 , %%ymm0 , %%ymm0 \n\t"
197197
" vfmadd231pd %%ymm0 , %%ymm1 , %%ymm11 \n\t"
198198
" vfmadd231pd %%ymm0 , %%ymm2 , %%ymm15 \n\t"
199199

@@ -204,50 +204,46 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
204204
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm8 \n\t"
205205
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm12 \n\t"
206206

207-
" vpermpd $0xb1 , %%ymm4 , %%ymm4 \n\t"
207+
" vpermilpd $0x05 , %%ymm4 , %%ymm4 \n\t"
208208
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm9 \n\t"
209209
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm13 \n\t"
210210

211211
" vpermpd $0x1b , %%ymm4 , %%ymm4 \n\t"
212212
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm10 \n\t"
213213
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm14 \n\t"
214214

215-
" vpermpd $0xb1 , %%ymm4 , %%ymm4 \n\t"
215+
" vpermilpd $0x05 , %%ymm4 , %%ymm4 \n\t"
216216
" vfmadd231pd %%ymm4 , %%ymm5 , %%ymm11 \n\t"
217217
" vfmadd231pd %%ymm4 , %%ymm6 , %%ymm15 \n\t"
218218

219219
"3: \n\t"
220220

221-
" vpermpd $0xb1 , %%ymm9 , %%ymm9 \n\t"
222-
" vpermpd $0xb1 , %%ymm11, %%ymm11 \n\t"
221+
" vpermilpd $0x05 , %%ymm9 , %%ymm9 \n\t"
222+
" vpermilpd $0x05 , %%ymm11, %%ymm11 \n\t"
223223

224224
" vblendpd $0x0a , %%ymm9 , %%ymm8 , %%ymm0 \n\t"
225225
" vblendpd $0x05 , %%ymm9 , %%ymm8 , %%ymm1 \n\t"
226226
" vblendpd $0x0a , %%ymm11, %%ymm10, %%ymm2 \n\t"
227227
" vblendpd $0x05 , %%ymm11, %%ymm10, %%ymm3 \n\t"
228228

229-
" vpermpd $0x1b , %%ymm2 , %%ymm2 \n\t"
230-
" vpermpd $0x1b , %%ymm3 , %%ymm3 \n\t"
231-
" vpermpd $0xb1 , %%ymm2 , %%ymm2 \n\t"
232-
" vpermpd $0xb1 , %%ymm3 , %%ymm3 \n\t"
229+
" vperm2f128 $0x01 , %%ymm2 , %%ymm2 , %%ymm2 \n\t"
230+
" vperm2f128 $0x01 , %%ymm3 , %%ymm3 , %%ymm3 \n\t"
233231

234232
" vblendpd $0x03 , %%ymm0 , %%ymm2 , %%ymm8 \n\t"
235233
" vblendpd $0x03 , %%ymm1 , %%ymm3 , %%ymm9 \n\t"
236234
" vblendpd $0x03 , %%ymm2 , %%ymm0 , %%ymm10 \n\t"
237235
" vblendpd $0x03 , %%ymm3 , %%ymm1 , %%ymm11 \n\t"
238236

239-
" vpermpd $0xb1 , %%ymm13, %%ymm13 \n\t"
240-
" vpermpd $0xb1 , %%ymm15, %%ymm15 \n\t"
237+
" vpermilpd $0x05 , %%ymm13, %%ymm13 \n\t"
238+
" vpermilpd $0x05 , %%ymm15, %%ymm15 \n\t"
241239

242240
" vblendpd $0x0a , %%ymm13, %%ymm12, %%ymm0 \n\t"
243241
" vblendpd $0x05 , %%ymm13, %%ymm12, %%ymm1 \n\t"
244242
" vblendpd $0x0a , %%ymm15, %%ymm14, %%ymm2 \n\t"
245243
" vblendpd $0x05 , %%ymm15, %%ymm14, %%ymm3 \n\t"
246244

247-
" vpermpd $0x1b , %%ymm2 , %%ymm2 \n\t"
248-
" vpermpd $0x1b , %%ymm3 , %%ymm3 \n\t"
249-
" vpermpd $0xb1 , %%ymm2 , %%ymm2 \n\t"
250-
" vpermpd $0xb1 , %%ymm3 , %%ymm3 \n\t"
245+
" vperm2f128 $0x01 , %%ymm2 , %%ymm2 , %%ymm2 \n\t"
246+
" vperm2f128 $0x01 , %%ymm3 , %%ymm3 , %%ymm3 \n\t"
251247

252248
" vblendpd $0x03 , %%ymm0 , %%ymm2 , %%ymm12 \n\t"
253249
" vblendpd $0x03 , %%ymm1 , %%ymm3 , %%ymm13 \n\t"

0 commit comments

Comments
 (0)