summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-09-05 22:11:10 +0300
committerDmitry Stogov <dmitry@zend.com>2018-09-05 22:11:10 +0300
commit1d36c3361fcad50d17d660d13fdcfebfde478dad (patch)
tree37f5850c0979ba9be6cd9d503d94ed23fc5d7425 /Zend/zend_vm_execute.h
parent21cd552e1e6685048ed159091274a8311b84d4c8 (diff)
downloadphp-git-1d36c3361fcad50d17d660d13fdcfebfde478dad.tar.gz
Fixed support for commutative "user opcodes"
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 35ab7dda5c..c5e3cdd2e6 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -65142,14 +65142,13 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend
ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
{
zend_uchar opcode = zend_user_opcodes[op->opcode];
- uint32_t spec = zend_spec_handlers[opcode];
- if (spec & SPEC_RULE_COMMUTATIVE) {
+ if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
}
- op->handler = zend_vm_get_opcode_handler_ex(spec, op);
+ op->handler = zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
}
ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint32_t op2_info, uint32_t res_info)
@@ -65372,6 +65371,13 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
zend_swap_operands(op);
}
break;
+ case ZEND_USER_OPCODE:
+ if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
+ if (op->op1_type < op->op2_type) {
+ zend_swap_operands(op);
+ }
+ }
+ break;
default:
break;
}