summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>2004-03-17 22:23:15 +0000
committerSascha Schumann <sas@php.net>2004-03-17 22:23:15 +0000
commit7aa832aba25fcf4352fde370a77bf6021d757565 (patch)
tree50d2d7df7b818d76cc598aa423f1fd103ae61a97
parent4341ee6061f091329cc56f1d46dab108c235a8d4 (diff)
downloadphp-git-7aa832aba25fcf4352fde370a77bf6021d757565.tar.gz
Readd x86 implementation
-rw-r--r--Zend/zend_multiply.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index 81851b6f24..7570572cc0 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -12,12 +12,27 @@
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
- | Author: Ard Biesheuvel <ard@ard.nu> |
+ | Authors: Sascha Schumann <sascha@schumann.cx> |
+ | Ard Biesheuvel <ard@ard.nu> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
+#if defined(__i386__) && defined(__GNUC__)
+
+#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+ long __tmpvar; \
+ __asm__ ("imul %3,%0\n" \
+ "adc $0,%1" \
+ : "=r"(__tmpvar),"=r"(usedval) \
+ : "0"(a), "r"(b), "1"(0)); \
+ if (usedval) (dval) = (double) (a) * (double) (b); \
+ else (lval) = __tmpvar; \
+} while (0)
+
+#else
+
#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
long __lres = (a) * (b); \
double __dres = (double)(a) * (double)(b); \
@@ -28,3 +43,5 @@
(lval) = __lres; \
} \
} while (0)
+
+#endif