[FFmpeg-cvslog] x86: Only use optimizations with cmov if the CPU supports the instruction

Diego Biurrun git at videolan.org
Wed Mar 11 22:15:03 CET 2015


ffmpeg | branch: release/0.10 | Diego Biurrun <diego at biurrun.de> | Tue Jun 19 12:55:10 2012 +0200| [893b353362bc220280efd8d14c4878a1cafe18a8] | committer: Diego Biurrun

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 <diego at biurrun.de>

Conflicts:
	libavcodec/x86/dsputil_mmx.c

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=893b353362bc220280efd8d14c4878a1cafe18a8
---

 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 a9524cc..7c95af2 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 e34b95b..81472bb 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 223dbde..70a4c1e 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 f5ae4dc..19b3a4b 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;



More information about the ffmpeg-cvslog mailing list