--- embedaddon/php/Zend/zend_multiply.h 2012/02/21 23:47:52 1.1.1.1 +++ embedaddon/php/Zend/zend_multiply.h 2012/05/29 12:34:36 1.1.1.2 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_multiply.h,v 1.1.1.1 2012/02/21 23:47:52 misho Exp $ */ +/* $Id: zend_multiply.h,v 1.1.1.2 2012/05/29 12:34:36 misho Exp $ */ #if defined(__i386__) && defined(__GNUC__) @@ -25,6 +25,18 @@ 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) + +#elif defined(__x86_64__) && defined(__GNUC__) + +#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ + long __tmpvar; \ + __asm__ ("imulq %3,%0\n" \ + "adcq $0,%1" \ : "=r"(__tmpvar),"=r"(usedval) \ : "0"(a), "r"(b), "1"(0)); \ if (usedval) (dval) = (double) (a) * (double) (b); \