From: Sascha Schumann Date: Wed, 17 Mar 2004 22:23:15 +0000 (+0000) Subject: Readd x86 implementation X-Git-Tag: php-5.0.0RC1~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7aa832aba25fcf4352fde370a77bf6021d757565;p=php Readd x86 implementation --- 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 | + | Authors: Sascha Schumann | + | Ard Biesheuvel | +----------------------------------------------------------------------+ */ /* $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