]> git.sesse.net Git - ffmpeg/blob - libswresample/x86/audio_convert.asm
Merge commit '1c6183233d56fb27a4a154e7e64ecab98bd877f1'
[ffmpeg] / libswresample / x86 / audio_convert.asm
1 ;******************************************************************************
2 ;* Copyright (c) 2012 Michael Niedermayer
3 ;*
4 ;* This file is part of FFmpeg.
5 ;*
6 ;* FFmpeg is free software; you can redistribute it and/or
7 ;* modify it under the terms of the GNU Lesser General Public
8 ;* License as published by the Free Software Foundation; either
9 ;* version 2.1 of the License, or (at your option) any later version.
10 ;*
11 ;* FFmpeg is distributed in the hope that it will be useful,
12 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ;* Lesser General Public License for more details.
15 ;*
16 ;* You should have received a copy of the GNU Lesser General Public
17 ;* License along with FFmpeg; if not, write to the Free Software
18 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 ;******************************************************************************
20
21 %include "libavutil/x86/x86util.asm"
22
23 SECTION_RODATA 32
24 flt2pm31: times 8 dd 4.6566129e-10
25 flt2p31 : times 8 dd 2147483648.0
26 flt2p15 : times 8 dd 32768.0
27
28 word_unpack_shuf : db  0, 1, 4, 5, 8, 9,12,13, 2, 3, 6, 7,10,11,14,15
29
30 SECTION .text
31
32
33 ;to, from, a/u, log2_outsize, log_intsize, const
34 %macro PACK_2CH 5-7
35 cglobal pack_2ch_%2_to_%1_%3, 3, 4, 6, dst, src, len, src2
36     mov src2q   , [srcq+gprsize]
37     mov srcq    , [srcq]
38     mov dstq    , [dstq]
39 %ifidn %3, a
40     test dstq, mmsize-1
41         jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
42     test srcq, mmsize-1
43         jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
44     test src2q, mmsize-1
45         jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
46 %else
47 pack_2ch_%2_to_%1_u_int %+ SUFFIX
48 %endif
49     lea     srcq , [srcq  + (1<<%5)*lenq]
50     lea     src2q, [src2q + (1<<%5)*lenq]
51     lea     dstq , [dstq  + (2<<%4)*lenq]
52     neg     lenq
53     %7 m0,m1,m2,m3,m4,m5
54 .next:
55 %if %4 >= %5
56     mov%3     m0, [         srcq +(1<<%5)*lenq]
57     mova      m1, m0
58     mov%3     m2, [         src2q+(1<<%5)*lenq]
59 %if %5 == 1
60     punpcklwd m0, m2
61     punpckhwd m1, m2
62 %else
63     punpckldq m0, m2
64     punpckhdq m1, m2
65 %endif
66     %6 m0,m1,m2,m3,m4,m5
67 %else
68     mov%3     m0, [         srcq +(1<<%5)*lenq]
69     mov%3     m1, [mmsize + srcq +(1<<%5)*lenq]
70     mov%3     m2, [         src2q+(1<<%5)*lenq]
71     mov%3     m3, [mmsize + src2q+(1<<%5)*lenq]
72     %6 m0,m1,m2,m3,m4,m5
73     mova      m2, m0
74     punpcklwd m0, m1
75     punpckhwd m2, m1
76     SWAP 1,2
77 %endif
78     mov%3 [           dstq+(2<<%4)*lenq], m0
79     mov%3 [  mmsize + dstq+(2<<%4)*lenq], m1
80 %if %4 > %5
81     mov%3 [2*mmsize + dstq+(2<<%4)*lenq], m2
82     mov%3 [3*mmsize + dstq+(2<<%4)*lenq], m3
83     add lenq, 4*mmsize/(2<<%4)
84 %else
85     add lenq, 2*mmsize/(2<<%4)
86 %endif
87         jl .next
88     REP_RET
89 %endmacro
90
91 %macro UNPACK_2CH 5-7
92 cglobal unpack_2ch_%2_to_%1_%3, 3, 4, 7, dst, src, len, dst2
93     mov dst2q   , [dstq+gprsize]
94     mov srcq    , [srcq]
95     mov dstq    , [dstq]
96 %ifidn %3, a
97     test dstq, mmsize-1
98         jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
99     test srcq, mmsize-1
100         jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
101     test dst2q, mmsize-1
102         jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
103 %else
104 unpack_2ch_%2_to_%1_u_int %+ SUFFIX
105 %endif
106     lea     srcq , [srcq  + (2<<%5)*lenq]
107     lea     dstq , [dstq  + (1<<%4)*lenq]
108     lea     dst2q, [dst2q + (1<<%4)*lenq]
109     neg     lenq
110     %7 m0,m1,m2,m3,m4,m5
111     mova      m6, [word_unpack_shuf]
112 .next:
113     mov%3     m0, [           srcq +(2<<%5)*lenq]
114     mov%3     m2, [  mmsize + srcq +(2<<%5)*lenq]
115 %if %5 == 1
116 %ifidn SUFFIX, _ssse3
117     pshufb    m0, m6
118     mova      m1, m0
119     pshufb    m2, m6
120     punpcklqdq m0,m2
121     punpckhqdq m1,m2
122 %else
123     mova      m1, m0
124     punpcklwd m0,m2
125     punpckhwd m1,m2
126
127     mova      m2, m0
128     punpcklwd m0,m1
129     punpckhwd m2,m1
130
131     mova      m1, m0
132     punpcklwd m0,m2
133     punpckhwd m1,m2
134 %endif
135 %else
136     mova      m1, m0
137     shufps    m0, m2, 10001000b
138     shufps    m1, m2, 11011101b
139 %endif
140 %if %4 < %5
141     mov%3     m2, [2*mmsize + srcq +(2<<%5)*lenq]
142     mova      m3, m2
143     mov%3     m4, [3*mmsize + srcq +(2<<%5)*lenq]
144     shufps    m2, m4, 10001000b
145     shufps    m3, m4, 11011101b
146     SWAP 1,2
147 %endif
148     %6 m0,m1,m2,m3,m4,m5
149     mov%3 [           dstq+(1<<%4)*lenq], m0
150 %if %4 > %5
151     mov%3 [          dst2q+(1<<%4)*lenq], m2
152     mov%3 [ mmsize +  dstq+(1<<%4)*lenq], m1
153     mov%3 [ mmsize + dst2q+(1<<%4)*lenq], m3
154     add lenq, 2*mmsize/(1<<%4)
155 %else
156     mov%3 [          dst2q+(1<<%4)*lenq], m1
157     add lenq, mmsize/(1<<%4)
158 %endif
159         jl .next
160     REP_RET
161 %endmacro
162
163 %macro CONV 5-7
164 cglobal %2_to_%1_%3, 3, 3, 6, dst, src, len
165     mov srcq    , [srcq]
166     mov dstq    , [dstq]
167 %ifidn %3, a
168     test dstq, mmsize-1
169         jne %2_to_%1_u_int %+ SUFFIX
170     test srcq, mmsize-1
171         jne %2_to_%1_u_int %+ SUFFIX
172 %else
173 %2_to_%1_u_int %+ SUFFIX
174 %endif
175     lea     srcq , [srcq  + (1<<%5)*lenq]
176     lea     dstq , [dstq  + (1<<%4)*lenq]
177     neg     lenq
178     %7 m0,m1,m2,m3,m4,m5
179 .next:
180     mov%3     m0, [           srcq +(1<<%5)*lenq]
181     mov%3     m1, [  mmsize + srcq +(1<<%5)*lenq]
182 %if %4 < %5
183     mov%3     m2, [2*mmsize + srcq +(1<<%5)*lenq]
184     mov%3     m3, [3*mmsize + srcq +(1<<%5)*lenq]
185 %endif
186     %6 m0,m1,m2,m3,m4,m5
187     mov%3 [           dstq+(1<<%4)*lenq], m0
188     mov%3 [  mmsize + dstq+(1<<%4)*lenq], m1
189 %if %4 > %5
190     mov%3 [2*mmsize + dstq+(1<<%4)*lenq], m2
191     mov%3 [3*mmsize + dstq+(1<<%4)*lenq], m3
192     add lenq, 4*mmsize/(1<<%4)
193 %else
194     add lenq, 2*mmsize/(1<<%4)
195 %endif
196         jl .next
197 %if mmsize == 8
198     emms
199     RET
200 %else
201     REP_RET
202 %endif
203 %endmacro
204
205 %macro PACK_6CH 5-7
206 cglobal pack_6ch_%2_to_%1_%3, 2,8,7, dst, src, src1, src2, src3, src4, src5, len
207 %if ARCH_X86_64
208     mov     lend, r2d
209 %else
210     %define lend dword r2m
211 %endif
212     mov    src1q, [srcq+1*gprsize]
213     mov    src2q, [srcq+2*gprsize]
214     mov    src3q, [srcq+3*gprsize]
215     mov    src4q, [srcq+4*gprsize]
216     mov    src5q, [srcq+5*gprsize]
217     mov     srcq, [srcq]
218     mov     dstq, [dstq]
219 %ifidn %3, a
220     test dstq, mmsize-1
221         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
222     test srcq, mmsize-1
223         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
224     test src1q, mmsize-1
225         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
226     test src2q, mmsize-1
227         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
228     test src3q, mmsize-1
229         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
230     test src4q, mmsize-1
231         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
232     test src5q, mmsize-1
233         jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
234 %else
235 pack_6ch_%2_to_%1_u_int %+ SUFFIX
236 %endif
237     sub    src1q, srcq
238     sub    src2q, srcq
239     sub    src3q, srcq
240     sub    src4q, srcq
241     sub    src5q, srcq
242 .loop:
243     mov%3     m0, [srcq      ]
244     mov%3     m1, [srcq+src1q]
245     mov%3     m2, [srcq+src2q]
246     mov%3     m3, [srcq+src3q]
247     mov%3     m4, [srcq+src4q]
248     mov%3     m5, [srcq+src5q]
249     %7 x,x,x,x,m7,x
250 %if cpuflag(sse)
251     SBUTTERFLYPS 0, 1, 6
252     SBUTTERFLYPS 2, 3, 6
253     SBUTTERFLYPS 4, 5, 6
254
255 %if cpuflag(avx)
256     blendps   m6, m4, m0, 1100b
257 %else
258     movaps    m6, m4
259     shufps    m4, m0, q3210
260     SWAP 4,6
261 %endif
262     movlhps   m0, m2
263     movhlps   m4, m2
264 %if cpuflag(avx)
265     blendps   m2, m5, m1, 1100b
266 %else
267     movaps    m2, m5
268     shufps    m5, m1, q3210
269     SWAP 2,5
270 %endif
271     movlhps   m1, m3
272     movhlps   m5, m3
273
274     %6 m0,m6,x,x,m7,m3
275     %6 m4,m1,x,x,m7,m3
276     %6 m2,m5,x,x,m7,m3
277
278     mov %+ %3 %+ ps [dstq   ], m0
279     mov %+ %3 %+ ps [dstq+16], m6
280     mov %+ %3 %+ ps [dstq+32], m4
281     mov %+ %3 %+ ps [dstq+48], m1
282     mov %+ %3 %+ ps [dstq+64], m2
283     mov %+ %3 %+ ps [dstq+80], m5
284 %else ; mmx
285     SBUTTERFLY dq, 0, 1, 6
286     SBUTTERFLY dq, 2, 3, 6
287     SBUTTERFLY dq, 4, 5, 6
288
289     movq   [dstq   ], m0
290     movq   [dstq+ 8], m2
291     movq   [dstq+16], m4
292     movq   [dstq+24], m1
293     movq   [dstq+32], m3
294     movq   [dstq+40], m5
295 %endif
296     add      srcq, mmsize
297     add      dstq, mmsize*6
298     sub      lend, mmsize/4
299     jg .loop
300 %if mmsize == 8
301     emms
302     RET
303 %else
304     REP_RET
305 %endif
306 %endmacro
307
308 %macro PACK_8CH 5-7
309 cglobal pack_8ch_%2_to_%1_%3, 2,10,10, ARCH_X86_32*32, dst, src, len, src1, src2, src3, src4, src5, src6, src7
310     mov     dstq, [dstq]
311 %if ARCH_X86_32
312     DEFINE_ARGS dst, src, src2, src3, src4, src5, src6
313     %define lend dword r2m
314     %define src1q r0q
315     %define src1m r1mp
316     %define src7q r0q
317     %define src7m r3mp
318     mov     dstm, dstq
319 %endif
320     mov    src7q, [srcq+7*gprsize]
321     mov    src6q, [srcq+6*gprsize]
322     mov    src5q, [srcq+5*gprsize]
323     mov    src4q, [srcq+4*gprsize]
324 %if ARCH_X86_32
325     mov src7m, src7q
326 %endif
327     mov    src3q, [srcq+3*gprsize]
328     mov    src2q, [srcq+2*gprsize]
329     mov    src1q, [srcq+1*gprsize]
330     mov     srcq, [srcq]
331 %ifidn %3, a
332 %if ARCH_X86_32
333     test dstmp, mmsize-1
334 %else
335     test dstq, mmsize-1
336 %endif
337         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
338     test srcq, mmsize-1
339         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
340     test src1q, mmsize-1
341         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
342     test src2q, mmsize-1
343         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
344     test src3q, mmsize-1
345         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
346     test src4q, mmsize-1
347         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
348     test src5q, mmsize-1
349         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
350     test src6q, mmsize-1
351         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
352 %if ARCH_X86_32
353     test src7m, mmsize-1
354 %else
355     test src7q, mmsize-1
356 %endif
357         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
358 %else
359 pack_8ch_%2_to_%1_u_int %+ SUFFIX
360 %endif
361     sub    src1q, srcq
362     sub    src2q, srcq
363     sub    src3q, srcq
364     sub    src4q, srcq
365     sub    src5q, srcq
366     sub    src6q, srcq
367 %if ARCH_X86_64
368     sub    src7q, srcq
369 %else
370     mov src1m, src1q
371     sub src7m, srcq
372 %endif
373
374 %if ARCH_X86_64
375     %7 x,x,x,x,m9,x
376 %elifidn %1, int32
377     %define m9 [flt2p31]
378 %else
379     %define m9 [flt2pm31]
380 %endif
381
382 .loop:
383     mov%3     m0, [srcq      ]
384     mov%3     m1, [srcq+src1q]
385     mov%3     m2, [srcq+src2q]
386     mov%3     m3, [srcq+src3q]
387 %if ARCH_X86_32
388     mov    src7q, src7m
389 %endif
390     mov%3     m4, [srcq+src4q]
391     mov%3     m5, [srcq+src5q]
392     mov%3     m6, [srcq+src6q]
393     mov%3     m7, [srcq+src7q]
394
395 %if ARCH_X86_64
396     TRANSPOSE8x4D 0, 1, 2, 3, 4, 5, 6, 7, 8
397
398     %6 m0,m1,x,x,m9,m8
399     %6 m2,m3,x,x,m9,m8
400     %6 m4,m5,x,x,m9,m8
401     %6 m6,m7,x,x,m9,m8
402
403     mov%3 [dstq], m0
404 %else
405     mov     dstq, dstm
406
407     TRANSPOSE8x4D 0, 1, 2, 3, 4, 5, 6, 7, [rsp], [rsp+16], 1
408
409     %6 m0,m1,x,x,m9,m2
410     mova     m2, [rsp]
411     mov%3   [dstq], m0
412     %6 m2,m3,x,x,m9,m0
413     %6 m4,m5,x,x,m9,m0
414     %6 m6,m7,x,x,m9,m0
415
416 %endif
417
418     mov%3 [dstq+16],  m1
419     mov%3 [dstq+32],  m2
420     mov%3 [dstq+48],  m3
421     mov%3 [dstq+64],  m4
422     mov%3 [dstq+80],  m5
423     mov%3 [dstq+96],  m6
424     mov%3 [dstq+112], m7
425
426     add      srcq, mmsize
427     add      dstq, mmsize*8
428 %if ARCH_X86_32
429     mov      dstm, dstq
430     mov      src1q, src1m
431 %endif
432     sub      lend, mmsize/4
433     jg .loop
434     REP_RET
435 %endmacro
436
437 %macro INT16_TO_INT32_N 6
438     pxor      m2, m2
439     pxor      m3, m3
440     punpcklwd m2, m1
441     punpckhwd m3, m1
442     SWAP 4,0
443     pxor      m0, m0
444     pxor      m1, m1
445     punpcklwd m0, m4
446     punpckhwd m1, m4
447 %endmacro
448
449 %macro INT32_TO_INT16_N 6
450     psrad     m0, 16
451     psrad     m1, 16
452     psrad     m2, 16
453     psrad     m3, 16
454     packssdw  m0, m1
455     packssdw  m2, m3
456     SWAP 1,2
457 %endmacro
458
459 %macro INT32_TO_FLOAT_INIT 6
460     mova      %5, [flt2pm31]
461 %endmacro
462 %macro INT32_TO_FLOAT_N 6
463     cvtdq2ps  %1, %1
464     cvtdq2ps  %2, %2
465     mulps %1, %1, %5
466     mulps %2, %2, %5
467 %endmacro
468
469 %macro FLOAT_TO_INT32_INIT 6
470     mova      %5, [flt2p31]
471 %endmacro
472 %macro FLOAT_TO_INT32_N 6
473     mulps %1, %5
474     mulps %2, %5
475     cvtps2dq  %6, %1
476     cmpps %1, %1, %5, 5
477     paddd %1, %6
478     cvtps2dq  %6, %2
479     cmpps %2, %2, %5, 5
480     paddd %2, %6
481 %endmacro
482
483 %macro INT16_TO_FLOAT_INIT 6
484     mova      m5, [flt2pm31]
485 %endmacro
486 %macro INT16_TO_FLOAT_N 6
487     INT16_TO_INT32_N %1,%2,%3,%4,%5,%6
488     cvtdq2ps  m0, m0
489     cvtdq2ps  m1, m1
490     cvtdq2ps  m2, m2
491     cvtdq2ps  m3, m3
492     mulps m0, m0, m5
493     mulps m1, m1, m5
494     mulps m2, m2, m5
495     mulps m3, m3, m5
496 %endmacro
497
498 %macro FLOAT_TO_INT16_INIT 6
499     mova      m5, [flt2p15]
500 %endmacro
501 %macro FLOAT_TO_INT16_N 6
502     mulps m0, m5
503     mulps m1, m5
504     mulps m2, m5
505     mulps m3, m5
506     cvtps2dq  m0, m0
507     cvtps2dq  m1, m1
508     packssdw  m0, m1
509     cvtps2dq  m1, m2
510     cvtps2dq  m3, m3
511     packssdw  m1, m3
512 %endmacro
513
514 %macro NOP_N 0-6
515 %endmacro
516
517 INIT_MMX mmx
518 CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
519 CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
520 CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
521 CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
522
523 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
524 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
525
526 INIT_XMM sse
527 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
528 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
529
530 INIT_XMM sse2
531 CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
532 CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
533 CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
534 CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
535
536 PACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
537 PACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
538 PACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
539 PACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
540 PACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
541 PACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
542 PACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
543 PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
544
545 UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
546 UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
547 UNPACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
548 UNPACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
549 UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
550 UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
551 UNPACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
552 UNPACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
553
554 CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
555 CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
556 CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
557 CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
558 CONV float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
559 CONV float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
560 CONV int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
561 CONV int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
562
563 PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
564 PACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
565 PACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
566 PACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
567 PACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
568 PACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
569 PACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
570 PACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
571
572 UNPACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
573 UNPACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
574 UNPACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
575 UNPACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
576 UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
577 UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
578 UNPACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
579 UNPACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
580
581 PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
582 PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
583 PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
584 PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
585
586 %if HAVE_ALIGNED_STACK
587 PACK_8CH float, float, u, 2, 2, NOP_N, NOP_N
588 PACK_8CH float, float, a, 2, 2, NOP_N, NOP_N
589
590 PACK_8CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
591 PACK_8CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
592 PACK_8CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
593 PACK_8CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
594 %endif
595
596 INIT_XMM ssse3
597 UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
598 UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
599 UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
600 UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
601 UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
602 UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
603
604 %if HAVE_AVX_EXTERNAL
605 INIT_XMM avx
606 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
607 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
608
609 PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
610 PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
611 PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
612 PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
613
614 %if HAVE_ALIGNED_STACK
615 PACK_8CH float, float, u, 2, 2, NOP_N, NOP_N
616 PACK_8CH float, float, a, 2, 2, NOP_N, NOP_N
617
618 PACK_8CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
619 PACK_8CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
620 PACK_8CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
621 PACK_8CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
622 %endif
623
624 INIT_YMM avx
625 CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
626 CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
627 %endif
628
629 %if HAVE_AVX2_EXTERNAL
630 INIT_YMM avx2
631 CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
632 CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
633 %endif