From 893b353362bc220280efd8d14c4878a1cafe18a8 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Tue, 19 Jun 2012 12:55:10 +0200 Subject: [PATCH] x86: Only use optimizations with cmov if the CPU supports the instruction Also fill in missing hash for AV_CPU_FLAG_CMOV addition in APIChanges. (cherry picked from commit fe07c9c6b5a870b8f2ffcfac649228b4d76e9505) Signed-off-by: Diego Biurrun Conflicts: libavcodec/x86/dsputil_mmx.c --- doc/APIchanges | 2 +- libavcodec/x86/dsputil_mmx.c | 3 ++- libavcodec/x86/h264_intrapred_init.c | 3 ++- libavcodec/x86/h264dsp_mmx.c | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index a9524ccf6a..7c95af2430 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,7 +13,7 @@ libavutil: 2011-04-18 API changes, most recent first: -2014-09-16 - xxxxxxx - lavu 51.22.3 - cpu.h +2014-09-16 - 8637f4e - lavu 51.22.3 - cpu.h Add AV_CPU_FLAG_CMOV. 2012-03-04 - 7f3f855 - lavu 51.22.1 - error.h diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index e34b95b0da..81472bb726 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -2683,7 +2683,8 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) c->add_hfyu_median_prediction = ff_add_hfyu_median_prediction_mmx2; #endif #if HAVE_7REGS - if (HAVE_AMD3DNOW && (mm_flags & AV_CPU_FLAG_3DNOW)) + if (HAVE_AMD3DNOW && (mm_flags & AV_CPU_FLAG_3DNOW) && + (mm_flags & AV_CPU_FLAG_CMOV)) c->add_hfyu_median_prediction = add_hfyu_median_prediction_cmov; #endif diff --git a/libavcodec/x86/h264_intrapred_init.c b/libavcodec/x86/h264_intrapred_init.c index 223dbde2ae..70a4c1e00b 100644 --- a/libavcodec/x86/h264_intrapred_init.c +++ b/libavcodec/x86/h264_intrapred_init.c @@ -188,7 +188,8 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, const int bit_depth if (chroma_format_idc <= 1) h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_mmx; if (codec_id == CODEC_ID_SVQ3) { - h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_mmx; + if (mm_flags & AV_CPU_FLAG_CMOV) + h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_mmx; } else if (codec_id == CODEC_ID_RV40) { h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_mmx; } else { diff --git a/libavcodec/x86/h264dsp_mmx.c b/libavcodec/x86/h264dsp_mmx.c index f5ae4dc055..19b3a4b44c 100644 --- a/libavcodec/x86/h264dsp_mmx.c +++ b/libavcodec/x86/h264dsp_mmx.c @@ -361,7 +361,8 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chrom if (chroma_format_idc <= 1) c->h264_idct_add8 = ff_h264_idct_add8_8_mmx; c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmx; - c->h264_luma_dc_dequant_idct= ff_h264_luma_dc_dequant_idct_mmx; + if (mm_flags & AV_CPU_FLAG_CMOV) + c->h264_luma_dc_dequant_idct = ff_h264_luma_dc_dequant_idct_mmx; if (mm_flags & AV_CPU_FLAG_MMX2) { c->h264_idct_dc_add = ff_h264_idct_dc_add_8_mmx2;