Skip to content

Commit fe1052b

Browse files
committed
Better instruction selection
1 parent e2be500 commit fe1052b

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,12 +1411,15 @@ static void* dasm_labels[zend_lb_MAX];
14111411

14121412
|.macro SEPARATE_ARRAY, addr, op_info, cold
14131413
|| if (RC_MAY_BE_N(op_info)) {
1414-
|| if (Z_REG(addr) == ZREG_FCARG1a) {
1414+
|| if (Z_REG(addr) != ZREG_FP) {
14151415
| GET_ZVAL_LVAL ZREG_R0, addr
14161416
|| if (RC_MAY_BE_1(op_info)) {
14171417
| cmp dword [r0], 1 // if (GC_REFCOUNT() > 1)
14181418
| jbe >2
14191419
|| }
1420+
|| if (Z_REG(addr) != ZREG_FCARG1a || Z_OFFSET(addr) != 0) {
1421+
| LOAD_ZVAL_ADDR FCARG1a, addr
1422+
|| }
14201423
| EXT_CALL zend_jit_zval_array_dup, r0
14211424
|2:
14221425
| mov FCARG1a, r0
@@ -11589,16 +11592,15 @@ static zend_bool zend_jit_fetch_reference(dasm_State **Dst, const zend_op *oplin
1158911592

1159011593
| IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, &exit_addr
1159111594
| GET_ZVAL_PTR FCARG1a, var_addr
11592-
| add FCARG1a, offsetof(zend_reference, val)
1159311595

11594-
var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
11596+
var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, offsetof(zend_reference, val));
1159511597
*var_addr_ptr = var_addr;
1159611598

1159711599
var_type &= ~(IS_TRACE_REFERENCE|IS_TRACE_INDIRECT);
1159811600
if (add_type_guard
1159911601
&& var_type != IS_UNKNOWN
1160011602
&& (var_info & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << var_type)) {
11601-
| IF_NOT_Z_TYPE FCARG1a, var_type, &exit_addr
11603+
| IF_NOT_ZVAL_TYPE var_addr, var_type, &exit_addr
1160211604

1160311605
ZEND_ASSERT(var_info & (1 << var_type));
1160411606
if (var_type < IS_STRING) {

0 commit comments

Comments
 (0)