1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-13 21:28:01 +02:00
FFmpeg/libavutil/x86
Lynne 4537d9554d
x86/tx_float: implement inverse MDCT AVX2 assembly
This commit implements an iMDCT in pure assembly.

This is capable of processing any mod-8 transforms, rather than just
power of two, but since power of two is all we have assembly for
currently, that's what's supported.
It would really benefit if we could somehow use the C code to decide
which function to jump into, but exposing function labels from assebly
into C is anything but easy.
The post-transform loop could probably be improved.

This was somewhat annoying to write, as we must support arbitrary
strides during runtime. There's a fast branch for stride == 4 bytes
and a slower one which uses vgatherdps.

Zen 3 benchmarks for stride == 4 for old (av_imdct_half) vs new (av_tx):

128pt:
   2811 decicycles in         av_tx (imdct),16775916 runs,   1300 skips
   3082 decicycles in         av_imdct_half,16776751 runs,    465 skips

256pt:
   4920 decicycles in         av_tx (imdct),16775820 runs,   1396 skips
   5378 decicycles in         av_imdct_half,16776411 runs,    805 skips

512pt:
   9668 decicycles in         av_tx (imdct),16775774 runs,   1442 skips
  10626 decicycles in         av_imdct_half,16775647 runs,   1569 skips

1024pt:
  19812 decicycles in         av_tx (imdct),16777144 runs,     72 skips
  23036 decicycles in         av_imdct_half,16777167 runs,     49 skips
2022-09-06 04:21:46 +02:00
..
asm.h
bswap.h
cpu.c avutil/cpu: add AVX512 Icelake flag 2022-03-10 16:45:48 -03:00
cpu.h avutil/cpu: add AVX512 Icelake flag 2022-03-10 16:45:48 -03:00
cpuid.asm libavutil: include assembly with full path from source root 2022-02-08 10:42:26 +01:00
emms.asm libavutil: include assembly with full path from source root 2022-02-08 10:42:26 +01:00
emms.h avutil/x86/emms: Don't unnecessarily include lavu/cpu.h 2022-02-21 12:37:51 +01:00
fixed_dsp_init.c
fixed_dsp.asm libavutil: include assembly with full path from source root 2022-02-08 10:42:26 +01:00
float_dsp_init.c avutil/x86/float_dsp: Remove obsolete 3dnowext function 2022-06-22 13:37:22 +02:00
float_dsp.asm avutil/x86/float_dsp: Remove obsolete 3dnowext function 2022-06-22 13:37:22 +02:00
imgutils_init.c Remove unnecessary libavutil/(avutil|common|internal).h inclusions 2022-02-24 12:56:49 +01:00
imgutils.asm
intmath.h x86/intmath: add VEX encoded versions of av_clipf() and av_clipd() 2021-11-19 11:21:03 -03:00
intreadwrite.h
lls_init.c
lls.asm libavutil: include assembly with full path from source root 2022-02-08 10:42:26 +01:00
Makefile x86/tx_float: do not build tx_float_init.c if x86 assembly is disabled 2022-01-27 02:17:46 +01:00
pixelutils_init.c avutil/x86/pixelutils: Remove obsolete MMX(EXT) functions 2022-06-22 13:36:44 +02:00
pixelutils.asm avutil/x86/pixelutils: Remove obsolete MMX(EXT) functions 2022-06-22 13:36:44 +02:00
pixelutils.h
timer.h
tx_float_init.c x86/tx_float: implement inverse MDCT AVX2 assembly 2022-09-06 04:21:46 +02:00
tx_float.asm x86/tx_float: implement inverse MDCT AVX2 assembly 2022-09-06 04:21:46 +02:00
w64xmmtest.h
x86inc.asm avutil/cpu: add AVX512 Icelake flag 2022-03-10 16:45:48 -03:00
x86util.asm