mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Merge branch 'PHP-7.4'
* PHP-7.4: Use common code for double math
This commit is contained in:
commit
319e2bc42e
2 changed files with 154 additions and 98 deletions
|
@ -49,6 +49,7 @@ ZEND_VM_HOT_NOCONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
|
@ -60,19 +61,22 @@ ZEND_VM_HOT_NOCONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(add_double);
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
ZEND_VM_C_LABEL(add_double):
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 + d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(add_double);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,6 +109,7 @@ ZEND_VM_HOT_NOCONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
|
@ -116,19 +121,22 @@ ZEND_VM_HOT_NOCONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(sub_double);
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
ZEND_VM_C_LABEL(sub_double):
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 - d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(sub_double);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +169,7 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVARCV, CONST|TMPVARCV, SPE
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
|
||||||
|
@ -175,19 +184,22 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVARCV, CONST|TMPVARCV, SPE
|
||||||
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(mul_double);
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
ZEND_VM_C_LABEL(mul_double):
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 * d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_C_GOTO(mul_double);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4629,6 +4629,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CO
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = RT_CONSTANT(opline, opline->op1);
|
op1 = RT_CONSTANT(opline, opline->op1);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -4640,19 +4641,22 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CO
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
add_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 + d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4664,6 +4668,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CO
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = RT_CONSTANT(opline, opline->op1);
|
op1 = RT_CONSTANT(opline, opline->op1);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -4675,19 +4680,22 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CO
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
sub_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 - d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4699,6 +4707,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CO
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = RT_CONSTANT(opline, opline->op1);
|
op1 = RT_CONSTANT(opline, opline->op1);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -4713,19 +4722,22 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CO
|
||||||
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
mul_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 * d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6631,6 +6643,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMP
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = RT_CONSTANT(opline, opline->op1);
|
op1 = RT_CONSTANT(opline, opline->op1);
|
||||||
op2 = EX_VAR(opline->op2.var);
|
op2 = EX_VAR(opline->op2.var);
|
||||||
|
@ -6642,19 +6655,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMP
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
add_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 + d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6666,6 +6682,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMP
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = RT_CONSTANT(opline, opline->op1);
|
op1 = RT_CONSTANT(opline, opline->op1);
|
||||||
op2 = EX_VAR(opline->op2.var);
|
op2 = EX_VAR(opline->op2.var);
|
||||||
|
@ -6677,19 +6694,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMP
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
sub_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 - d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11146,6 +11166,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -11157,19 +11178,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
add_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 + d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11181,6 +11205,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -11192,19 +11217,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
sub_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 - d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11216,6 +11244,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLE
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = RT_CONSTANT(opline, opline->op2);
|
op2 = RT_CONSTANT(opline, opline->op2);
|
||||||
|
@ -11230,19 +11259,22 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLE
|
||||||
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
mul_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 * d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11999,6 +12031,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = EX_VAR(opline->op2.var);
|
op2 = EX_VAR(opline->op2.var);
|
||||||
|
@ -12010,19 +12043,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
add_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 + d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto add_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12034,6 +12070,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = EX_VAR(opline->op2.var);
|
op2 = EX_VAR(opline->op2.var);
|
||||||
|
@ -12045,19 +12082,22 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
sub_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 - d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto sub_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12069,6 +12109,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HAN
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
|
|
||||||
zval *op1, *op2, *result;
|
zval *op1, *op2, *result;
|
||||||
|
double d1, d2;
|
||||||
|
|
||||||
op1 = EX_VAR(opline->op1.var);
|
op1 = EX_VAR(opline->op1.var);
|
||||||
op2 = EX_VAR(opline->op2.var);
|
op2 = EX_VAR(opline->op2.var);
|
||||||
|
@ -12083,19 +12124,22 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HAN
|
||||||
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = (double)Z_LVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
|
d2 = Z_DVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
|
||||||
|
d1 = Z_DVAL_P(op1);
|
||||||
|
d2 = Z_DVAL_P(op2);
|
||||||
|
mul_double:
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
|
ZVAL_DOUBLE(result, d1 * d2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
d1 = Z_DVAL_P(op1);
|
||||||
ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
|
d2 = (double)Z_LVAL_P(op2);
|
||||||
ZEND_VM_NEXT_OPCODE();
|
goto mul_double;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue