|
79 | 79 | else (lval) = __tmpvar; \ |
80 | 80 | } while (0) |
81 | 81 |
|
82 | | -#elif defined(ZEND_WIN32) |
83 | | - |
84 | | -# ifdef _M_X64 |
85 | | -# pragma intrinsic(_mul128) |
86 | | -# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ |
87 | | - __int64 __high; \ |
88 | | - __int64 __low = _mul128((a), (b), &__high); \ |
89 | | - if ((__low >> 63I64) == __high) { \ |
90 | | - (usedval) = 0; \ |
91 | | - (lval) = __low; \ |
92 | | - } else { \ |
93 | | - (usedval) = 1; \ |
94 | | - (dval) = (double)(a) * (double)(b); \ |
95 | | - } \ |
96 | | -} while (0) |
97 | | -# elif defined(_M_ARM64) |
98 | | -# pragma intrinsic(__mulh) |
99 | | -# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ |
100 | | - __int64 __high = __mulh((a), (b)); \ |
101 | | - __int64 __low = (a) * (b); \ |
102 | | - if ((__low >> 63I64) == __high) { \ |
103 | | - (usedval) = 0; \ |
104 | | - (lval) = __low; \ |
105 | | - } else { \ |
106 | | - (usedval) = 1; \ |
107 | | - (dval) = (double)(a) * (double)(b); \ |
108 | | - } \ |
| 82 | +#elif defined(ZEND_WIN32) && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG |
| 83 | + |
| 84 | +#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ |
| 85 | + long long __tmpvar; \ |
| 86 | + if (((usedval) = FAILED(LongLongMult((a), (b), &__tmpvar)))) { \ |
| 87 | + (dval) = (double) (a) * (double) (b); \ |
| 88 | + } \ |
| 89 | + else (lval) = __tmpvar; \ |
109 | 90 | } while (0) |
110 | | -# else |
111 | | -# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ |
112 | | - zend_long __lres = (a) * (b); \ |
113 | | - long double __dres = (long double)(a) * (long double)(b); \ |
114 | | - long double __delta = (long double) __lres - __dres; \ |
115 | | - if ( ((usedval) = (( __dres + __delta ) != __dres))) { \ |
116 | | - (dval) = __dres; \ |
117 | | - } else { \ |
118 | | - (lval) = __lres; \ |
| 91 | + |
| 92 | +#elif defined(ZEND_WIN32) && SIZEOF_LONG == SIZEOF_ZEND_LONG |
| 93 | + |
| 94 | +#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ |
| 95 | + long __tmpvar; \ |
| 96 | + if (((usedval) = FAILED(LongMult((a), (b), &__tmpvar)))) { \ |
| 97 | + (dval) = (double) (a) * (double) (b); \ |
119 | 98 | } \ |
| 99 | + else (lval) = __tmpvar; \ |
120 | 100 | } while (0) |
121 | | -# endif |
122 | 101 |
|
123 | 102 | #elif defined(__powerpc64__) && defined(__GNUC__) |
124 | 103 |
|
|
0 commit comments