diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index a1734be8c1..b68ba8c521 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -21,10 +21,6 @@ #include "avcodec.h" #include "dsputil.h" -#ifdef HAVE_MMX -int mm_flags; /* multimedia extension flags */ -#endif - void (*get_pixels)(DCTELEM *block, const UINT8 *pixels, int line_size); void (*put_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size); void (*add_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size); diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index fa8eb239a5..76f4475f82 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -75,7 +75,13 @@ int mm_support(void); static inline void emms(void) { - asm volatile ("emms;"); + __asm __volatile ("emms;":::"memory"); +} + +#define emms_c() \ +{\ + if (mm_flags & MM_MMX)\ + emms();\ } #define __align8 __attribute__ ((aligned (8))) @@ -84,6 +90,8 @@ void dsputil_init_mmx(void); #else +#define emms_c() + #define __align8 #endif diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 0d776631cc..d3e31fc428 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -434,10 +434,7 @@ int estimate_motion(MpegEncContext * s, dmin = phods_motion_search(s, &mx, &my, range / 2, xmin, ymin, xmax, ymax); break; } -#ifdef HAVE_MMX - if (mm_flags & MM_MMX) - emms(); -#endif + emms_c(); /* intra / predictive decision */ xx = mb_x * 16;