History

swr: replace planar->planar/packed->packed FLT<->S16/S32 SIMD by new macros

this simplifies the code

Michael Niedermayer committed 14 years ago

Commit aae31191 parent 47055b81 file · +47 −145Browse files

Unified · Split

libswresample/x86/audio_convert.asm+47−145
@@ -62,142 +62,7 @@ int16_to_int32_u_int %+ SUFFIX · 61 unmodified lines
6262 REP_RET
6363 %endmacro
6464
65−%macro INT32_TO_FLOAT 1
66−cglobal int32_to_float_%1, 3, 3, 3, dst, src, len
67− mov srcq, [srcq]
68− mov dstq, [dstq]
69− shl lenq, 2
70−%ifidn %1, a
71− test dstq, mmsize-1
72− jne int32_to_float_u_int %+ SUFFIX
73− test srcq, mmsize-1
74− jne int32_to_float_u_int %+ SUFFIX
75−%else
76−int32_to_float_u_int %+ SUFFIX
77−%endif
78− add srcq, lenq
79− add dstq, lenq
80− neg lenq
81− mova m2, [flt2pm31]
82−.next:
83−%ifidn %1, a
84− cvtdq2ps m0, [ srcq+lenq]
85− cvtdq2ps m1, [mmsize + srcq+lenq]
86−%else
87− movu m0, [ srcq+lenq]
88− movu m1, [mmsize + srcq+lenq]
89− cvtdq2ps m0, m0
90− cvtdq2ps m1, m1
91−%endif
92− mulps m0, m0, m2
93− mulps m1, m1, m2
94− mov%1 [ dstq+lenq], m0
95− mov%1 [mmsize + dstq+lenq], m1
96− add lenq, 2*mmsize
97− jl .next
98− REP_RET
99−%endmacro
10065
101−%macro INT16_TO_FLOAT 1
102−cglobal int16_to_float_%1, 3, 3, 4, dst, src, len
103− mov srcq, [srcq]
104− mov dstq, [dstq]
105− shl lenq, 2
106−%ifidn %1, a
107− test dstq, mmsize-1
108− jne int16_to_float_u_int %+ SUFFIX
109− test srcq, mmsize-1
110− jne int16_to_float_u_int %+ SUFFIX
111−%else
112−int16_to_float_u_int %+ SUFFIX
113−%endif
114− add dstq, lenq
115− shr lenq, 1
116− add srcq, lenq
117− neg lenq
118− mova m3, [flt2pm31]
119−.next:
120− mov%1 m2, [srcq+lenq]
121− pxor m0, m0
122− pxor m1, m1
123− punpcklwd m0, m2
124− punpckhwd m1, m2
125− cvtdq2ps m0, m0
126− cvtdq2ps m1, m1
127− mulps m0, m3
128− mulps m1, m3
129− mov%1 [ dstq+2*lenq], m0
130− mov%1 [mmsize + dstq+2*lenq], m1
131− add lenq, mmsize
132− jl .next
133− REP_RET
134−%endmacro
135−
136−%macro FLOAT_TO_INT32 1
137−cglobal float_to_int32_%1, 3, 3, 5, dst, src, len
138− mov srcq, [srcq]
139− mov dstq, [dstq]
140− shl lenq, 2
141−%ifidn %1, a
142− test dstq, mmsize-1
143− jne float_to_int32_u_int %+ SUFFIX
144− test srcq, mmsize-1
145− jne float_to_int32_u_int %+ SUFFIX
146−%else
147−float_to_int32_u_int %+ SUFFIX
148−%endif
149− add srcq, lenq
150− add dstq, lenq
151− neg lenq
152− mova m2, [flt2p31]
153−.next:
154− mov%1 m0, [ srcq+lenq]
155− mov%1 m1, [mmsize + srcq+lenq]
156− mulps m0, m2
157− mulps m1, m2
158− cvtps2dq m3, m0
159− cvtps2dq m4, m1
160− cmpnltps m0, m2
161− cmpnltps m1, m2
162− paddd m0, m3
163− paddd m1, m4
164− mov%1 [ dstq+lenq], m0
165− mov%1 [mmsize + dstq+lenq], m1
166− add lenq, 2*mmsize
167− jl .next
168− REP_RET
169−%endmacro
170−
171−%macro FLOAT_TO_INT16 1
172−cglobal float_to_int16_%1, 3, 3, 3, dst, src, len
173− mov srcq, [srcq]
174− mov dstq, [dstq]
175− add lenq , lenq
176−%ifidn %1, a
177− test dstq, mmsize-1
178− jne float_to_int16_u_int %+ SUFFIX
179− test srcq, mmsize-1
180− jne float_to_int16_u_int %+ SUFFIX
181−%else
182−float_to_int16_u_int %+ SUFFIX
183−%endif
184− lea srcq, [srcq + 2*lenq]
185− add dstq, lenq
186− neg lenq
187− mova m2, [flt2p15]
188−.next:
189− mov%1 m0, [ srcq+2*lenq]
190− mov%1 m1, [mmsize + srcq+2*lenq]
191− mulps m0, m2
192− mulps m1, m2
193− cvtps2dq m0, m0
194− cvtps2dq m1, m1
195− packssdw m0, m1
196− mov%1 [ dstq+lenq], m0
197− add lenq, mmsize
198− jl .next
199− REP_RET
200−%endmacro
20166
20267 %macro INT32_TO_INT16 1
20368 cglobal int32_to_int16_%1, 3, 3, 2, dst, src, len
@@ -280,6 +145,43 @@ pack_2ch_%1_to_%2_u_int %+ SUFFIX · 76 unmodified lines
280145 REP_RET
281146 %endmacro
282147
148+%macro CONV 5-7
149+cglobal %2_to_%1_%3, 3, 3, 6, dst, src, len
150+ mov srcq , [srcq]
151+ mov dstq , [dstq]
152+%ifidn %3, a
153+ test dstq, mmsize-1
154+ jne %2_to_%1_u_int %+ SUFFIX
155+ test srcq, mmsize-1
156+ jne %2_to_%1_u_int %+ SUFFIX
157+%else
158+%2_to_%1_u_int %+ SUFFIX
159+%endif
160+ lea srcq , [srcq + (1<<%5)*lenq]
161+ lea dstq , [dstq + (1<<%4)*lenq]
162+ neg lenq
163+ %7
164+.next:
165+ mov%3 m0, [ srcq +(1<<%5)*lenq]
166+ mov%3 m1, [ mmsize + srcq +(1<<%5)*lenq]
167+%if %4 < %5
168+ mov%3 m2, [2*mmsize + srcq +(1<<%5)*lenq]
169+ mov%3 m3, [3*mmsize + srcq +(1<<%5)*lenq]
170+%endif
171+ %6
172+ mov%3 [ dstq+(1<<%4)*lenq], m0
173+ mov%3 [ mmsize + dstq+(1<<%4)*lenq], m1
174+%if %4 > %5
175+ mov%3 [2*mmsize + dstq+(1<<%4)*lenq], m2
176+ mov%3 [3*mmsize + dstq+(1<<%4)*lenq], m3
177+ add lenq, 4*mmsize/(1<<%4)
178+%else
179+ add lenq, 2*mmsize/(1<<%4)
180+%endif
181+ jl .next
182+ REP_RET
183+%endmacro
184+
283185 %macro INT16_TO_INT32_N 0
284186 pxor m2, m2
285187 pxor m3, m3
@@ -379,14 +281,14 @@ PACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N · 93 unmodified lines
379281 PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N
380282
381283 INIT_XMM sse2
382−INT32_TO_FLOAT u
383−INT32_TO_FLOAT a
384−INT16_TO_FLOAT u
385−INT16_TO_FLOAT a
386−FLOAT_TO_INT32 u
387−FLOAT_TO_INT32 a
388−FLOAT_TO_INT16 u
389−FLOAT_TO_INT16 a
284+CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
285+CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
286+CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
287+CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
288+CONV float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
289+CONV float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
290+CONV int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
291+CONV int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
390292
391293 PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
392294 PACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
@@ -400,6 +302,6 @@ PACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT · 7 unmodified lines
400302
401303 %if HAVE_AVX
402304 INIT_YMM avx
403−INT32_TO_FLOAT u
404−INT32_TO_FLOAT a
305+CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
306+CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
405307 %endif

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