From c3bf52713a8485f5bcba4c37ae7373c6b67cd1eb Mon Sep 17 00:00:00 2001 From: Christophe Gisquet Date: Tue, 10 Mar 2015 23:11:52 +0000 Subject: x86: xvid_idct: port MMX iDCT to yasm Also reduce the table duplication with SSE2 code, remove duplicated macro parameters. Signed-off-by: Michael Niedermayer --- libavcodec/x86/xvididct_init.c | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) (limited to 'libavcodec/x86/xvididct_init.c') diff --git a/libavcodec/x86/xvididct_init.c b/libavcodec/x86/xvididct_init.c index ae65667a31..b429032ce1 100644 --- a/libavcodec/x86/xvididct_init.c +++ b/libavcodec/x86/xvididct_init.c @@ -38,6 +38,32 @@ static void xvid_idct_sse2_add(uint8_t *dest, int line_size, short *block) ff_add_pixels_clamped(block, dest, line_size); } +#if ARCH_X86_32 +static void xvid_idct_mmx_put(uint8_t *dest, int line_size, short *block) +{ + ff_xvid_idct_mmx(block); + ff_put_pixels_clamped(block, dest, line_size); +} + +static void xvid_idct_mmx_add(uint8_t *dest, int line_size, short *block) +{ + ff_xvid_idct_mmx(block); + ff_add_pixels_clamped(block, dest, line_size); +} + +static void xvid_idct_mmxext_put(uint8_t *dest, int line_size, short *block) +{ + ff_xvid_idct_mmxext(block); + ff_put_pixels_clamped(block, dest, line_size); +} + +static void xvid_idct_mmxext_add(uint8_t *dest, int line_size, short *block) +{ + ff_xvid_idct_mmxext(block); + ff_add_pixels_clamped(block, dest, line_size); +} +#endif + av_cold void ff_xvid_idct_init_x86(IDCTDSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth) { @@ -48,19 +74,21 @@ av_cold void ff_xvid_idct_init_x86(IDCTDSPContext *c, AVCodecContext *avctx, avctx->idct_algo == FF_IDCT_XVID)) return; - if (INLINE_MMX(cpu_flags)) { - c->idct_put = ff_xvid_idct_mmx_put; - c->idct_add = ff_xvid_idct_mmx_add; +#if ARCH_X86_32 + if (EXTERNAL_MMX(cpu_flags)) { + c->idct_put = xvid_idct_mmx_put; + c->idct_add = xvid_idct_mmx_add; c->idct = ff_xvid_idct_mmx; c->perm_type = FF_IDCT_PERM_NONE; } - if (INLINE_MMXEXT(cpu_flags)) { - c->idct_put = ff_xvid_idct_mmxext_put; - c->idct_add = ff_xvid_idct_mmxext_add; + if (EXTERNAL_MMXEXT(cpu_flags)) { + c->idct_put = xvid_idct_mmxext_put; + c->idct_add = xvid_idct_mmxext_add; c->idct = ff_xvid_idct_mmxext; c->perm_type = FF_IDCT_PERM_NONE; } +#endif if (EXTERNAL_SSE2(cpu_flags)) { c->idct_put = xvid_idct_sse2_put; -- cgit v1.2.3