diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 312ba833987e1..00286cac388c7 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2109,7 +2109,7 @@ ZEND_API int ZEND_FASTCALL numeric_compare_function(zval *op1, zval *op2) /* {{{ d1 = zval_get_double(op1); d2 = zval_get_double(op2); - return ZEND_NORMALIZE_BOOL(d1 - d2); + return ZEND_THREEWAY_COMPARE(d1, d2); } /* }}} */ @@ -2131,8 +2131,7 @@ static int compare_long_to_string(zend_long lval, zend_string *str) /* {{{ */ } if (type == IS_DOUBLE) { - double diff = (double) lval - str_dval; - return ZEND_NORMALIZE_BOOL(diff); + return ZEND_THREEWAY_COMPARE((double) lval, str_dval); } zend_string *lval_as_str = zend_long_to_str(lval); @@ -2150,15 +2149,11 @@ static int compare_double_to_string(double dval, zend_string *str) /* {{{ */ uint8_t type = is_numeric_string(ZSTR_VAL(str), ZSTR_LEN(str), &str_lval, &str_dval, 0); if (type == IS_LONG) { - double diff = dval - (double) str_lval; - return ZEND_NORMALIZE_BOOL(diff); + return ZEND_THREEWAY_COMPARE(dval, (double) str_lval); } if (type == IS_DOUBLE) { - if (dval == str_dval) { - return 0; - } - return ZEND_NORMALIZE_BOOL(dval - str_dval); + return ZEND_THREEWAY_COMPARE(dval, str_dval); } zend_string *dval_as_str = zend_double_to_str(dval); @@ -2180,17 +2175,13 @@ ZEND_API int ZEND_FASTCALL zend_compare(zval *op1, zval *op2) /* {{{ */ return Z_LVAL_P(op1)>Z_LVAL_P(op2)?1:(Z_LVAL_P(op1)priority); double b = Z_DVAL(((spl_pqueue_elem*) y)->priority); - return ZEND_NORMALIZE_BOOL(a - b); + return ZEND_THREEWAY_COMPARE(a, b); } static spl_ptr_heap *spl_ptr_heap_init(spl_ptr_heap_cmp_func cmp, spl_ptr_heap_ctor_func ctor, spl_ptr_heap_dtor_func dtor, size_t elem_size) /* {{{ */ diff --git a/ext/standard/array.c b/ext/standard/array.c index dc0d434d1883e..b7ab04e5deea3 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -164,7 +164,7 @@ static zend_always_inline int php_array_key_compare_numeric_unstable_i(Bucket *f } else { d2 = (double)(zend_long)s->h; } - return ZEND_NORMALIZE_BOOL(d1 - d2); + return ZEND_THREEWAY_COMPARE(d1, d2); } } /* }}} */