• Ben Avison's avatar
    armv6: Accelerate ff_imdct_half for general case (mdct_bits != 6) · 42c1cc35
    Ben Avison authored
    The previous implementation targeted DTS Coherent Acoustics, which only
    requires mdct_bits == 6. This relatively small size lent itself to
    unrolling the loops a small number of times, and encoding offsets
    calculated at assembly time within the load/store instructions of each
    iteration.
    
    In the more general case (codecs such as AAC and AC3) much larger arrays
    are used - mdct_bits == [8, 9, 11]. The old method does not scale for
    these cases, so more integer registers are used with non-unrolled versions
    of the loops (and with some stack spillage). The postrotation filter loop
    is still unrolled by a factor of 2 to permit the double-buffering of some
    VFP registers to facilitate overlap of neighbouring iterations.
    
    I benchmarked the result by measuring the number of gperftools samples
    that hit anywhere in the AAC decoder (starting from aac_decode_frame())
    or specifically in ff_imdct_half_c / ff_imdct_half_vfp, for the same
    example AAC stream:
    
                      Before          After
                      Mean   StdDev   Mean   StdDev  Confidence  Change
    aac_decode_frame  2368.1 35.8     2117.2 35.3    100.0%      +11.8%
    ff_imdct_half_*   457.5  22.4     251.2  16.2    100.0%      +82.1%
    Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
    42c1cc35
Name
Last commit
Last update
..
Makefile Loading commit data...
aac.h Loading commit data...
aacpsdsp_init_arm.c Loading commit data...
aacpsdsp_neon.S Loading commit data...
ac3dsp_arm.S Loading commit data...
ac3dsp_armv6.S Loading commit data...
ac3dsp_init_arm.c Loading commit data...
ac3dsp_neon.S Loading commit data...
asm-offsets.h Loading commit data...
audiodsp_arm.h Loading commit data...
audiodsp_init_arm.c Loading commit data...
audiodsp_init_neon.c Loading commit data...
audiodsp_neon.S Loading commit data...
blockdsp_arm.h Loading commit data...
blockdsp_init_arm.c Loading commit data...
blockdsp_init_neon.c Loading commit data...
blockdsp_neon.S Loading commit data...
cabac.h Loading commit data...
dca.h Loading commit data...
dcadsp_init_arm.c Loading commit data...
dcadsp_neon.S Loading commit data...
dcadsp_vfp.S Loading commit data...
dsputil_arm.h Loading commit data...
dsputil_armv6.S Loading commit data...
dsputil_init_arm.c Loading commit data...
dsputil_init_armv6.c Loading commit data...
fft_fixed_init_arm.c Loading commit data...
fft_fixed_neon.S Loading commit data...
fft_init_arm.c Loading commit data...
fft_neon.S Loading commit data...
fft_vfp.S Loading commit data...
flacdsp_arm.S Loading commit data...
flacdsp_init_arm.c Loading commit data...
fmtconvert_init_arm.c Loading commit data...
fmtconvert_neon.S Loading commit data...
fmtconvert_vfp.S Loading commit data...
fmtconvert_vfp_armv6.S Loading commit data...
h264chroma_init_arm.c Loading commit data...
h264cmc_neon.S Loading commit data...
h264dsp_init_arm.c Loading commit data...
h264dsp_neon.S Loading commit data...
h264idct_neon.S Loading commit data...
h264pred_init_arm.c Loading commit data...
h264pred_neon.S Loading commit data...
h264qpel_init_arm.c Loading commit data...
h264qpel_neon.S Loading commit data...
hpeldsp_arm.S Loading commit data...
hpeldsp_arm.h Loading commit data...
hpeldsp_armv6.S Loading commit data...
hpeldsp_init_arm.c Loading commit data...
hpeldsp_init_armv6.c Loading commit data...
hpeldsp_init_neon.c Loading commit data...
hpeldsp_neon.S Loading commit data...
idctdsp_arm.S Loading commit data...
idctdsp_arm.h Loading commit data...
idctdsp_armv6.S Loading commit data...
idctdsp_init_arm.c Loading commit data...
idctdsp_init_armv5te.c Loading commit data...
idctdsp_init_armv6.c Loading commit data...
idctdsp_init_neon.c Loading commit data...
idctdsp_neon.S Loading commit data...
int_neon.S Loading commit data...
jrevdct_arm.S Loading commit data...
lossless_audiodsp_init_arm.c Loading commit data...
lossless_audiodsp_neon.S Loading commit data...
mathops.h Loading commit data...
mdct_fixed_neon.S Loading commit data...
mdct_neon.S Loading commit data...
mdct_vfp.S Loading commit data...
mlpdsp_armv5te.S Loading commit data...
mlpdsp_armv6.S Loading commit data...
mlpdsp_init_arm.c Loading commit data...
mpegaudiodsp_fixed_armv6.S Loading commit data...
mpegaudiodsp_init_arm.c Loading commit data...
mpegvideo_arm.c Loading commit data...
mpegvideo_arm.h Loading commit data...
mpegvideo_armv5te.c Loading commit data...
mpegvideo_armv5te_s.S Loading commit data...
mpegvideo_neon.S Loading commit data...
mpegvideoencdsp_armv6.S Loading commit data...
mpegvideoencdsp_init_arm.c Loading commit data...
neon.S Loading commit data...
neontest.c Loading commit data...
pixblockdsp_armv6.S Loading commit data...
pixblockdsp_init_arm.c Loading commit data...
rdft_neon.S Loading commit data...
rv34dsp_init_arm.c Loading commit data...
rv34dsp_neon.S Loading commit data...
rv40dsp_init_arm.c Loading commit data...
rv40dsp_neon.S Loading commit data...
sbrdsp_init_arm.c Loading commit data...
sbrdsp_neon.S Loading commit data...
simple_idct_arm.S Loading commit data...
simple_idct_armv5te.S Loading commit data...
simple_idct_armv6.S Loading commit data...
simple_idct_neon.S Loading commit data...
startcode_armv6.S Loading commit data...
synth_filter_neon.S Loading commit data...
synth_filter_vfp.S Loading commit data...
vc1dsp.h Loading commit data...
vc1dsp_init_arm.c Loading commit data...
vc1dsp_init_neon.c Loading commit data...
vc1dsp_neon.S Loading commit data...
videodsp_arm.h Loading commit data...
videodsp_armv5te.S Loading commit data...
videodsp_init_arm.c Loading commit data...
videodsp_init_armv5te.c Loading commit data...
vorbisdsp_init_arm.c Loading commit data...
vorbisdsp_neon.S Loading commit data...
vp3dsp_init_arm.c Loading commit data...
vp3dsp_neon.S Loading commit data...
vp56_arith.h Loading commit data...
vp6dsp_init_arm.c Loading commit data...
vp6dsp_neon.S Loading commit data...
vp8.h Loading commit data...
vp8_armv6.S Loading commit data...
vp8dsp.h Loading commit data...
vp8dsp_armv6.S Loading commit data...
vp8dsp_init_arm.c Loading commit data...
vp8dsp_init_armv6.c Loading commit data...
vp8dsp_init_neon.c Loading commit data...
vp8dsp_neon.S Loading commit data...