]> git.sesse.net Git - ffmpeg/blob - libswresample/x86/audio_convert.asm
Merge commit 'a536a4e4bc52d05f59869761337452fb1f1977f6'
[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     %7 x,x,x,x,m7,x
243 .loop:
244     mov%3     m0, [srcq      ]
245     mov%3     m1, [srcq+src1q]
246     mov%3     m2, [srcq+src2q]
247     mov%3     m3, [srcq+src3q]
248     mov%3     m4, [srcq+src4q]
249     mov%3     m5, [srcq+src5q]
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 UNPACK_6CH 5-7
309 cglobal unpack_6ch_%2_to_%1_%3, 2, 8, 8, dst, src, dst1, dst2, dst3, dst4, dst5, len
310 %if ARCH_X86_64
311     mov     lend, r2d
312 %else
313     %define lend dword r2m
314 %endif
315     mov    dst1q, [dstq+1*gprsize]
316     mov    dst2q, [dstq+2*gprsize]
317     mov    dst3q, [dstq+3*gprsize]
318     mov    dst4q, [dstq+4*gprsize]
319     mov    dst5q, [dstq+5*gprsize]
320     mov     dstq, [dstq]
321     mov     srcq, [srcq]
322 %ifidn %3, a
323     test dstq, mmsize-1
324         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
325     test srcq, mmsize-1
326         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
327     test dst1q, mmsize-1
328         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
329     test dst2q, mmsize-1
330         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
331     test dst3q, mmsize-1
332         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
333     test dst4q, mmsize-1
334         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
335     test dst5q, mmsize-1
336         jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX
337 %else
338 unpack_6ch_%2_to_%1_u_int %+ SUFFIX
339 %endif
340     sub    dst1q, dstq
341     sub    dst2q, dstq
342     sub    dst3q, dstq
343     sub    dst4q, dstq
344     sub    dst5q, dstq
345     %7 x,x,x,x,m7,x
346 .loop:
347     mov%3     m0, [srcq   ]
348     mov%3     m1, [srcq+16]
349     mov%3     m2, [srcq+32]
350     mov%3     m3, [srcq+48]
351     mov%3     m4, [srcq+64]
352     mov%3     m5, [srcq+80]
353
354     SBUTTERFLYPS 0, 3, 6
355     SBUTTERFLYPS 1, 4, 6
356     SBUTTERFLYPS 2, 5, 6
357     SBUTTERFLYPS 0, 4, 6
358     SBUTTERFLYPS 3, 2, 6
359     SBUTTERFLYPS 1, 5, 6
360     SWAP 1, 4
361     SWAP 2, 3
362
363     %6 m0,m1,x,x,m7,m6
364     %6 m2,m3,x,x,m7,m6
365     %6 m4,m5,x,x,m7,m6
366
367     mov %+ %3 %+ ps [dstq      ], m0
368     mov %+ %3 %+ ps [dstq+dst1q], m1
369     mov %+ %3 %+ ps [dstq+dst2q], m2
370     mov %+ %3 %+ ps [dstq+dst3q], m3
371     mov %+ %3 %+ ps [dstq+dst4q], m4
372     mov %+ %3 %+ ps [dstq+dst5q], m5
373
374     add      srcq, mmsize*6
375     add      dstq, mmsize
376     sub      lend, mmsize/4
377     jg .loop
378     REP_RET
379 %endmacro
380
381 %macro PACK_8CH 5-7
382 cglobal pack_8ch_%2_to_%1_%3, 2,10,10, ARCH_X86_32*32, dst, src, len, src1, src2, src3, src4, src5, src6, src7
383     mov     dstq, [dstq]
384 %if ARCH_X86_32
385     DEFINE_ARGS dst, src, src2, src3, src4, src5, src6
386     %define lend dword r2m
387     %define src1q r0q
388     %define src1m r1mp
389     %define src7q r0q
390     %define src7m r3mp
391     mov     dstm, dstq
392 %endif
393     mov    src7q, [srcq+7*gprsize]
394     mov    src6q, [srcq+6*gprsize]
395     mov    src5q, [srcq+5*gprsize]
396     mov    src4q, [srcq+4*gprsize]
397 %if ARCH_X86_32
398     mov src7m, src7q
399 %endif
400     mov    src3q, [srcq+3*gprsize]
401     mov    src2q, [srcq+2*gprsize]
402     mov    src1q, [srcq+1*gprsize]
403     mov     srcq, [srcq]
404 %ifidn %3, a
405 %if ARCH_X86_32
406     test dstmp, mmsize-1
407 %else
408     test dstq, mmsize-1
409 %endif
410         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
411     test srcq, mmsize-1
412         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
413     test src1q, mmsize-1
414         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
415     test src2q, mmsize-1
416         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
417     test src3q, mmsize-1
418         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
419     test src4q, mmsize-1
420         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
421     test src5q, mmsize-1
422         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
423     test src6q, mmsize-1
424         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
425 %if ARCH_X86_32
426     test src7m, mmsize-1
427 %else
428     test src7q, mmsize-1
429 %endif
430         jne pack_8ch_%2_to_%1_u_int %+ SUFFIX
431 %else
432 pack_8ch_%2_to_%1_u_int %+ SUFFIX
433 %endif
434     sub    src1q, srcq
435     sub    src2q, srcq
436     sub    src3q, srcq
437     sub    src4q, srcq
438     sub    src5q, srcq
439     sub    src6q, srcq
440 %if ARCH_X86_64
441     sub    src7q, srcq
442 %else
443     mov src1m, src1q
444     sub src7m, srcq
445 %endif
446
447 %if ARCH_X86_64
448     %7 x,x,x,x,m9,x
449 %elifidn %1, int32
450     %define m9 [flt2p31]
451 %else
452     %define m9 [flt2pm31]
453 %endif
454
455 .loop:
456     mov%3     m0, [srcq      ]
457     mov%3     m1, [srcq+src1q]
458     mov%3     m2, [srcq+src2q]
459     mov%3     m3, [srcq+src3q]
460 %if ARCH_X86_32
461     mov    src7q, src7m
462 %endif
463     mov%3     m4, [srcq+src4q]
464     mov%3     m5, [srcq+src5q]
465     mov%3     m6, [srcq+src6q]
466     mov%3     m7, [srcq+src7q]
467
468 %if ARCH_X86_64
469     TRANSPOSE8x4D 0, 1, 2, 3, 4, 5, 6, 7, 8
470
471     %6 m0,m1,x,x,m9,m8
472     %6 m2,m3,x,x,m9,m8
473     %6 m4,m5,x,x,m9,m8
474     %6 m6,m7,x,x,m9,m8
475
476     mov%3 [dstq], m0
477 %else
478     mov     dstq, dstm
479
480     TRANSPOSE8x4D 0, 1, 2, 3, 4, 5, 6, 7, [rsp], [rsp+16], 1
481
482     %6 m0,m1,x,x,m9,m2
483     mova     m2, [rsp]
484     mov%3   [dstq], m0
485     %6 m2,m3,x,x,m9,m0
486     %6 m4,m5,x,x,m9,m0
487     %6 m6,m7,x,x,m9,m0
488
489 %endif
490
491     mov%3 [dstq+16],  m1
492     mov%3 [dstq+32],  m2
493     mov%3 [dstq+48],  m3
494     mov%3 [dstq+64],  m4
495     mov%3 [dstq+80],  m5
496     mov%3 [dstq+96],  m6
497     mov%3 [dstq+112], m7
498
499     add      srcq, mmsize
500     add      dstq, mmsize*8
501 %if ARCH_X86_32
502     mov      dstm, dstq
503     mov      src1q, src1m
504 %endif
505     sub      lend, mmsize/4
506     jg .loop
507     REP_RET
508 %endmacro
509
510 %macro INT16_TO_INT32_N 6
511     pxor      m2, m2
512     pxor      m3, m3
513     punpcklwd m2, m1
514     punpckhwd m3, m1
515     SWAP 4,0
516     pxor      m0, m0
517     pxor      m1, m1
518     punpcklwd m0, m4
519     punpckhwd m1, m4
520 %endmacro
521
522 %macro INT32_TO_INT16_N 6
523     psrad     m0, 16
524     psrad     m1, 16
525     psrad     m2, 16
526     psrad     m3, 16
527     packssdw  m0, m1
528     packssdw  m2, m3
529     SWAP 1,2
530 %endmacro
531
532 %macro INT32_TO_FLOAT_INIT 6
533     mova      %5, [flt2pm31]
534 %endmacro
535 %macro INT32_TO_FLOAT_N 6
536     cvtdq2ps  %1, %1
537     cvtdq2ps  %2, %2
538     mulps %1, %1, %5
539     mulps %2, %2, %5
540 %endmacro
541
542 %macro FLOAT_TO_INT32_INIT 6
543     mova      %5, [flt2p31]
544 %endmacro
545 %macro FLOAT_TO_INT32_N 6
546     mulps %1, %5
547     mulps %2, %5
548     cvtps2dq  %6, %1
549     cmpps %1, %1, %5, 5
550     paddd %1, %6
551     cvtps2dq  %6, %2
552     cmpps %2, %2, %5, 5
553     paddd %2, %6
554 %endmacro
555
556 %macro INT16_TO_FLOAT_INIT 6
557     mova      m5, [flt2pm31]
558 %endmacro
559 %macro INT16_TO_FLOAT_N 6
560     INT16_TO_INT32_N %1,%2,%3,%4,%5,%6
561     cvtdq2ps  m0, m0
562     cvtdq2ps  m1, m1
563     cvtdq2ps  m2, m2
564     cvtdq2ps  m3, m3
565     mulps m0, m0, m5
566     mulps m1, m1, m5
567     mulps m2, m2, m5
568     mulps m3, m3, m5
569 %endmacro
570
571 %macro FLOAT_TO_INT16_INIT 6
572     mova      m5, [flt2p15]
573 %endmacro
574 %macro FLOAT_TO_INT16_N 6
575     mulps m0, m5
576     mulps m1, m5
577     mulps m2, m5
578     mulps m3, m5
579     cvtps2dq  m0, m0
580     cvtps2dq  m1, m1
581     packssdw  m0, m1
582     cvtps2dq  m1, m2
583     cvtps2dq  m3, m3
584     packssdw  m1, m3
585 %endmacro
586
587 %macro NOP_N 0-6
588 %endmacro
589
590 INIT_MMX mmx
591 CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
592 CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
593 CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
594 CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
595
596 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
597 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
598
599 INIT_XMM sse
600 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
601 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
602
603 UNPACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
604 UNPACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
605
606 INIT_XMM sse2
607 CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
608 CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
609 CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
610 CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
611
612 PACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
613 PACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
614 PACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
615 PACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
616 PACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
617 PACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
618 PACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
619 PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
620
621 UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
622 UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
623 UNPACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
624 UNPACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
625 UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
626 UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
627 UNPACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
628 UNPACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
629
630 CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
631 CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
632 CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
633 CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
634 CONV float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
635 CONV float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
636 CONV int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
637 CONV int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
638
639 PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
640 PACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
641 PACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
642 PACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
643 PACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
644 PACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
645 PACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
646 PACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
647
648 UNPACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
649 UNPACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
650 UNPACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
651 UNPACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
652 UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
653 UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
654 UNPACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
655 UNPACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
656
657 PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
658 PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
659 PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
660 PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
661
662 UNPACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
663 UNPACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
664 UNPACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
665 UNPACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
666
667 %if HAVE_ALIGNED_STACK
668 PACK_8CH float, float, u, 2, 2, NOP_N, NOP_N
669 PACK_8CH float, float, a, 2, 2, NOP_N, NOP_N
670
671 PACK_8CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
672 PACK_8CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
673 PACK_8CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
674 PACK_8CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
675 %endif
676
677 INIT_XMM ssse3
678 UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
679 UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
680 UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
681 UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
682 UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
683 UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
684
685 %if HAVE_AVX_EXTERNAL
686 INIT_XMM avx
687 PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
688 PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
689
690 UNPACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
691 UNPACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
692
693 PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
694 PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
695 PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
696 PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
697
698 UNPACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
699 UNPACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
700 UNPACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
701 UNPACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
702
703 %if HAVE_ALIGNED_STACK
704 PACK_8CH float, float, u, 2, 2, NOP_N, NOP_N
705 PACK_8CH float, float, a, 2, 2, NOP_N, NOP_N
706
707 PACK_8CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
708 PACK_8CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
709 PACK_8CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
710 PACK_8CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
711 %endif
712
713 INIT_YMM avx
714 CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
715 CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
716 %endif
717
718 %if HAVE_AVX2_EXTERNAL
719 INIT_YMM avx2
720 CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
721 CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
722 %endif