Skip to content

Commit a1e629d

Browse files
committed
More optimizations
1 parent 6544567 commit a1e629d

File tree

8 files changed

+71
-126
lines changed

8 files changed

+71
-126
lines changed

include/private/dsp/arch/x86/avx512/hmath/hdotp.h

+34-63
Original file line numberDiff line numberDiff line change
@@ -73,36 +73,31 @@ namespace lsp
7373
__ASM_EMIT("add $0x80, %[off]")
7474
__ASM_EMIT("sub $32, %[count]")
7575
__ASM_EMIT("4:")
76-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
77-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
78-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
79-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
76+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
8077
/* x16 block */
8178
__ASM_EMIT("add $16, %[count]")
8279
__ASM_EMIT("jl 6f")
83-
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%ymm2")
84-
__ASM_EMIT("vmovups 0x20(%[a], %[off]), %%ymm3")
85-
__ASM_EMIT("vmulps 0x00(%[b], %[off]), %%ymm2, %%ymm2")
86-
__ASM_EMIT("vmulps 0x20(%[b], %[off]), %%ymm3, %%ymm3")
87-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
88-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
80+
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%zmm2")
81+
__ASM_EMIT("vmulps 0x00(%[b], %[off]), %%zmm2, %%zmm2")
82+
__ASM_EMIT("vaddps %%zmm2, %%zmm0, %%zmm0")
8983
__ASM_EMIT("add $0x40, %[off]")
9084
__ASM_EMIT("sub $16, %[count]")
9185
__ASM_EMIT("6:")
86+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
87+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
9288
/* x8 block */
9389
__ASM_EMIT("add $8, %[count]")
94-
__ASM_EMIT("vaddps %%ymm1, %%ymm0, %%ymm0")
9590
__ASM_EMIT("jl 8f")
9691
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%ymm2")
9792
__ASM_EMIT("vmulps 0x00(%[b], %[off]), %%ymm2, %%ymm2")
9893
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
9994
__ASM_EMIT("add $0x20, %[off]")
10095
__ASM_EMIT("sub $8, %[count]")
10196
__ASM_EMIT("8:")
97+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
98+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
10299
/* x4 block */
103-
__ASM_EMIT("vextractf128 $0x01, %%ymm0, %%xmm1")
104100
__ASM_EMIT("add $4, %[count]")
105-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
106101
__ASM_EMIT("jl 10f")
107102
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%xmm2")
108103
__ASM_EMIT("vmulps 0x00(%[b], %[off]), %%xmm2, %%xmm2")
@@ -164,47 +159,33 @@ namespace lsp
164159
__ASM_EMIT("sub $32, %[count]")
165160
__ASM_EMIT("jae 1b")
166161
__ASM_EMIT("2:")
167-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
168-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
169-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
170-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
162+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
171163
/* x16 block */
172164
__ASM_EMIT("add $16, %[count]")
173165
__ASM_EMIT("jl 4f")
174-
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%ymm2")
175-
__ASM_EMIT("vmovups 0x20(%[a], %[off]), %%ymm3")
176-
__ASM_EMIT("vmovups 0x00(%[b], %[off]), %%ymm4")
177-
__ASM_EMIT("vmovups 0x20(%[b], %[off]), %%ymm5")
178-
__ASM_EMIT("vmulps %%ymm2, %%ymm2, %%ymm2")
179-
__ASM_EMIT("vmulps %%ymm3, %%ymm3, %%ymm3")
180-
__ASM_EMIT("vmulps %%ymm4, %%ymm4, %%ymm4")
181-
__ASM_EMIT("vmulps %%ymm5, %%ymm5, %%ymm5")
182-
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm2, %%ymm0")
183-
__ASM_EMIT("vfmadd231ps %%ymm5, %%ymm3, %%ymm1")
166+
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%zmm2")
167+
__ASM_EMIT("vmovups 0x00(%[b], %[off]), %%zmm4")
168+
__ASM_EMIT("vmulps %%zmm2, %%zmm2, %%zmm2")
169+
__ASM_EMIT("vmulps %%zmm4, %%zmm4, %%zmm4")
170+
__ASM_EMIT("vfmadd231ps %%zmm4, %%zmm2, %%zmm0")
184171
__ASM_EMIT("add $0x40, %[off]")
185172
__ASM_EMIT("sub $16, %[count]")
186173
__ASM_EMIT("4:")
187-
__ASM_EMIT("vextractf128 $0x01, %%ymm0, %%xmm2")
188-
__ASM_EMIT("vextractf128 $0x01, %%ymm1, %%xmm3")
189-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
190-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
174+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
175+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
191176
/* x8 block */
192177
__ASM_EMIT("add $8, %[count]")
193178
__ASM_EMIT("jl 6f")
194-
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%xmm2")
195-
__ASM_EMIT("vmovups 0x10(%[a], %[off]), %%xmm3")
196-
__ASM_EMIT("vmovups 0x00(%[b], %[off]), %%xmm4")
197-
__ASM_EMIT("vmovups 0x10(%[b], %[off]), %%xmm5")
198-
__ASM_EMIT("vmulps %%xmm2, %%xmm2, %%xmm2")
199-
__ASM_EMIT("vmulps %%xmm3, %%xmm3, %%xmm3")
200-
__ASM_EMIT("vmulps %%xmm4, %%xmm4, %%xmm4")
201-
__ASM_EMIT("vmulps %%xmm5, %%xmm5, %%xmm5")
202-
__ASM_EMIT("vfmadd231ps %%xmm4, %%xmm2, %%xmm0")
203-
__ASM_EMIT("vfmadd231ps %%xmm5, %%xmm3, %%xmm1")
179+
__ASM_EMIT("vmovups 0x00(%[a], %[off]), %%ymm2")
180+
__ASM_EMIT("vmovups 0x00(%[b], %[off]), %%ymm4")
181+
__ASM_EMIT("vmulps %%ymm2, %%ymm2, %%ymm2")
182+
__ASM_EMIT("vmulps %%ymm4, %%ymm4, %%ymm4")
183+
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm2, %%ymm0")
204184
__ASM_EMIT("add $0x20, %[off]")
205185
__ASM_EMIT("sub $8, %[count]")
206186
__ASM_EMIT("6:")
207-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
187+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
188+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
208189
/* x4 block */
209190
__ASM_EMIT("add $4, %[count]")
210191
__ASM_EMIT("jl 8f")
@@ -277,39 +258,29 @@ namespace lsp
277258
__ASM_EMIT("sub $32, %[count]")
278259
__ASM_EMIT("jae 1b")
279260
__ASM_EMIT("2:")
280-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
281-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
282-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
283-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
261+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
284262
/* x16 block */
285263
__ASM_EMIT("add $16, %[count]")
286264
__ASM_EMIT("jl 4f")
287-
__ASM_EMIT("vandps 0x00(%[a], %[off]), %%ymm6, %%ymm2")
288-
__ASM_EMIT("vandps 0x20(%[a], %[off]), %%ymm7, %%ymm3")
289-
__ASM_EMIT("vandps 0x00(%[b], %[off]), %%ymm6, %%ymm4")
290-
__ASM_EMIT("vandps 0x20(%[b], %[off]), %%ymm7, %%ymm5")
291-
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm2, %%ymm0")
292-
__ASM_EMIT("vfmadd231ps %%ymm5, %%ymm3, %%ymm1")
265+
__ASM_EMIT("vandps 0x00(%[a], %[off]), %%zmm6, %%zmm2")
266+
__ASM_EMIT("vandps 0x00(%[b], %[off]), %%zmm6, %%zmm4")
267+
__ASM_EMIT("vfmadd231ps %%zmm4, %%zmm2, %%zmm0")
293268
__ASM_EMIT("add $0x40, %[off]")
294269
__ASM_EMIT("sub $16, %[count]")
295270
__ASM_EMIT("4:")
296-
__ASM_EMIT("vextractf128 $0x01, %%ymm0, %%xmm2")
297-
__ASM_EMIT("vextractf128 $0x01, %%ymm1, %%xmm3")
298-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
299-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
271+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
272+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
300273
/* x8 block */
301274
__ASM_EMIT("add $8, %[count]")
302275
__ASM_EMIT("jl 6f")
303-
__ASM_EMIT("vandps 0x00(%[a], %[off]), %%xmm6, %%xmm2")
304-
__ASM_EMIT("vandps 0x10(%[a], %[off]), %%xmm7, %%xmm3")
305-
__ASM_EMIT("vandps 0x00(%[b], %[off]), %%xmm6, %%xmm4")
306-
__ASM_EMIT("vandps 0x10(%[b], %[off]), %%xmm7, %%xmm5")
307-
__ASM_EMIT("vfmadd231ps %%xmm4, %%xmm2, %%xmm0")
308-
__ASM_EMIT("vfmadd231ps %%xmm5, %%xmm3, %%xmm1")
276+
__ASM_EMIT("vandps 0x00(%[a], %[off]), %%ymm6, %%ymm2")
277+
__ASM_EMIT("vandps 0x00(%[b], %[off]), %%ymm6, %%ymm4")
278+
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm2, %%ymm0")
309279
__ASM_EMIT("add $0x20, %[off]")
310280
__ASM_EMIT("sub $8, %[count]")
311281
__ASM_EMIT("6:")
312-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
282+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
283+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
313284
/* x4 block */
314285
__ASM_EMIT("add $4, %[count]")
315286
__ASM_EMIT("jl 8f")

include/private/dsp/arch/x86/avx512/hmath/hsum.h

+31-57
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,18 @@ namespace lsp
4141
/* x128 blocks */
4242
__ASM_EMIT("sub $128, %[count]")
4343
__ASM_EMIT("jb 2f")
44-
__ASM_EMIT("vxorps %%zmm2, %%zmm2, %%zmm2")
45-
__ASM_EMIT("vxorps %%zmm3, %%zmm3, %%zmm3")
4644
__ASM_EMIT("1:")
4745
__ASM_EMIT("vaddps 0x000(%[src]), %%zmm0, %%zmm0")
4846
__ASM_EMIT("vaddps 0x040(%[src]), %%zmm1, %%zmm1")
49-
__ASM_EMIT("vaddps 0x080(%[src]), %%zmm2, %%zmm2")
50-
__ASM_EMIT("vaddps 0x0c0(%[src]), %%zmm3, %%zmm3")
47+
__ASM_EMIT("vaddps 0x080(%[src]), %%zmm0, %%zmm0")
48+
__ASM_EMIT("vaddps 0x0c0(%[src]), %%zmm1, %%zmm1")
5149
__ASM_EMIT("vaddps 0x100(%[src]), %%zmm0, %%zmm0")
5250
__ASM_EMIT("vaddps 0x140(%[src]), %%zmm1, %%zmm1")
53-
__ASM_EMIT("vaddps 0x180(%[src]), %%zmm2, %%zmm2")
54-
__ASM_EMIT("vaddps 0x1c0(%[src]), %%zmm3, %%zmm3")
51+
__ASM_EMIT("vaddps 0x180(%[src]), %%zmm0, %%zmm0")
52+
__ASM_EMIT("vaddps 0x1c0(%[src]), %%zmm1, %%zmm1")
5553
__ASM_EMIT("add $0x200, %[src]")
5654
__ASM_EMIT("sub $128, %[count]")
5755
__ASM_EMIT("jae 1b")
58-
__ASM_EMIT("vaddps %%zmm2, %%zmm0, %%zmm0")
59-
__ASM_EMIT("vaddps %%zmm3, %%zmm1, %%zmm1")
6056
__ASM_EMIT("2:")
6157
/* x32 blocks */
6258
__ASM_EMIT("add $96, %[count]")
@@ -68,31 +64,25 @@ namespace lsp
6864
__ASM_EMIT("sub $32, %[count]")
6965
__ASM_EMIT("jge 3b")
7066
__ASM_EMIT("4:")
71-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
72-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
73-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
74-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
67+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
7568
/* x16 block */
7669
__ASM_EMIT("add $16, %[count]")
7770
__ASM_EMIT("jl 6f")
78-
__ASM_EMIT("vaddps 0x000(%[src]), %%ymm0, %%ymm0")
79-
__ASM_EMIT("vaddps 0x020(%[src]), %%ymm1, %%ymm1")
71+
__ASM_EMIT("vaddps 0x000(%[src]), %%zmm0, %%zmm0")
8072
__ASM_EMIT("add $0x40, %[src]")
8173
__ASM_EMIT("sub $16, %[count]")
8274
__ASM_EMIT("6:")
83-
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
84-
__ASM_EMIT("vextractf128 $1, %%ymm1, %%xmm3")
85-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
86-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
75+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
76+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
8777
/* x8 block */
8878
__ASM_EMIT("add $8, %[count]")
8979
__ASM_EMIT("jl 8f")
90-
__ASM_EMIT("vaddps 0x000(%[src]), %%xmm0, %%xmm0")
91-
__ASM_EMIT("vaddps 0x010(%[src]), %%xmm1, %%xmm1")
80+
__ASM_EMIT("vaddps 0x000(%[src]), %%ymm0, %%ymm0")
9281
__ASM_EMIT("add $0x20, %[src]")
9382
__ASM_EMIT("sub $8, %[count]")
9483
__ASM_EMIT("8:")
95-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
84+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
85+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
9686
/* x4 block */
9787
__ASM_EMIT("add $4, %[count]")
9888
__ASM_EMIT("jl 10f")
@@ -116,7 +106,7 @@ namespace lsp
116106
[res] "=Yz" (result)
117107
:
118108
: "cc", "memory",
119-
"%xmm1", "%xmm2", "%xmm3"
109+
"%xmm1"
120110
);
121111

122112
return result;
@@ -169,35 +159,27 @@ namespace lsp
169159
__ASM_EMIT("sub $32, %[count]")
170160
__ASM_EMIT("jge 3b")
171161
__ASM_EMIT("4:")
172-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
173-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
174-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
175-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
162+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
176163
/* x16 block */
177164
__ASM_EMIT("add $16, %[count]")
178165
__ASM_EMIT("jl 6f")
179-
__ASM_EMIT("vmovups 0x000(%[src]), %%ymm4")
180-
__ASM_EMIT("vmovups 0x020(%[src]), %%ymm5")
181-
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm4, %%ymm0")
182-
__ASM_EMIT("vfmadd231ps %%ymm5, %%ymm5, %%ymm1")
166+
__ASM_EMIT("vmovups 0x000(%[src]), %%zmm4")
167+
__ASM_EMIT("vfmadd231ps %%zmm4, %%zmm4, %%zmm0")
183168
__ASM_EMIT("add $0x40, %[src]")
184169
__ASM_EMIT("sub $16, %[count]")
185170
__ASM_EMIT("6:")
186-
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
187-
__ASM_EMIT("vextractf128 $1, %%ymm1, %%xmm3")
188-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
189-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
171+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
172+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
190173
/* x8 block */
191174
__ASM_EMIT("add $8, %[count]")
192175
__ASM_EMIT("jl 8f")
193-
__ASM_EMIT("vmovups 0x000(%[src]), %%xmm4")
194-
__ASM_EMIT("vmovups 0x010(%[src]), %%xmm5")
195-
__ASM_EMIT("vfmadd231ps %%xmm4, %%xmm4, %%xmm0")
196-
__ASM_EMIT("vfmadd231ps %%xmm5, %%xmm5, %%xmm1")
176+
__ASM_EMIT("vmovups 0x000(%[src]), %%ymm4")
177+
__ASM_EMIT("vfmadd231ps %%ymm4, %%ymm4, %%ymm0")
197178
__ASM_EMIT("add $0x20, %[src]")
198179
__ASM_EMIT("sub $8, %[count]")
199180
__ASM_EMIT("8:")
200-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
181+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
182+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
201183
/* x4 block */
202184
__ASM_EMIT("add $4, %[count]")
203185
__ASM_EMIT("jl 10f")
@@ -244,8 +226,8 @@ namespace lsp
244226
(
245227
__ASM_EMIT("vxorps %%zmm0, %%zmm0, %%zmm0")
246228
__ASM_EMIT("vmovaps %[CC], %%zmm6")
247-
__ASM_EMIT("vxorps %%zmm1, %%zmm1, %%zmm1")
248229
__ASM_EMIT("vmovaps %%zmm6, %%zmm7")
230+
__ASM_EMIT("vxorps %%zmm1, %%zmm1, %%zmm1")
249231
/* x128 blocks */
250232
__ASM_EMIT("sub $128, %[count]")
251233
__ASM_EMIT("jb 2f")
@@ -282,35 +264,27 @@ namespace lsp
282264
__ASM_EMIT("sub $32, %[count]")
283265
__ASM_EMIT("jge 3b")
284266
__ASM_EMIT("4:")
285-
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
286-
__ASM_EMIT("vextractf64x4 $1, %%zmm1, %%ymm3")
287-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
288-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
267+
__ASM_EMIT("vaddps %%zmm1, %%zmm0, %%zmm0")
289268
/* x16 block */
290269
__ASM_EMIT("add $16, %[count]")
291270
__ASM_EMIT("jl 6f")
292-
__ASM_EMIT("vandps 0x000(%[src]), %%ymm6, %%ymm2")
293-
__ASM_EMIT("vandps 0x020(%[src]), %%ymm7, %%ymm3")
294-
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
295-
__ASM_EMIT("vaddps %%ymm3, %%ymm1, %%ymm1")
271+
__ASM_EMIT("vandps 0x000(%[src]), %%zmm6, %%zmm2")
272+
__ASM_EMIT("vaddps %%zmm2, %%zmm0, %%zmm0")
296273
__ASM_EMIT("add $0x40, %[src]")
297274
__ASM_EMIT("sub $16, %[count]")
298275
__ASM_EMIT("6:")
299-
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
300-
__ASM_EMIT("vextractf128 $1, %%ymm1, %%xmm3")
301-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
302-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
276+
__ASM_EMIT("vextractf64x4 $1, %%zmm0, %%ymm2")
277+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
303278
/* x8 block */
304279
__ASM_EMIT("add $8, %[count]")
305280
__ASM_EMIT("jl 8f")
306-
__ASM_EMIT("vandps 0x000(%[src]), %%xmm6, %%xmm2")
307-
__ASM_EMIT("vandps 0x010(%[src]), %%xmm7, %%xmm3")
308-
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
309-
__ASM_EMIT("vaddps %%xmm3, %%xmm1, %%xmm1")
281+
__ASM_EMIT("vandps 0x000(%[src]), %%ymm6, %%ymm2")
282+
__ASM_EMIT("vaddps %%ymm2, %%ymm0, %%ymm0")
310283
__ASM_EMIT("add $0x20, %[src]")
311284
__ASM_EMIT("sub $8, %[count]")
312285
__ASM_EMIT("8:")
313-
__ASM_EMIT("vaddps %%xmm1, %%xmm0, %%xmm0")
286+
__ASM_EMIT("vextractf128 $1, %%ymm0, %%xmm2")
287+
__ASM_EMIT("vaddps %%xmm2, %%xmm0, %%xmm0")
314288
/* x4 block */
315289
__ASM_EMIT("add $4, %[count]")
316290
__ASM_EMIT("jl 10f")

0 commit comments

Comments
 (0)