diff options
author | Christophe Gisquet <christophe.gisquet@gmail.com> | 2014-02-14 15:03:13 +0000 |
---|---|---|
committer | Janne Grunau <janne-libav@jannau.net> | 2014-02-28 13:03:22 +0100 |
commit | 4cb6964244fd6c099383d8b7e99731e72cc844b9 (patch) | |
tree | 8b2fd29f4af8ba5d052e04d4dd1f4e97efaf73f2 /libavcodec/arm | |
parent | 7686afd049be98d18663682b92d983340fa2c305 (diff) | |
download | ffmpeg-4cb6964244fd6c099383d8b7e99731e72cc844b9.tar.gz |
dcadec: simplify decoding of VQ high frequencies
The vector dequantization has a test in a loop preventing effective SIMD
implementation. By moving it out of the loop, this loop can be DSPized.
Therefore, modify the current DSP implementation. In particular, the
DSP implementation no longer has to handle null loop sizes.
The decode_hf implementations have following timings:
For x86 Arrandale:
C SSE SSE2 SSE4
win32: 260 162 119 104
win64: 242 N/A 89 72
The arm NEON optimizations follow in a later patch as external asm. The
now unused check for the y modifier in arm inline asm is removed from
configure.
Diffstat (limited to 'libavcodec/arm')
-rw-r--r-- | libavcodec/arm/dca.h | 23 |
1 files changed, 0 insertions, 23 deletions
diff --git a/libavcodec/arm/dca.h b/libavcodec/arm/dca.h index 580bd75ffe..4aed57603e 100644 --- a/libavcodec/arm/dca.h +++ b/libavcodec/arm/dca.h @@ -81,27 +81,4 @@ static inline int decode_blockcodes(int code1, int code2, int levels, #endif -#if HAVE_NEON_INLINE && HAVE_ASM_MOD_Y - -#define int8x8_fmul_int32 int8x8_fmul_int32 -static inline void int8x8_fmul_int32(av_unused DCADSPContext *dsp, - float *dst, const int8_t *src, int scale) -{ - __asm__ ("vcvt.f32.s32 %2, %2, #4 \n" - "vld1.8 {d0}, [%1,:64] \n" - "vmovl.s8 q0, d0 \n" - "vmovl.s16 q1, d1 \n" - "vmovl.s16 q0, d0 \n" - "vcvt.f32.s32 q0, q0 \n" - "vcvt.f32.s32 q1, q1 \n" - "vmul.f32 q0, q0, %y2 \n" - "vmul.f32 q1, q1, %y2 \n" - "vst1.32 {q0-q1}, [%m0,:128] \n" - : "=Um"(*(float (*)[8])dst) - : "r"(src), "x"(scale) - : "d0", "d1", "d2", "d3"); -} - -#endif - #endif /* AVCODEC_ARM_DCA_H */ |