mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Separate "cold" parts of binary op instructions
This commit is contained in:
parent
59852c0321
commit
be94c0c3c6
5 changed files with 1527 additions and 2892 deletions
|
@ -23,7 +23,28 @@
|
||||||
* php zend_vm_gen.php
|
* php zend_vm_gen.php
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_HELPER(zend_add_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
|
SAVE_OPLINE();
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
|
}
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
add_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
|
}
|
||||||
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
@ -31,7 +52,9 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
fast_long_add_function(result, op1, op2);
|
fast_long_add_function(result, op1, op2);
|
||||||
|
@ -53,20 +76,31 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_add_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_sub_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
sub_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
add_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
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;
|
||||||
|
@ -74,7 +108,9 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
fast_long_sub_function(result, op1, op2);
|
fast_long_sub_function(result, op1, op2);
|
||||||
|
@ -96,20 +132,31 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_sub_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_mul_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
mul_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
sub_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -117,7 +164,9 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, S
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
zend_long overflow;
|
zend_long overflow;
|
||||||
|
|
||||||
|
@ -142,17 +191,7 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, S
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SAVE_OPLINE();
|
ZEND_VM_DISPATCH_TO_HELPER(zend_mul_helper, op_1, op1, op_2, op2);
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
|
||||||
}
|
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
|
||||||
}
|
|
||||||
mul_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_COLD_CONSTCONST_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
@ -180,7 +219,28 @@ ZEND_VM_COLD_HELPER(zend_mod_by_zero_helper, ANY, ANY)
|
||||||
HANDLE_EXCEPTION();
|
HANDLE_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_HELPER(zend_mod_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
|
SAVE_OPLINE();
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
|
}
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
mod_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
|
}
|
||||||
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -188,7 +248,9 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
|
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
|
||||||
|
@ -203,20 +265,31 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_mod_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_shift_left_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
mod_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -224,7 +297,9 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
||||||
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
|
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
|
||||||
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
|
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
|
||||||
/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
|
/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
|
||||||
|
@ -233,20 +308,31 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_shift_left_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_shift_right_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
shift_left_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_COLD_CONSTCONST_HANDLER(7, ZEND_SR, CONST|TMPVARCV, CONST|TMPVARCV)
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -254,24 +340,16 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
||||||
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
|
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
|
||||||
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
|
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
|
||||||
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
|
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
SAVE_OPLINE();
|
ZEND_VM_DISPATCH_TO_HELPER(zend_shift_right_helper, op_1, op1, op_2, op2);
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
|
||||||
}
|
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
|
||||||
}
|
|
||||||
shift_right_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(12, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
ZEND_VM_COLD_CONSTCONST_HANDLER(12, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||||
|
@ -694,7 +772,28 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(170, ZEND_SPACESHIP, CONST|TMPVAR|CV, CONST|TMPV
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(9, ZEND_BW_OR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
ZEND_VM_HELPER(zend_bw_or_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
|
SAVE_OPLINE();
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
|
}
|
||||||
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
|
}
|
||||||
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_COLD_CONSTCONST_HANDLER(9, ZEND_BW_OR, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -702,26 +801,39 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(9, ZEND_BW_OR, CONST|TMPVAR|CV, CONST|TMPVAR|CV,
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
||||||
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
|
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_bw_or_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_bw_and_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(10, ZEND_BW_AND, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
ZEND_VM_COLD_CONSTCONST_HANDLER(10, ZEND_BW_AND, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -729,26 +841,39 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(10, ZEND_BW_AND, CONST|TMPVAR|CV, CONST|TMPVAR|C
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
||||||
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
|
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZEND_VM_DISPATCH_TO_HELPER(zend_bw_and_helper, op_1, op1, op_2, op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZEND_VM_HELPER(zend_bw_xor_helper, ANY, ANY, zval *op_1, zval *op_2)
|
||||||
|
{
|
||||||
|
USE_OPLINE
|
||||||
|
|
||||||
SAVE_OPLINE();
|
SAVE_OPLINE();
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
op_1 = ZVAL_UNDEFINED_OP1();
|
||||||
}
|
}
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
op_2 = ZVAL_UNDEFINED_OP2();
|
||||||
|
}
|
||||||
|
bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
|
||||||
|
if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_1);
|
||||||
|
}
|
||||||
|
if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) {
|
||||||
|
zval_ptr_dtor_nogc(op_2);
|
||||||
}
|
}
|
||||||
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(11, ZEND_BW_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
ZEND_VM_COLD_CONSTCONST_HANDLER(11, ZEND_BW_XOR, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(COMMUTATIVE))
|
||||||
{
|
{
|
||||||
USE_OPLINE
|
USE_OPLINE
|
||||||
zend_free_op free_op1, free_op2;
|
zend_free_op free_op1, free_op2;
|
||||||
|
@ -756,23 +881,15 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(11, ZEND_BW_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|C
|
||||||
|
|
||||||
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);
|
||||||
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
if (ZEND_VM_SPEC && OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST) {
|
||||||
|
/* pass */
|
||||||
|
} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
|
||||||
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
|
||||||
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
|
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
|
||||||
ZEND_VM_NEXT_OPCODE();
|
ZEND_VM_NEXT_OPCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
SAVE_OPLINE();
|
ZEND_VM_DISPATCH_TO_HELPER(zend_bw_xor_helper, op_1, op1, op_2, op2);
|
||||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
|
|
||||||
op1 = ZVAL_UNDEFINED_OP1();
|
|
||||||
}
|
|
||||||
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
|
|
||||||
op2 = ZVAL_UNDEFINED_OP2();
|
|
||||||
}
|
|
||||||
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
|
|
||||||
FREE_OP1();
|
|
||||||
FREE_OP2();
|
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ZEND_VM_COLD_CONSTCONST_HANDLER(15, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
ZEND_VM_COLD_CONSTCONST_HANDLER(15, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE))
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -873,7 +873,7 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
|
||||||
// ZEND_VM_DISPATCH_TO_HELPER
|
// ZEND_VM_DISPATCH_TO_HELPER
|
||||||
if (isset($matches[2])) {
|
if (isset($matches[2])) {
|
||||||
// extra args
|
// extra args
|
||||||
$args = substr(preg_replace("/,\s*[A-Za-z_]*\s*,\s*([^,)\s]*)\s*/", ", $1", $matches[2]), 2);
|
$args = substr(preg_replace("/,\s*[A-Za-z0-9_]*\s*,\s*([^,)\s]*)\s*/", ", $1", $matches[2]), 2);
|
||||||
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
|
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
|
||||||
}
|
}
|
||||||
if (is_hot_helper($matches[1])) {
|
if (is_hot_helper($matches[1])) {
|
||||||
|
@ -910,7 +910,7 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
|
||||||
// ZEND_VM_DISPATCH_TO_HELPER
|
// ZEND_VM_DISPATCH_TO_HELPER
|
||||||
if (isset($matches[2])) {
|
if (isset($matches[2])) {
|
||||||
// extra args
|
// extra args
|
||||||
$args = substr(preg_replace("/,\s*[A-Za-z_]*\s*,\s*([^,)\s]*)\s*/", ", $1", $matches[2]), 2);
|
$args = substr(preg_replace("/,\s*[A-Za-z0-9_]*\s*,\s*([^,)\s]*)\s*/", ", $1", $matches[2]), 2);
|
||||||
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
|
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
|
||||||
}
|
}
|
||||||
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))";
|
return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))";
|
||||||
|
@ -934,7 +934,7 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
|
||||||
// ZEND_VM_DISPATCH_TO_HELPER
|
// ZEND_VM_DISPATCH_TO_HELPER
|
||||||
if (isset($matches[2])) {
|
if (isset($matches[2])) {
|
||||||
// extra args
|
// extra args
|
||||||
$args = preg_replace("/,\s*([A-Za-z_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
|
$args = preg_replace("/,\s*([A-Za-z0-9_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
|
||||||
return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
||||||
}
|
}
|
||||||
return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
||||||
|
@ -958,7 +958,7 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
|
||||||
// ZEND_VM_DISPATCH_TO_HELPER
|
// ZEND_VM_DISPATCH_TO_HELPER
|
||||||
if (isset($matches[2])) {
|
if (isset($matches[2])) {
|
||||||
// extra args
|
// extra args
|
||||||
$args = preg_replace("/,\s*([A-Za-z_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
|
$args = preg_replace("/,\s*([A-Za-z0-9_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
|
||||||
return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
||||||
}
|
}
|
||||||
return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
|
||||||
|
@ -1038,6 +1038,8 @@ function is_hot_handler($hot, $op1, $op2, $extra_spec) {
|
||||||
return true;
|
return true;
|
||||||
} else if ($hot === 'HOT_NOCONST_') {
|
} else if ($hot === 'HOT_NOCONST_') {
|
||||||
return ($op1 !== 'CONST');
|
return ($op1 !== 'CONST');
|
||||||
|
} else if ($hot === 'HOT_NOCONSTCONST_') {
|
||||||
|
return (($op1 !== 'CONST') || ($op2 !== 'CONST')) ;
|
||||||
} else if ($hot === 'HOT_OBJ_') {
|
} else if ($hot === 'HOT_OBJ_') {
|
||||||
return (($op1 === 'UNUSED') || ($op1 === 'CV')) && ($op2 === 'CONST');
|
return (($op1 === 'UNUSED') || ($op1 === 'CV')) && ($op2 === 'CONST');
|
||||||
} else if ($hot === 'HOT_SEND_') {
|
} else if ($hot === 'HOT_SEND_') {
|
||||||
|
@ -1058,6 +1060,8 @@ function is_cold_handler($hot, $op1, $op2, $extra_spec) {
|
||||||
return ($op1 === 'CONST');
|
return ($op1 === 'CONST');
|
||||||
} else if ($hot === 'HOT_NOCONST_') {
|
} else if ($hot === 'HOT_NOCONST_') {
|
||||||
return ($op1 === 'CONST');
|
return ($op1 === 'CONST');
|
||||||
|
} else if ($hot === 'HOT_NOCONSTCONST_') {
|
||||||
|
return ($op1 === 'CONST' && $op2 === 'CONST');
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2347,6 +2351,7 @@ function gen_vm($def, $skel) {
|
||||||
strpos($line,"ZEND_VM_INLINE_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_INLINE_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_NOCONST_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_NOCONST_HANDLER(") === 0 ||
|
||||||
|
strpos($line,"ZEND_VM_HOT_NOCONSTCONST_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_SEND_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_SEND_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_OBJ_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_OBJ_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_COLD_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_COLD_HANDLER(") === 0 ||
|
||||||
|
@ -2354,7 +2359,7 @@ function gen_vm($def, $skel) {
|
||||||
strpos($line,"ZEND_VM_COLD_CONSTCONST_HANDLER(") === 0) {
|
strpos($line,"ZEND_VM_COLD_CONSTCONST_HANDLER(") === 0) {
|
||||||
// Parsing opcode handler's definition
|
// Parsing opcode handler's definition
|
||||||
if (preg_match(
|
if (preg_match(
|
||||||
"/^ZEND_VM_(HOT_|INLINE_|HOT_OBJ_|HOT_SEND_|HOT_NOCONST_|COLD_|COLD_CONST_|COLD_CONSTCONST_)?HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
|
"/^ZEND_VM_(HOT_|INLINE_|HOT_OBJ_|HOT_SEND_|HOT_NOCONST_|HOT_NOCONSTCONST_|COLD_|COLD_CONST_|COLD_CONSTCONST_)?HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
|
||||||
$line,
|
$line,
|
||||||
$m) == 0) {
|
$m) == 0) {
|
||||||
die("ERROR ($def:$lineno): Invalid ZEND_VM_HANDLER definition.\n");
|
die("ERROR ($def:$lineno): Invalid ZEND_VM_HANDLER definition.\n");
|
||||||
|
@ -2400,11 +2405,12 @@ function gen_vm($def, $skel) {
|
||||||
strpos($line,"ZEND_VM_INLINE_TYPE_SPEC_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_INLINE_TYPE_SPEC_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_TYPE_SPEC_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_TYPE_SPEC_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_NOCONST_TYPE_SPEC_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_NOCONST_TYPE_SPEC_HANDLER(") === 0 ||
|
||||||
|
strpos($line,"ZEND_VM_HOT_NOCONSTCONST_TYPE_SPEC_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_SEND_TYPE_SPEC_HANDLER(") === 0 ||
|
strpos($line,"ZEND_VM_HOT_SEND_TYPE_SPEC_HANDLER(") === 0 ||
|
||||||
strpos($line,"ZEND_VM_HOT_OBJ_TYPE_SPEC_HANDLER(") === 0) {
|
strpos($line,"ZEND_VM_HOT_OBJ_TYPE_SPEC_HANDLER(") === 0) {
|
||||||
// Parsing opcode handler's definition
|
// Parsing opcode handler's definition
|
||||||
if (preg_match(
|
if (preg_match(
|
||||||
"/^ZEND_VM_(HOT_|INLINE_|HOT_OBJ_|HOT_SEND_|HOT_NOCONST_)?TYPE_SPEC_HANDLER\(\s*([A-Z_]+)\s*,\s*((?:[^(,]|\([^()]*|(?R)*\))*),\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
|
"/^ZEND_VM_(HOT_|INLINE_|HOT_OBJ_|HOT_SEND_|HOT_NOCONST_|HOT_NOCONSTCONST_)?TYPE_SPEC_HANDLER\(\s*([A-Z_]+)\s*,\s*((?:[^(,]|\([^()]*|(?R)*\))*),\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
|
||||||
$line,
|
$line,
|
||||||
$m) == 0) {
|
$m) == 0) {
|
||||||
die("ERROR ($def:$lineno): Invalid ZEND_VM_TYPE_HANDLER_HANDLER definition.\n");
|
die("ERROR ($def:$lineno): Invalid ZEND_VM_TYPE_HANDLER_HANDLER definition.\n");
|
||||||
|
|
|
@ -1,48 +1,50 @@
|
||||||
#define VM_HANDLERS(_) \
|
#define VM_HANDLERS(_) \
|
||||||
_(0, ZEND_NOP_SPEC) \
|
_(0, ZEND_NOP_SPEC) \
|
||||||
_(1, ZEND_ADD_SPEC_CONST_CONST) \
|
_(1, ZEND_ADD_SPEC_CONST_CONST) \
|
||||||
_(2, ZEND_ADD_SPEC_CONST_TMPVAR) \
|
_(2, ZEND_ADD_SPEC_CONST_TMPVARCV) \
|
||||||
_(3, ZEND_ADD_SPEC_CONST_TMPVAR) \
|
_(3, ZEND_ADD_SPEC_CONST_TMPVARCV) \
|
||||||
_(5, ZEND_ADD_SPEC_CONST_CV) \
|
_(5, ZEND_ADD_SPEC_CONST_TMPVARCV) \
|
||||||
_(6, ZEND_ADD_SPEC_TMPVAR_CONST) \
|
_(6, ZEND_ADD_SPEC_TMPVARCV_CONST) \
|
||||||
_(7, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \
|
_(7, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(8, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \
|
_(8, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(10, ZEND_ADD_SPEC_TMPVAR_CV) \
|
_(10, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(11, ZEND_ADD_SPEC_TMPVAR_CONST) \
|
_(11, ZEND_ADD_SPEC_TMPVARCV_CONST) \
|
||||||
_(12, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \
|
_(12, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(13, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \
|
_(13, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(15, ZEND_ADD_SPEC_TMPVAR_CV) \
|
_(15, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(21, ZEND_ADD_SPEC_CV_CONST) \
|
_(21, ZEND_ADD_SPEC_TMPVARCV_CONST) \
|
||||||
_(22, ZEND_ADD_SPEC_CV_TMPVAR) \
|
_(22, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(23, ZEND_ADD_SPEC_CV_TMPVAR) \
|
_(23, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(25, ZEND_ADD_SPEC_CV_CV) \
|
_(25, ZEND_ADD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(26, ZEND_SUB_SPEC_CONST_CONST) \
|
_(26, ZEND_SUB_SPEC_CONST_CONST) \
|
||||||
_(27, ZEND_SUB_SPEC_CONST_TMPVAR) \
|
_(27, ZEND_SUB_SPEC_CONST_TMPVARCV) \
|
||||||
_(28, ZEND_SUB_SPEC_CONST_TMPVAR) \
|
_(28, ZEND_SUB_SPEC_CONST_TMPVARCV) \
|
||||||
_(30, ZEND_SUB_SPEC_CONST_CV) \
|
_(30, ZEND_SUB_SPEC_CONST_TMPVARCV) \
|
||||||
_(31, ZEND_SUB_SPEC_TMPVAR_CONST) \
|
_(31, ZEND_SUB_SPEC_TMPVARCV_CONST) \
|
||||||
_(32, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \
|
_(32, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(33, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \
|
_(33, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(35, ZEND_SUB_SPEC_TMPVAR_CV) \
|
_(35, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(36, ZEND_SUB_SPEC_TMPVAR_CONST) \
|
_(36, ZEND_SUB_SPEC_TMPVARCV_CONST) \
|
||||||
_(37, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \
|
_(37, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(38, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \
|
_(38, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(40, ZEND_SUB_SPEC_TMPVAR_CV) \
|
_(40, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(46, ZEND_SUB_SPEC_CV_CONST) \
|
_(46, ZEND_SUB_SPEC_TMPVARCV_CONST) \
|
||||||
_(47, ZEND_SUB_SPEC_CV_TMPVAR) \
|
_(47, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(48, ZEND_SUB_SPEC_CV_TMPVAR) \
|
_(48, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(50, ZEND_SUB_SPEC_CV_CV) \
|
_(50, ZEND_SUB_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(51, ZEND_MUL_SPEC_CONST_CONST) \
|
_(51, ZEND_MUL_SPEC_CONST_CONST) \
|
||||||
_(56, ZEND_MUL_SPEC_TMPVAR_CONST) \
|
_(56, ZEND_MUL_SPEC_TMPVARCV_CONST) \
|
||||||
_(57, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \
|
_(57, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(58, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \
|
_(58, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(61, ZEND_MUL_SPEC_TMPVAR_CONST) \
|
_(60, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(62, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \
|
_(61, ZEND_MUL_SPEC_TMPVARCV_CONST) \
|
||||||
_(63, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \
|
_(62, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(71, ZEND_MUL_SPEC_CV_CONST) \
|
_(63, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(72, ZEND_MUL_SPEC_CV_TMPVAR) \
|
_(65, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(73, ZEND_MUL_SPEC_CV_TMPVAR) \
|
_(71, ZEND_MUL_SPEC_TMPVARCV_CONST) \
|
||||||
_(75, ZEND_MUL_SPEC_CV_CV) \
|
_(72, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(73, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(75, ZEND_MUL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(76, ZEND_DIV_SPEC_CONST_CONST) \
|
_(76, ZEND_DIV_SPEC_CONST_CONST) \
|
||||||
_(77, ZEND_DIV_SPEC_CONST_TMPVAR) \
|
_(77, ZEND_DIV_SPEC_CONST_TMPVAR) \
|
||||||
_(78, ZEND_DIV_SPEC_CONST_TMPVAR) \
|
_(78, ZEND_DIV_SPEC_CONST_TMPVAR) \
|
||||||
|
@ -60,53 +62,53 @@
|
||||||
_(98, ZEND_DIV_SPEC_CV_TMPVAR) \
|
_(98, ZEND_DIV_SPEC_CV_TMPVAR) \
|
||||||
_(100, ZEND_DIV_SPEC_CV_CV) \
|
_(100, ZEND_DIV_SPEC_CV_CV) \
|
||||||
_(101, ZEND_MOD_SPEC_CONST_CONST) \
|
_(101, ZEND_MOD_SPEC_CONST_CONST) \
|
||||||
_(102, ZEND_MOD_SPEC_CONST_TMPVAR) \
|
_(102, ZEND_MOD_SPEC_CONST_TMPVARCV) \
|
||||||
_(103, ZEND_MOD_SPEC_CONST_TMPVAR) \
|
_(103, ZEND_MOD_SPEC_CONST_TMPVARCV) \
|
||||||
_(105, ZEND_MOD_SPEC_CONST_CV) \
|
_(105, ZEND_MOD_SPEC_CONST_TMPVARCV) \
|
||||||
_(106, ZEND_MOD_SPEC_TMPVAR_CONST) \
|
_(106, ZEND_MOD_SPEC_TMPVARCV_CONST) \
|
||||||
_(107, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \
|
_(107, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(108, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \
|
_(108, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(110, ZEND_MOD_SPEC_TMPVAR_CV) \
|
_(110, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(111, ZEND_MOD_SPEC_TMPVAR_CONST) \
|
_(111, ZEND_MOD_SPEC_TMPVARCV_CONST) \
|
||||||
_(112, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \
|
_(112, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(113, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \
|
_(113, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(115, ZEND_MOD_SPEC_TMPVAR_CV) \
|
_(115, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(121, ZEND_MOD_SPEC_CV_CONST) \
|
_(121, ZEND_MOD_SPEC_TMPVARCV_CONST) \
|
||||||
_(122, ZEND_MOD_SPEC_CV_TMPVAR) \
|
_(122, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(123, ZEND_MOD_SPEC_CV_TMPVAR) \
|
_(123, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(125, ZEND_MOD_SPEC_CV_CV) \
|
_(125, ZEND_MOD_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(126, ZEND_SL_SPEC_CONST_CONST) \
|
_(126, ZEND_SL_SPEC_CONST_CONST) \
|
||||||
_(127, ZEND_SL_SPEC_CONST_TMPVAR) \
|
_(127, ZEND_SL_SPEC_CONST_TMPVARCV) \
|
||||||
_(128, ZEND_SL_SPEC_CONST_TMPVAR) \
|
_(128, ZEND_SL_SPEC_CONST_TMPVARCV) \
|
||||||
_(130, ZEND_SL_SPEC_CONST_CV) \
|
_(130, ZEND_SL_SPEC_CONST_TMPVARCV) \
|
||||||
_(131, ZEND_SL_SPEC_TMPVAR_CONST) \
|
_(131, ZEND_SL_SPEC_TMPVARCV_CONST) \
|
||||||
_(132, ZEND_SL_SPEC_TMPVAR_TMPVAR) \
|
_(132, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(133, ZEND_SL_SPEC_TMPVAR_TMPVAR) \
|
_(133, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(135, ZEND_SL_SPEC_TMPVAR_CV) \
|
_(135, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(136, ZEND_SL_SPEC_TMPVAR_CONST) \
|
_(136, ZEND_SL_SPEC_TMPVARCV_CONST) \
|
||||||
_(137, ZEND_SL_SPEC_TMPVAR_TMPVAR) \
|
_(137, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(138, ZEND_SL_SPEC_TMPVAR_TMPVAR) \
|
_(138, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(140, ZEND_SL_SPEC_TMPVAR_CV) \
|
_(140, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(146, ZEND_SL_SPEC_CV_CONST) \
|
_(146, ZEND_SL_SPEC_TMPVARCV_CONST) \
|
||||||
_(147, ZEND_SL_SPEC_CV_TMPVAR) \
|
_(147, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(148, ZEND_SL_SPEC_CV_TMPVAR) \
|
_(148, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(150, ZEND_SL_SPEC_CV_CV) \
|
_(150, ZEND_SL_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(151, ZEND_SR_SPEC_CONST_CONST) \
|
_(151, ZEND_SR_SPEC_CONST_CONST) \
|
||||||
_(152, ZEND_SR_SPEC_CONST_TMPVAR) \
|
_(152, ZEND_SR_SPEC_CONST_TMPVARCV) \
|
||||||
_(153, ZEND_SR_SPEC_CONST_TMPVAR) \
|
_(153, ZEND_SR_SPEC_CONST_TMPVARCV) \
|
||||||
_(155, ZEND_SR_SPEC_CONST_CV) \
|
_(155, ZEND_SR_SPEC_CONST_TMPVARCV) \
|
||||||
_(156, ZEND_SR_SPEC_TMPVAR_CONST) \
|
_(156, ZEND_SR_SPEC_TMPVARCV_CONST) \
|
||||||
_(157, ZEND_SR_SPEC_TMPVAR_TMPVAR) \
|
_(157, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(158, ZEND_SR_SPEC_TMPVAR_TMPVAR) \
|
_(158, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(160, ZEND_SR_SPEC_TMPVAR_CV) \
|
_(160, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(161, ZEND_SR_SPEC_TMPVAR_CONST) \
|
_(161, ZEND_SR_SPEC_TMPVARCV_CONST) \
|
||||||
_(162, ZEND_SR_SPEC_TMPVAR_TMPVAR) \
|
_(162, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(163, ZEND_SR_SPEC_TMPVAR_TMPVAR) \
|
_(163, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(165, ZEND_SR_SPEC_TMPVAR_CV) \
|
_(165, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(171, ZEND_SR_SPEC_CV_CONST) \
|
_(171, ZEND_SR_SPEC_TMPVARCV_CONST) \
|
||||||
_(172, ZEND_SR_SPEC_CV_TMPVAR) \
|
_(172, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(173, ZEND_SR_SPEC_CV_TMPVAR) \
|
_(173, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(175, ZEND_SR_SPEC_CV_CV) \
|
_(175, ZEND_SR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(177, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
|
_(177, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
|
||||||
_(178, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
|
_(178, ZEND_CONCAT_SPEC_CONST_TMPVAR) \
|
||||||
_(180, ZEND_CONCAT_SPEC_CONST_CV) \
|
_(180, ZEND_CONCAT_SPEC_CONST_CV) \
|
||||||
|
@ -123,38 +125,44 @@
|
||||||
_(198, ZEND_CONCAT_SPEC_CV_TMPVAR) \
|
_(198, ZEND_CONCAT_SPEC_CV_TMPVAR) \
|
||||||
_(200, ZEND_CONCAT_SPEC_CV_CV) \
|
_(200, ZEND_CONCAT_SPEC_CV_CV) \
|
||||||
_(201, ZEND_BW_OR_SPEC_CONST_CONST) \
|
_(201, ZEND_BW_OR_SPEC_CONST_CONST) \
|
||||||
_(206, ZEND_BW_OR_SPEC_TMPVAR_CONST) \
|
_(206, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
|
||||||
_(207, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \
|
_(207, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(208, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \
|
_(208, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(211, ZEND_BW_OR_SPEC_TMPVAR_CONST) \
|
_(210, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(212, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \
|
_(211, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
|
||||||
_(213, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \
|
_(212, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(221, ZEND_BW_OR_SPEC_CV_CONST) \
|
_(213, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(222, ZEND_BW_OR_SPEC_CV_TMPVAR) \
|
_(215, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(223, ZEND_BW_OR_SPEC_CV_TMPVAR) \
|
_(221, ZEND_BW_OR_SPEC_TMPVARCV_CONST) \
|
||||||
_(225, ZEND_BW_OR_SPEC_CV_CV) \
|
_(222, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(223, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(225, ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(226, ZEND_BW_AND_SPEC_CONST_CONST) \
|
_(226, ZEND_BW_AND_SPEC_CONST_CONST) \
|
||||||
_(231, ZEND_BW_AND_SPEC_TMPVAR_CONST) \
|
_(231, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
|
||||||
_(232, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \
|
_(232, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(233, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \
|
_(233, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(236, ZEND_BW_AND_SPEC_TMPVAR_CONST) \
|
_(235, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(237, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \
|
_(236, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
|
||||||
_(238, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \
|
_(237, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(246, ZEND_BW_AND_SPEC_CV_CONST) \
|
_(238, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(247, ZEND_BW_AND_SPEC_CV_TMPVAR) \
|
_(240, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(248, ZEND_BW_AND_SPEC_CV_TMPVAR) \
|
_(246, ZEND_BW_AND_SPEC_TMPVARCV_CONST) \
|
||||||
_(250, ZEND_BW_AND_SPEC_CV_CV) \
|
_(247, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(248, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(250, ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(251, ZEND_BW_XOR_SPEC_CONST_CONST) \
|
_(251, ZEND_BW_XOR_SPEC_CONST_CONST) \
|
||||||
_(256, ZEND_BW_XOR_SPEC_TMPVAR_CONST) \
|
_(256, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
|
||||||
_(257, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \
|
_(257, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(258, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \
|
_(258, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(261, ZEND_BW_XOR_SPEC_TMPVAR_CONST) \
|
_(260, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(262, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \
|
_(261, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
|
||||||
_(263, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \
|
_(262, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(271, ZEND_BW_XOR_SPEC_CV_CONST) \
|
_(263, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(272, ZEND_BW_XOR_SPEC_CV_TMPVAR) \
|
_(265, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(273, ZEND_BW_XOR_SPEC_CV_TMPVAR) \
|
_(271, ZEND_BW_XOR_SPEC_TMPVARCV_CONST) \
|
||||||
_(275, ZEND_BW_XOR_SPEC_CV_CV) \
|
_(272, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(273, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
|
_(275, ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV) \
|
||||||
_(276, ZEND_POW_SPEC_CONST_CONST) \
|
_(276, ZEND_POW_SPEC_CONST_CONST) \
|
||||||
_(277, ZEND_POW_SPEC_CONST_TMPVAR) \
|
_(277, ZEND_POW_SPEC_CONST_TMPVAR) \
|
||||||
_(278, ZEND_POW_SPEC_CONST_TMPVAR) \
|
_(278, ZEND_POW_SPEC_CONST_TMPVAR) \
|
||||||
|
|
|
@ -222,17 +222,17 @@ static const char *zend_vm_opcodes_names[195] = {
|
||||||
|
|
||||||
static uint32_t zend_vm_opcodes_flags[195] = {
|
static uint32_t zend_vm_opcodes_flags[195] = {
|
||||||
0x00000000,
|
0x00000000,
|
||||||
|
0x00000b0b,
|
||||||
|
0x00000b0b,
|
||||||
|
0x80000b0b,
|
||||||
0x00000707,
|
0x00000707,
|
||||||
0x00000707,
|
0x00000b0b,
|
||||||
0x80000707,
|
0x00000b0b,
|
||||||
0x00000707,
|
0x00000b0b,
|
||||||
0x00000707,
|
|
||||||
0x00000707,
|
|
||||||
0x00000707,
|
|
||||||
0x40000707,
|
0x40000707,
|
||||||
0x80000707,
|
0x80000b0b,
|
||||||
0x80000707,
|
0x80000b0b,
|
||||||
0x80000707,
|
0x80000b0b,
|
||||||
0x00000707,
|
0x00000707,
|
||||||
0x00000007,
|
0x00000007,
|
||||||
0x00000007,
|
0x00000007,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue