Skip to content

Commit 22982ee

Browse files
committed
Load zval type into register to eliminate double load
1 parent bcadf9d commit 22982ee

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10672,13 +10672,24 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons
1067210672
if (op1_info & MAY_BE_ARRAY_OF_REF) {
1067310673
| ZVAL_DEREF r0, MAY_BE_REF
1067410674
}
10675-
| IF_NOT_ZVAL_TYPE val_addr, type, &res_exit_addr
10676-
| // ZVAL_COPY
10677-
| ZVAL_COPY_VALUE res_addr, -1, val_addr, res_info, ZREG_R1, ZREG_R2
10678-
if (!(res_info & AVOID_REFCOUNTING)) {
10679-
| TRY_ADDREF res_info, ch, r2
10675+
if (type < IS_STRING) {
10676+
| IF_NOT_ZVAL_TYPE val_addr, type, &res_exit_addr
10677+
} else {
10678+
| GET_ZVAL_TYPE_INFO edx, val_addr
10679+
| IF_NOT_TYPE dl, type, &res_exit_addr
1068010680
}
10681-
if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) {
10681+
| // ZVAL_COPY
10682+
| ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1
10683+
if (Z_MODE(res_addr) == IS_MEM_ZVAL) {
10684+
if (type < IS_STRING) {
10685+
| SET_ZVAL_TYPE_INFO res_addr, type
10686+
} else {
10687+
| SET_ZVAL_TYPE_INFO res_addr, edx
10688+
if (!(res_info & AVOID_REFCOUNTING)) {
10689+
| TRY_ADDREF res_info, dh, r1
10690+
}
10691+
}
10692+
} else if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) {
1068210693
return 0;
1068310694
}
1068410695
} else if (op1_info & MAY_BE_ARRAY_OF_REF) {
@@ -11511,7 +11522,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen
1151111522
| IF_NOT_TYPE dl, type, &exit_addr
1151211523
}
1151311524
| // ZVAL_COPY
11514-
| ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R2, ZREG_R1
11525+
| ZVAL_COPY_VALUE_V res_addr, -1, val_addr, res_info, ZREG_R0, ZREG_R1
1151511526
if (type < IS_STRING) {
1151611527
| SET_ZVAL_TYPE_INFO res_addr, type
1151711528
} else {

0 commit comments

Comments
 (0)