Skip to content

Commit 7cbe31e

Browse files
committed
Remove unnecessary FREE_OP1(), reduce specialization
1 parent 44cbf31 commit 7cbe31e

File tree

4 files changed

+48
-87
lines changed

4 files changed

+48
-87
lines changed

Zend/zend_vm_def.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7045,7 +7045,7 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
70457045
ZEND_VM_NEXT_OPCODE();
70467046
}
70477047

7048-
ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVAR|CV, JMP_ADDR)
7048+
ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVARCV, JMP_ADDR)
70497049
{
70507050
USE_OPLINE
70517051
zval *val;
@@ -7074,7 +7074,6 @@ ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMPVAR|CV, JMP_ADDR)
70747074
ZVAL_TRUE(result);
70757075
}
70767076

7077-
FREE_OP1();
70787077
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
70797078
}
70807079
}

Zend/zend_vm_execute.h

Lines changed: 43 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -10832,6 +10832,39 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR
1083210832
ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
1083310833
}
1083410834

10835+
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10836+
{
10837+
USE_OPLINE
10838+
zval *val;
10839+
10840+
val = EX_VAR(opline->op1.var);
10841+
10842+
if (Z_TYPE_INFO_P(val) > IS_NULL) {
10843+
ZEND_VM_NEXT_OPCODE();
10844+
} else {
10845+
zval *result = EX_VAR(opline->result.var);
10846+
10847+
if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
10848+
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
10849+
SAVE_OPLINE();
10850+
ZVAL_UNDEFINED_OP1();
10851+
if (UNEXPECTED(EG(exception) != NULL)) {
10852+
HANDLE_EXCEPTION();
10853+
}
10854+
}
10855+
10856+
ZVAL_NULL(result);
10857+
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
10858+
ZVAL_FALSE(result);
10859+
} else {
10860+
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
10861+
ZVAL_TRUE(result);
10862+
}
10863+
10864+
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
10865+
}
10866+
}
10867+
1083510868
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1083610869
{
1083710870
USE_OPLINE
@@ -13293,40 +13326,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
1329313326
ZEND_VM_NEXT_OPCODE();
1329413327
}
1329513328

13296-
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13297-
{
13298-
USE_OPLINE
13299-
zval *val;
13300-
13301-
val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
13302-
13303-
if (Z_TYPE_INFO_P(val) > IS_NULL) {
13304-
ZEND_VM_NEXT_OPCODE();
13305-
} else {
13306-
zval *result = EX_VAR(opline->result.var);
13307-
13308-
if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
13309-
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13310-
SAVE_OPLINE();
13311-
ZVAL_UNDEFINED_OP1();
13312-
if (UNEXPECTED(EG(exception) != NULL)) {
13313-
HANDLE_EXCEPTION();
13314-
}
13315-
}
13316-
13317-
ZVAL_NULL(result);
13318-
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
13319-
ZVAL_FALSE(result);
13320-
} else {
13321-
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
13322-
ZVAL_TRUE(result);
13323-
}
13324-
13325-
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13326-
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13327-
}
13328-
}
13329-
1333013329
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1333113330
{
1333213331
USE_OPLINE
@@ -36779,39 +36778,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
3677936778
ZEND_VM_NEXT_OPCODE();
3678036779
}
3678136780

36782-
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36783-
{
36784-
USE_OPLINE
36785-
zval *val;
36786-
36787-
val = EX_VAR(opline->op1.var);
36788-
36789-
if (Z_TYPE_INFO_P(val) > IS_NULL) {
36790-
ZEND_VM_NEXT_OPCODE();
36791-
} else {
36792-
zval *result = EX_VAR(opline->result.var);
36793-
36794-
if (EXPECTED(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
36795-
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36796-
SAVE_OPLINE();
36797-
ZVAL_UNDEFINED_OP1();
36798-
if (UNEXPECTED(EG(exception) != NULL)) {
36799-
HANDLE_EXCEPTION();
36800-
}
36801-
}
36802-
36803-
ZVAL_NULL(result);
36804-
} else if (opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
36805-
ZVAL_FALSE(result);
36806-
} else {
36807-
ZEND_ASSERT(opline->extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
36808-
ZVAL_TRUE(result);
36809-
}
36810-
36811-
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36812-
}
36813-
}
36814-
3681536781
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3681636782
{
3681736783
USE_OPLINE
@@ -51231,10 +51197,10 @@ ZEND_API void execute_ex(zend_execute_data *ex)
5123151197
(void*)&&ZEND_NULL_LABEL,
5123251198
(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
5123351199
(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
51234-
(void*)&&ZEND_JMP_NULL_SPEC_TMPVAR_LABEL,
51235-
(void*)&&ZEND_JMP_NULL_SPEC_TMPVAR_LABEL,
51200+
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
51201+
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
5123651202
(void*)&&ZEND_NULL_LABEL,
51237-
(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
51203+
(void*)&&ZEND_JMP_NULL_SPEC_TMPVARCV_LABEL,
5123851204
(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
5123951205
(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
5124051206
(void*)&&ZEND_NULL_LABEL,
@@ -53263,6 +53229,10 @@ ZEND_API void execute_ex(zend_execute_data *ex)
5326353229
VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
5326453230
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
5326553231
HYBRID_BREAK();
53232+
HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMPVARCV):
53233+
VM_TRACE(ZEND_JMP_NULL_SPEC_TMPVARCV)
53234+
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53235+
HYBRID_BREAK();
5326653236
HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
5326753237
VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
5326853238
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53743,10 +53713,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
5374353713
VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
5374453714
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
5374553715
HYBRID_BREAK();
53746-
HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMPVAR):
53747-
VM_TRACE(ZEND_JMP_NULL_SPEC_TMPVAR)
53748-
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53749-
HYBRID_BREAK();
5375053716
HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
5375153717
VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
5375253718
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -55562,10 +55528,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
5556255528
VM_TRACE(ZEND_COALESCE_SPEC_CV)
5556355529
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
5556455530
HYBRID_BREAK();
55565-
HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
55566-
VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
55567-
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55568-
HYBRID_BREAK();
5556955531
HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
5557055532
VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
5557155533
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -58875,10 +58837,10 @@ void zend_vm_init(void)
5887558837
ZEND_NULL_HANDLER,
5887658838
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
5887758839
ZEND_JMP_NULL_SPEC_CONST_HANDLER,
58878-
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER,
58879-
ZEND_JMP_NULL_SPEC_TMPVAR_HANDLER,
58840+
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
58841+
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
5888058842
ZEND_NULL_HANDLER,
58881-
ZEND_JMP_NULL_SPEC_CV_HANDLER,
58843+
ZEND_JMP_NULL_SPEC_TMPVARCV_HANDLER,
5888258844
ZEND_RECV_NOTYPE_SPEC_HANDLER,
5888358845
ZEND_JMP_FORWARD_SPEC_HANDLER,
5888458846
ZEND_NULL_HANDLER,

Zend/zend_vm_handlers.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,9 +1304,9 @@
13041304
_(2347, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
13051305
_(2349, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
13061306
_(2350, ZEND_JMP_NULL_SPEC_CONST) \
1307-
_(2351, ZEND_JMP_NULL_SPEC_TMPVAR) \
1308-
_(2352, ZEND_JMP_NULL_SPEC_TMPVAR) \
1309-
_(2354, ZEND_JMP_NULL_SPEC_CV) \
1307+
_(2351, ZEND_JMP_NULL_SPEC_TMPVARCV) \
1308+
_(2352, ZEND_JMP_NULL_SPEC_TMPVARCV) \
1309+
_(2354, ZEND_JMP_NULL_SPEC_TMPVARCV) \
13101310
_(2355, ZEND_RECV_NOTYPE_SPEC) \
13111311
_(2356, ZEND_JMP_FORWARD_SPEC) \
13121312
_(2362, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \

Zend/zend_vm_opcodes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ static uint32_t zend_vm_opcodes_flags[199] = {
423423
0x0300030b,
424424
0x00000301,
425425
0x0000010b,
426-
0x00002007,
426+
0x0000200b,
427427
};
428428

429429
ZEND_API const char* ZEND_FASTCALL zend_get_opcode_name(zend_uchar opcode) {

0 commit comments

Comments
 (0)