Originally committed as revision 25362 to svn://svn.ffmpeg.org/ffmpeg/trunk
Ramiro Polla authored on 2010/10/06 10:26:13... | ... |
@@ -1074,6 +1074,7 @@ HAVE_LIST=" |
1074 | 1074 |
VirtualAlloc |
1075 | 1075 |
winsock2_h |
1076 | 1076 |
xform_asm |
1077 |
+ xmm_clobbers |
|
1077 | 1078 |
yasm |
1078 | 1079 |
" |
1079 | 1080 |
|
... | ... |
@@ -2585,6 +2586,9 @@ EOF |
2585 | 2585 |
check_asm ebx_available '""::"b"(0)' && |
2586 | 2586 |
check_asm ebx_available '"":::"%ebx"' |
2587 | 2587 |
|
2588 |
+ # check whether xmm clobbers are supported |
|
2589 |
+ check_asm xmm_clobbers '"":::"%xmm0"' |
|
2590 |
+ |
|
2588 | 2591 |
# check whether more than 10 operands are supported |
2589 | 2592 |
check_cc <<EOF && enable ten_operands |
2590 | 2593 |
int main(void) { |
... | ... |
@@ -75,4 +75,24 @@ typedef int x86_reg; |
75 | 75 |
# define BROKEN_RELOCATIONS 1 |
76 | 76 |
#endif |
77 | 77 |
|
78 |
+/* |
|
79 |
+ * If gcc is not set to support sse (-msse) it will not accept xmm registers |
|
80 |
+ * in the clobber list for inline asm. XMM_CLOBBERS takes a list of xmm |
|
81 |
+ * registers to be marked as clobbered and evaluates to nothing if they are |
|
82 |
+ * not supported, or to the list itself if they are supported. Since a clobber |
|
83 |
+ * list may not be empty, XMM_CLOBBERS_ONLY should be used if the xmm |
|
84 |
+ * registers are the only in the clobber list. |
|
85 |
+ * For example a list with "eax" and "xmm0" as clobbers should become: |
|
86 |
+ * : XMM_CLOBBERS("xmm0",) "eax" |
|
87 |
+ * and a list with only "xmm0" should become: |
|
88 |
+ * XMM_CLOBBERS_ONLY("xmm0") |
|
89 |
+ */ |
|
90 |
+#if HAVE_XMM_CLOBBERS |
|
91 |
+# define XMM_CLOBBERS(...) __VA_ARGS__ |
|
92 |
+# define XMM_CLOBBERS_ONLY(...) : __VA_ARGS__ |
|
93 |
+#else |
|
94 |
+# define XMM_CLOBBERS(...) |
|
95 |
+# define XMM_CLOBBERS_ONLY(...) |
|
96 |
+#endif |
|
97 |
+ |
|
78 | 98 |
#endif /* AVUTIL_X86_CPU_H */ |