diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-09-05 22:11:10 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-09-05 22:11:10 +0300 |
commit | 1d36c3361fcad50d17d660d13fdcfebfde478dad (patch) | |
tree | 37f5850c0979ba9be6cd9d503d94ed23fc5d7425 /Zend/zend_vm_execute.h | |
parent | 21cd552e1e6685048ed159091274a8311b84d4c8 (diff) | |
download | php-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.h | 12 |
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; } |