mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Replacel constant JMPZ/NZ/ZNZ by JMP or NOP
This commit is contained in:
parent
3253e61b66
commit
502002aa6e
1 changed files with 34 additions and 0 deletions
|
@ -256,7 +256,41 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array,
|
||||||
zend_op *opline,
|
zend_op *opline,
|
||||||
zval *val)
|
zval *val)
|
||||||
{
|
{
|
||||||
|
zend_op *target_opline;
|
||||||
|
|
||||||
switch (opline->opcode) {
|
switch (opline->opcode) {
|
||||||
|
case ZEND_JMPZ:
|
||||||
|
if (zend_is_true(val)) {
|
||||||
|
MAKE_NOP(opline);
|
||||||
|
} else {
|
||||||
|
opline->opcode = ZEND_JMP;
|
||||||
|
COPY_NODE(opline->op1, opline->op2);
|
||||||
|
opline->op2_type = IS_UNUSED;
|
||||||
|
}
|
||||||
|
zval_ptr_dtor_nogc(val);
|
||||||
|
return 1;
|
||||||
|
case ZEND_JMPNZ:
|
||||||
|
if (zend_is_true(val)) {
|
||||||
|
opline->opcode = ZEND_JMP;
|
||||||
|
COPY_NODE(opline->op1, opline->op2);
|
||||||
|
opline->op2_type = IS_UNUSED;
|
||||||
|
} else {
|
||||||
|
MAKE_NOP(opline);
|
||||||
|
}
|
||||||
|
zval_ptr_dtor_nogc(val);
|
||||||
|
return 1;
|
||||||
|
case ZEND_JMPZNZ:
|
||||||
|
if (zend_is_true(val)) {
|
||||||
|
target_opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
|
||||||
|
} else {
|
||||||
|
target_opline = ZEND_OP2_JMP_ADDR(opline);
|
||||||
|
}
|
||||||
|
ZEND_SET_OP_JMP_ADDR(opline, opline->op1, target_opline);
|
||||||
|
opline->op1_type = IS_UNUSED;
|
||||||
|
opline->extended_value = 0;
|
||||||
|
opline->opcode = ZEND_JMP;
|
||||||
|
zval_ptr_dtor_nogc(val);
|
||||||
|
return 1;
|
||||||
case ZEND_FREE:
|
case ZEND_FREE:
|
||||||
MAKE_NOP(opline);
|
MAKE_NOP(opline);
|
||||||
zval_ptr_dtor_nogc(val);
|
zval_ptr_dtor_nogc(val);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue