From d3a4b4e09c049e20edc862a933d707e36b6232c1 Mon Sep 17 00:00:00 2001 From: Diego Biurrun <diego@biurrun.de> Date: Wed, 11 Feb 2009 11:16:00 +0000 Subject: [PATCH] Add check whether the compiler/assembler supports 10 or more operands. thanks to Loren for some help with the asm statements Originally committed as revision 17151 to svn://svn.ffmpeg.org/ffmpeg/trunk --- configure | 14 ++++++++++++++ libavcodec/x86/dsputil_mmx.c | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/configure b/configure index dc51fa592dd..210c575df09 100755 --- a/configure +++ b/configure @@ -898,6 +898,7 @@ HAVE_LIST=" sys_select_h sys_soundcard_h sys_videoio_h + ten_operands termios_h threads truncf @@ -1778,6 +1779,18 @@ EOF # check wether EBX is available on x86 check_asm ebx_available '"":::"%ebx"' + # check whether more than 10 operands are supported + check_cc <<EOF && enable ten_operands +int main(void) { + int x=0; + __asm__ volatile( + "" + :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x) + ); + return 0; +} +EOF + # check whether binutils is new enough to compile SSSE3/MMX2 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"' enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"' @@ -2190,6 +2203,7 @@ if enabled x86; then echo "CMOV is fast ${fast_cmov-no}" echo "EBX available ${ebx_available-no}" echo "EBP available ${ebp_available-no}" + echo "10 operands supported ${ten_operands-no}" fi if enabled arm; then echo "ARMv5TE enabled ${armv5te-no}" diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index 0cab053c4eb..bb8b6925d2b 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -548,7 +548,7 @@ static void add_bytes_l2_mmx(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w){ dst[i] = src1[i] + src2[i]; } -#if HAVE_7REGS +#if HAVE_7REGS && HAVE_TEN_OPERANDS static void add_hfyu_median_prediction_cmov(uint8_t *dst, uint8_t *top, uint8_t *diff, int w, int *left, int *left_top) { x86_reg w2 = -w; x86_reg x; @@ -2799,7 +2799,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) #if HAVE_YASM c->add_hfyu_median_prediction = ff_add_hfyu_median_prediction_mmx2; #endif -#if HAVE_7REGS +#if HAVE_7REGS && HAVE_TEN_OPERANDS if( mm_flags&FF_MM_3DNOW ) c->add_hfyu_median_prediction = add_hfyu_median_prediction_cmov; #endif -- GitLab