diff options
| -rw-r--r-- | Zend/zend_vm_execute.h | 4 | ||||
| -rwxr-xr-x | Zend/zend_vm_gen.php | 13 |
2 files changed, 13 insertions, 4 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 5da5452b69..fec62d8dc0 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -59194,6 +59194,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t } break; case ZEND_IS_EQUAL: + case ZEND_IS_IDENTICAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } @@ -59210,6 +59211,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t } break; case ZEND_IS_NOT_EQUAL: + case ZEND_IS_NOT_IDENTICAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } @@ -59330,8 +59332,6 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t case ZEND_BW_AND: case ZEND_BW_XOR: case ZEND_BOOL_XOR: - case ZEND_IS_IDENTICAL: - case ZEND_IS_NOT_IDENTICAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index d263f542c5..47975b3940 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -2818,6 +2818,13 @@ function gen_vm($def, $skel) { if (isset($dsc['type_spec'])) { $orig_op = $dsc['op']; out($f, "\t\tcase $orig_op:\n"); + // XXX: Copy the specializations for LONG == LONG and DOUBLE != DOUBLE to work for ===/!== as well. + // (Those are currently the only specializations) + if ($orig_op === 'ZEND_IS_EQUAL') { + out($f, "\t\tcase ZEND_IS_IDENTICAL:\n"); + } elseif ($orig_op === 'ZEND_IS_NOT_EQUAL') { + out($f, "\t\tcase ZEND_IS_NOT_IDENTICAL:\n"); + } if (isset($dsc["spec"]["COMMUTATIVE"])) { out($f, "\t\t\tif (op->op1_type < op->op2_type) {\n"); out($f, "\t\t\t\tzend_swap_operands(op);\n"); @@ -2857,8 +2864,10 @@ function gen_vm($def, $skel) { !isset($dsc['type_spec']) && isset($dsc["spec"]["COMMUTATIVE"])) { $orig_op = $dsc['op']; - out($f, "\t\tcase $orig_op:\n"); - $has_commutative = true; + if (!in_array($orig_op, ['ZEND_IS_IDENTICAL', 'ZEND_IS_NOT_IDENTICAL'])) { + out($f, "\t\tcase $orig_op:\n"); + $has_commutative = true; + } } } if ($has_commutative) { |
