diff options
author | Sascha Schumann <sas@php.net> | 2004-03-17 22:23:15 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 2004-03-17 22:23:15 +0000 |
commit | 7aa832aba25fcf4352fde370a77bf6021d757565 (patch) | |
tree | 50d2d7df7b818d76cc598aa423f1fd103ae61a97 | |
parent | 4341ee6061f091329cc56f1d46dab108c235a8d4 (diff) | |
download | php-git-7aa832aba25fcf4352fde370a77bf6021d757565.tar.gz |
Readd x86 implementation
-rw-r--r-- | Zend/zend_multiply.h | 19 |
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 |