summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_vm_execute.h4
-rwxr-xr-xZend/zend_vm_gen.php13
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) {