lavu: use intrinsics for emms on systems lacking inline asm support
authorRonald S. Bultje <rsbultje@gmail.com>
Mon, 9 Jul 2012 00:21:25 +0000 (02:21 +0200)
committerMartin Storsjö <martin@martin.st>
Tue, 10 Jul 2012 11:33:09 +0000 (14:33 +0300)
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Signed-off-by: Martin Storsjö <martin@martin.st>
configure
libavutil/internal.h

index 7507f8f..a1506c9 100755 (executable)
--- a/configure
+++ b/configure
@@ -1116,6 +1116,7 @@ HAVE_LIST="
     MapViewOfFile
     memalign
     mkstemp
+    mm_empty
     mmap
     nanosleep
     netinet_sctp_h
@@ -2743,6 +2744,8 @@ elif enabled x86; then
 
     check_code ld intrin.h "__rdtsc()" && enable rdtsc
 
+    check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
+
     enable local_aligned_8 local_aligned_16
 
     # check whether EBP is available on x86
index 41e8a9a..e8bcca5 100644 (file)
@@ -231,7 +231,7 @@ struct AVDictionary {
 #   define ONLY_IF_THREADS_ENABLED(x) NULL
 #endif
 
-#if HAVE_MMX
+#if HAVE_MMX && HAVE_INLINE_ASM
 /**
  * Empty mmx state.
  * this must be called between any dsp function and float/double code.
@@ -241,8 +241,11 @@ 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
 #else /* HAVE_MMX */
-#define emms_c()
+#   define emms_c()
 #endif /* HAVE_MMX */
 
 #endif /* AVUTIL_INTERNAL_H */