diff options
Diffstat (limited to 'libavutil/x86')
-rw-r--r-- | libavutil/x86/emms.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libavutil/x86/emms.h b/libavutil/x86/emms.h index 6bb8ca3195..56068e581f 100644 --- a/libavutil/x86/emms.h +++ b/libavutil/x86/emms.h @@ -19,6 +19,28 @@ #ifndef AVUTIL_X86_EMMS_H #define AVUTIL_X86_EMMS_H +#include "config.h" +#include "libavutil/attributes.h" + void avpriv_emms_yasm(void); +#if HAVE_MMX_INLINE +/** + * Empty mmx state. + * this must be called between any dsp function and float/double code. + * for example sin(); dsp->idct_put(); emms_c(); cos() + */ +static av_always_inline void emms_c(void) +{ + __asm__ volatile ("emms" ::: "memory"); +} +#elif HAVE_MMX && HAVE_MM_EMPTY +# include <mmintrin.h> +# define emms_c _mm_empty +#elif HAVE_MMX && HAVE_YASM +# define emms_c avpriv_emms_yasm +#else +# define emms_c() +#endif /* HAVE_MMX_INLINE */ + #endif /* AVUTIL_X86_EMMS_H */ |