summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Postnikov <apostnikov@gmail.com>2016-12-10 23:51:17 +0300
committerNikita Popov <nikita.ppv@gmail.com>2017-12-02 18:10:17 +0100
commitd6d4f2a9b38cd7fa7e938142e49e5a514d612e52 (patch)
tree715323973149ca88af872136da75ccb4dd01ed8a
parent958fdc997cd1fe3c6ff654ac470ba66768bdf214 (diff)
downloadphp-git-d6d4f2a9b38cd7fa7e938142e49e5a514d612e52.tar.gz
Fix ZEND_SIGNED_MULTIPLY_LONG for AArch64
Register operands are required in this context. This is a backport of 8c8679207ae5ada8751288e75b78c928a4d34d1d to PHP 7.0+. The current code caused incorrect behavior on AArch64 when compiling with clang.
-rw-r--r--Zend/zend_multiply.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index e156d33a16..c66e19248f 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -53,8 +53,8 @@
__asm__("mul %0, %2, %3\n" \
"smulh %1, %2, %3\n" \
"sub %1, %1, %0, asr #63\n" \
- : "=X"(__tmpvar), "=X"(usedval) \
- : "X"(a), "X"(b)); \
+ : "=&r"(__tmpvar), "=&r"(usedval) \
+ : "r"(a), "r"(b)); \
if (usedval) (dval) = (double) (a) * (double) (b); \
else (lval) = __tmpvar; \
} while (0)