mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Merge branch 'PHP-7.4'
* PHP-7.4: speed up increment and decrement operators with overflow detection
This commit is contained in:
commit
40b2ffe201
@ -490,6 +490,19 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
return;
|
||||
overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
|
||||
#elif defined(HAVE_ASM_GOTO) && defined(__aarch64__)
|
||||
__asm__ goto (
|
||||
"ldr x5, [%0]\n\t"
|
||||
"adds x5, x5, 1\n\t"
|
||||
"bvs %l1\n"
|
||||
"str x5, [%0]"
|
||||
:
|
||||
: "r"(&op1->value)
|
||||
: "x5", "cc", "memory"
|
||||
: overflow);
|
||||
return;
|
||||
overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
|
||||
#elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
|
||||
long lresult;
|
||||
if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
|
||||
@ -540,6 +553,19 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
return;
|
||||
overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
|
||||
#elif defined(HAVE_ASM_GOTO) && defined(__aarch64__)
|
||||
__asm__ goto (
|
||||
"ldr x5, [%0]\n\t"
|
||||
"subs x5 ,x5, 1\n\t"
|
||||
"bvs %l1\n"
|
||||
"str x5, [%0]"
|
||||
:
|
||||
: "r"(&op1->value)
|
||||
: "x5", "cc", "memory"
|
||||
: overflow);
|
||||
return;
|
||||
overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
|
||||
#elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
|
||||
long lresult;
|
||||
if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
|
||||
|
Loading…
Reference in New Issue
Block a user