|
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