Skip to content

Commit

Permalink
Remove unnecessary FREE_OP1(), reduce specialization
Browse files Browse the repository at this point in the history
  • Loading branch information
nikic committed Jul 22, 2020
1 parent 44cbf31 commit 7cbe31e
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 87 deletions.
3 changes: 1 addition & 2 deletions Zend/zend_vm_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -7045,7 +7045,7 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
ZEND_VM_NEXT_OPCODE();
}

ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVAR|CV, JMP_ADDR)
ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVARCV, JMP_ADDR)
{
USE_OPLINE
zval *val;
Expand Down Expand Up @@ -7074,7 +7074,6 @@ ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVAR|CV, JMP_ADDR)
ZVAL_TRUE(result);
}

FREE_OP1();
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}
}
Expand Down
124 changes: 43 additions & 81 deletions Zend/zend_vm_execute.h
Original file line number Diff line number Diff line change
Expand Up @@ -10832,6 +10832,39 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR
ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;

val = EX_VAR(opline->op1.var);

if (Z_TYPE_INFO_P(val) > IS_NULL) {
ZEND_VM_NEXT_OPCODE();
} else {
zval *result = EX_VAR(opline->result.var);

if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
}

ZVAL_NULL(result);
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}

ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
Expand Down Expand Up @@ -13293,40 +13326,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;

val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);

if (Z_TYPE_INFO_P(val) > IS_NULL) {
ZEND_VM_NEXT_OPCODE();
} else {
zval *result = EX_VAR(opline->result.var);

if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
}

ZVAL_NULL(result);
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}

zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}
}

static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
Expand Down Expand Up @@ -36779,39 +36778,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
ZEND_VM_NEXT_OPCODE();
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;

val = EX_VAR(opline->op1.var);

if (Z_TYPE_INFO_P(val) > IS_NULL) {
ZEND_VM_NEXT_OPCODE();
} else {
zval *result = EX_VAR(opline->result.var);

if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
}

ZVAL_NULL(result);
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
ZVAL_FALSE(result);
} else {
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
ZVAL_TRUE(result);
}

ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
}
}

static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
Expand Down Expand Up @@ -51231,10 +51197,10 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_TMPVAR_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_TMPVAR_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
(void*)&&ZEND_NULL_LABEL,
Expand Down Expand Up @@ -53263,6 +53229,10 @@ ZEND_API void execute_ex(zend_execute_data *ex)
VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMPVARCV):
VM_TRACE(ZEND_JMP_NULL_SPEC_TMPVARCV)
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
Expand Down Expand Up @@ -53743,10 +53713,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMPVAR):
VM_TRACE(ZEND_JMP_NULL_SPEC_TMPVAR)
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
Expand Down Expand Up @@ -55562,10 +55528,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
VM_TRACE(ZEND_COALESCE_SPEC_CV)
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
Expand Down Expand Up @@ -58875,10 +58837,10 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
ZEND_JMP_NULL_SPEC_CONST_HANDLER,
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER,
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER,
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_JMP_NULL_SPEC_CV_HANDLER,
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
ZEND_RECV_NOTYPE_SPEC_HANDLER,
ZEND_JMP_FORWARD_SPEC_HANDLER,
ZEND_NULL_HANDLER,
Expand Down
6 changes: 3 additions & 3 deletions Zend/zend_vm_handlers.h
Original file line number Diff line number Diff line change
Expand Up @@ -1304,9 +1304,9 @@
_(2347, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
_(2349, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
_(2350, ZEND_JMP_NULL_SPEC_CONST) \
_(2351, ZEND_JMP_NULL_SPEC_TMPVAR) \
_(2352, ZEND_JMP_NULL_SPEC_TMPVAR) \
_(2354, ZEND_JMP_NULL_SPEC_CV) \
_(2351, ZEND_JMP_NULL_SPEC_TMPVARCV) \
_(2352, ZEND_JMP_NULL_SPEC_TMPVARCV) \
_(2354, ZEND_JMP_NULL_SPEC_TMPVARCV) \
_(2355, ZEND_RECV_NOTYPE_SPEC) \
_(2356, ZEND_JMP_FORWARD_SPEC) \
_(2362, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
Expand Down
2 changes: 1 addition & 1 deletion Zend/zend_vm_opcodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ static uint32_t zend_vm_opcodes_flags[199] = {
0x0300030b,
0x00000301,
0x0000010b,
0x00002007,
0x0000200b,
};

ZEND_API const char* ZEND_FASTCALL zend_get_opcode_name(zend_uchar opcode) {
Expand Down

0 comments on commit 7cbe31e

Please sign in to comment.