History

x86/aacpsdsp: add ff_ps_hybrid_analysis_ileave_sse

About 2x faster than the c version.

James Almer committed 9 years ago

Commit 8bb59e61 parent e229df92 files · +109 −0Browse files

Unified · Split

2 files
  1. libavcodec/x86/aacpsdsp.asm +106 −0
  2. libavcodec/x86/aacpsdsp_init.c +3 −0
libavcodec/x86/aacpsdsp.asm+106−0
@@ -166,6 +166,112 @@ align 16 · 165 unmodified lines
166 jl .loop166 jl .loop
167 REP_RET167 REP_RET
168 168
169;**********************************************************
170;void ps_hybrid_analysis_ileave_sse(float out[2][38][64],
171; float (*in)[32][2],
172; int i, int len)
173;**********************************************************
174INIT_XMM sse
175cglobal ps_hybrid_analysis_ileave, 3, 7, 5, out, in, i, len, in0, in1, tmp
176 movsxdifnidn iq, id
177 mov lend, 32 << 3
178 lea inq, [inq+iq*4]
179 mov tmpd, id
180 shl tmpd, 8
181 add outq, tmpq
182 mov tmpd, 64
183 sub tmpd, id
184 mov id, tmpd
185
186 test id, 1
187 jne .loop4
188 test id, 2
189 jne .loop8
190
191align 16
192.loop16:
193 mov in0q, inq
194 mov in1q, 38*64*4
195 add in1q, in0q
196 mov tmpd, lend
197
198.inner_loop16:
199 movaps m0, [in0q]
200 movaps m1, [in1q]
201 movaps m2, [in0q+lenq]
202 movaps m3, [in1q+lenq]
203 TRANSPOSE4x4PS 0, 1, 2, 3, 4
204 movaps [outq], m0
205 movaps [outq+lenq], m1
206 movaps [outq+lenq*2], m2
207 movaps [outq+3*32*2*4], m3
208 lea in0q, [in0q+lenq*2]
209 lea in1q, [in1q+lenq*2]
210 add outq, mmsize
211 sub tmpd, mmsize
212 jg .inner_loop16
213 add inq, 16
214 add outq, 3*32*2*4
215 sub id, 4
216 jg .loop16
217 RET
218
219align 16
220.loop8:
221 mov in0q, inq
222 mov in1q, 38*64*4
223 add in1q, in0q
224 mov tmpd, lend
225
226.inner_loop8:
227 movlps m0, [in0q]
228 movlps m1, [in1q]
229 movhps m0, [in0q+lenq]
230 movhps m1, [in1q+lenq]
231 SBUTTERFLYPS 0, 1, 2
232 SBUTTERFLYPD 0, 1, 2
233 movaps [outq], m0
234 movaps [outq+lenq], m1
235 lea in0q, [in0q+lenq*2]
236 lea in1q, [in1q+lenq*2]
237 add outq, mmsize
238 sub tmpd, mmsize
239 jg .inner_loop8
240 add inq, 8
241 add outq, lenq
242 sub id, 2
243 jg .loop16
244 RET
245
246align 16
247.loop4:
248 mov in0q, inq
249 mov in1q, 38*64*4
250 add in1q, in0q
251 mov tmpd, lend
252
253.inner_loop4:
254 movss m0, [in0q]
255 movss m1, [in1q]
256 movss m2, [in0q+lenq]
257 movss m3, [in1q+lenq]
258 movlhps m0, m1
259 movlhps m2, m3
260 shufps m0, m2, q2020
261 movaps [outq], m0
262 lea in0q, [in0q+lenq*2]
263 lea in1q, [in1q+lenq*2]
264 add outq, mmsize
265 sub tmpd, mmsize
266 jg .inner_loop4
267 add inq, 4
268 sub id, 1
269 test id, 2
270 jne .loop8
271 cmp id, 4
272 jge .loop16
273 RET
274
169;***********************************************************275;***********************************************************
170;void ps_hybrid_synthesis_deint_sse4(float out[2][38][64],276;void ps_hybrid_synthesis_deint_sse4(float out[2][38][64],
171; float (*in)[32][2],277; float (*in)[32][2],
libavcodec/x86/aacpsdsp_init.c+3−0
@@ -44,6 +44,8 @@ void ff_ps_hybrid_synthesis_deint_sse(float out[2][38][64], float (*in)[32][2], · 43 unmodified lines
44 int i, int len);44 int i, int len);
45void ff_ps_hybrid_synthesis_deint_sse4(float out[2][38][64], float (*in)[32][2],45void ff_ps_hybrid_synthesis_deint_sse4(float out[2][38][64], float (*in)[32][2],
46 int i, int len);46 int i, int len);
47void ff_ps_hybrid_analysis_ileave_sse(float (*out)[32][2], float L[2][38][64],
48 int i, int len);
47 49
48av_cold void ff_psdsp_init_x86(PSDSPContext *s)50av_cold void ff_psdsp_init_x86(PSDSPContext *s)
49{51{
@@ -52,6 +54,7 @@ av_cold void ff_psdsp_init_x86(PSDSPContext *s) · 2 unmodified lines
52 if (EXTERNAL_SSE(cpu_flags)) {54 if (EXTERNAL_SSE(cpu_flags)) {
53 s->add_squares = ff_ps_add_squares_sse;55 s->add_squares = ff_ps_add_squares_sse;
54 s->mul_pair_single = ff_ps_mul_pair_single_sse;56 s->mul_pair_single = ff_ps_mul_pair_single_sse;
57 s->hybrid_analysis_ileave = ff_ps_hybrid_analysis_ileave_sse;
55 s->hybrid_synthesis_deint = ff_ps_hybrid_synthesis_deint_sse;58 s->hybrid_synthesis_deint = ff_ps_hybrid_synthesis_deint_sse;
56 s->hybrid_analysis = ff_ps_hybrid_analysis_sse;59 s->hybrid_analysis = ff_ps_hybrid_analysis_sse;
57 }60 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t