]> granicus.if.org Git - libx264/commitdiff
Inline emms instructions on x86 if possible
authorHenrik Gramner <hengar-6@student.ltu.se>
Sat, 21 May 2011 17:04:46 +0000 (19:04 +0200)
committerFiona Glaser <fiona@x264.com>
Wed, 15 Jun 2011 02:43:07 +0000 (19:43 -0700)
common/cpu.h

index 640856628b728a5b008686fcfac54e2cac8083d3..d539de22d3c1700e25564f22cbf77af62f6894b9 100644 (file)
@@ -31,7 +31,16 @@ int      x264_cpu_num_processors( void );
 void     x264_cpu_emms( void );
 void     x264_cpu_sfence( void );
 #if HAVE_MMX
+/* There is no way to forbid the compiler from using float instructions
+ * before the emms so miscompilation could theoretically occur in the
+ * unlikely event that the compiler reorders emms and float instructions. */
+#if HAVE_X86_INLINE_ASM
+/* Clobbering memory makes the compiler less likely to reorder code. */
+#define x264_emms() asm volatile( "emms":::"memory","st","st(1)","st(2)", \
+                                  "st(3)","st(4)","st(5)","st(6)","st(7)" )
+#else
 #define x264_emms() x264_cpu_emms()
+#endif
 #else
 #define x264_emms()
 #endif