There's bug in LLVM 2.9's assembler which causes the build to fail on
the inline assembly, specifically the fsubp instruction. The bug is
LLVM #9164 (http://llvm.org/bugs/show_bug.cgi?id=9164). As I lack Zend
karma, I've attached a patch to fix this issue for affected Clang
builds. I've tested it on multiple architectures (i386, x86_64),
compilers (gcc 4.2, LLVM-GCC, Clang 2.9, Clang SVN), and systems
(Darwin, Ubuntu, BSD), and it appears to work cleanly on all of them.
The patch is against 5.4.
-- Gwynne
Index: Zend/zend_operators.h
===================================================================
--- Zend/zend_operators.h (revision 314327)
+++ Zend/zend_operators.h (working copy)
@@ -615,7 +615,11 @@
"0:\n\t"
"fildl (%2)\n\t"
"fildl (%1)\n\t"
+#if defined(__clang__) && (__clang_major__ < 2 || (__clang_major__ == 2 &&
__clang_minor__ < 10))
+ "fsubp %%st(1), %%st\n\t" // LLVM bug #9164
+#else
"fsubp %%st, %%st(1)\n\t"
+#endif
"movb $0x2,0xc(%0)\n\t"
"fstpl (%0)\n"
"1:"
@@ -635,7 +639,11 @@
"0:\n\t"
"fildq (%2)\n\t"
"fildq (%1)\n\t"
+#if defined(__clang__) && (__clang_major__ < 2 || (__clang_major__ == 2 &&
__clang_minor__ < 10))
+ "fsubp %%st(1), %%st\n\t" // LLVM bug #9164
+#else
"fsubp %%st, %%st(1)\n\t"
+#endif
"movb $0x2,0x14(%0)\n\t"
"fstpl (%0)\n"
"1:"
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php