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
62 REP_RET62 REP_RET
63%endmacro63%endmacro
64 64
65%macro INT32_TO_FLOAT 1
66cglobal 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
76int32_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
100 65
101%macro INT16_TO_FLOAT 1
102cglobal 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
112int16_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
137cglobal 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
147float_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
172cglobal 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
182float_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
201 66
202%macro INT32_TO_INT16 167%macro INT32_TO_INT16 1
203cglobal int32_to_int16_%1, 3, 3, 2, dst, src, len68cglobal 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
280 REP_RET145 REP_RET
281%endmacro146%endmacro
282 147
148%macro CONV 5-7
149cglobal %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
283%macro INT16_TO_INT32_N 0185%macro INT16_TO_INT32_N 0
284 pxor m2, m2186 pxor m2, m2
285 pxor m3, m3187 pxor m3, m3
@@ -379,14 +281,14 @@ PACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N · 93 unmodified lines
379PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N281PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N
380 282
381INIT_XMM sse2283INIT_XMM sse2
382INT32_TO_FLOAT u284CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
383INT32_TO_FLOAT a285CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
384INT16_TO_FLOAT u286CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
385INT16_TO_FLOAT a287CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
386FLOAT_TO_INT32 u288CONV float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
387FLOAT_TO_INT32 a289CONV float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
388FLOAT_TO_INT16 u290CONV int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
389FLOAT_TO_INT16 a291CONV int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
390 292
391PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT293PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
392PACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT294PACK_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
400 302
401%if HAVE_AVX303%if HAVE_AVX
402INIT_YMM avx304INIT_YMM avx
403INT32_TO_FLOAT u305CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
404INT32_TO_FLOAT a306CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
405%endif307%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