]> git.sesse.net Git - vlc/commitdiff
* ./plugins/chroma/i420_yuy2.h: workaround for yet another annoying gcc
authorSam Hocevar <sam@videolan.org>
Tue, 30 Apr 2002 20:19:31 +0000 (20:19 +0000)
committerSam Hocevar <sam@videolan.org>
Tue, 30 Apr 2002 20:19:31 +0000 (20:19 +0000)
    behaviour with inline assembly (seems to be BeOS-specific). If anyone has
    a better idea than the huge "memory" constraint, please have a look at
    the MMX_CALL() macro!

plugins/chroma/i420_yuy2.h

index 7525a3458ed6a85b475f0b5d2a5f43eb8167b3cb..77d2e2a31051bb19adfc37ab942ed38a7efebd79 100644 (file)
@@ -2,7 +2,7 @@
  * i420_yuy2.h : YUV to YUV conversion module for vlc
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: i420_yuy2.h,v 1.2 2002/04/23 13:47:30 sam Exp $
+ * $Id: i420_yuy2.h,v 1.3 2002/04/30 20:19:31 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
 UNUSED_LONGLONG(woo_00ffw) = 0x00ff00ff00ff00ff;
 UNUSED_LONGLONG(woo_80w)   = 0x0000000080808080;
 
-#define MMX_CALL(foo)                                               \
-    __asm__ __volatile__(                                           \
-        MMX_LOAD                                                    \
-        ".align 8 \n\t"                                             \
-        foo                                                         \
-        MMX_INC                                                     \
-        ".align 8 \n\t"                                             \
-        foo                                                         \
-        MMX_INC                                                     \
-        MMX_SAVE                                                    \
-        : "=c" (p_line1), "=d" (p_line2), "=D" (p_y1), "=S" (p_y2)  \
-        :  "c" (p_line1),  "d" (p_line2),  "D" (p_y1),  "S" (p_y2), \
-          "m" (p_u), "m" (p_v)                                      \
-        : "eax" );
+#ifdef SYS_BEOS
+#   define MMX_CONSTRAINTS "memory"
+#else
+#   define MMX_CONSTRAINTS "eax"
+#endif
 
 #define MMX_LOAD "                                                        \n\
 pushl     %%ebx                                                           \n\
@@ -64,6 +55,21 @@ addl         $2, %%eax                                                    \n\
 addl         $2, %%ebx                                                    \n\
 "
 
+#define MMX_CALL(MMX_INSTRUCTION)                                   \
+    __asm__ __volatile__(                                           \
+        MMX_LOAD                                                    \
+        ".align 8 \n\t"                                             \
+        MMX_INSTRUCTIONS                                            \
+        MMX_INC                                                     \
+        ".align 8 \n\t"                                             \
+        MMX_INSTRUCTIONS                                            \
+        MMX_INC                                                     \
+        MMX_SAVE                                                    \
+        : "=c" (p_line1), "=d" (p_line2), "=D" (p_y1), "=S" (p_y2)  \
+        :  "c" (p_line1),  "d" (p_line2),  "D" (p_y1),  "S" (p_y2), \
+          "m" (p_u), "m" (p_v)                                      \
+        : MMX_CONSTRAINTS );
+
 #define MMX_YUV420_YUYV "                                                 \n\
 movq       (%2), %%mm0  # Load 8 Y            y7 y6 y5 y4 y3 y2 y1 y0     \n\
 movd    (%%eax), %%mm1  # Load 4 Cb           00 00 00 00 u3 u2 u1 u0     \n\