Skip to content

Commit bf4bf54

Browse files
committed
Fix registers update
1 parent 1c2f72e commit bf4bf54

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

ext/opcache/jit/zend_jit_ir.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13949,6 +13949,15 @@ static int zend_jit_ffi_assign_dim(zend_jit_ctx *jit,
1394913949
return 0;
1395013950
}
1395113951

13952+
if (val_addr != val_def_addr && val_def_addr) {
13953+
if (!zend_jit_update_regs(jit, (opline+1)->op1.var, val_addr, val_def_addr, val_info)) {
13954+
return 0;
13955+
}
13956+
if (Z_MODE(val_def_addr) == IS_REG && Z_MODE(val_addr) != IS_REG) {
13957+
val_addr = val_def_addr;
13958+
}
13959+
}
13960+
1395213961
if (!zend_jit_ffi_abc(jit, opline, op1_ffi_type, op2_info, op2_addr, op2_range)) {
1395313962
return 0;
1395413963
}
@@ -15455,6 +15464,15 @@ static int zend_jit_ffi_assign_obj(zend_jit_ctx *jit,
1545515464
return 0;
1545615465
}
1545715466

15467+
if (val_addr != val_def_addr && val_def_addr) {
15468+
if (!zend_jit_update_regs(jit, (opline+1)->op1.var, val_addr, val_def_addr, val_info)) {
15469+
return 0;
15470+
}
15471+
if (Z_MODE(val_def_addr) == IS_REG && Z_MODE(val_addr) != IS_REG) {
15472+
val_addr = val_def_addr;
15473+
}
15474+
}
15475+
1545815476
ir_ref cdata_ref = ir_LOAD_A(ir_ADD_OFFSET(obj_ref, offsetof(zend_ffi_cdata, ptr)));
1545915477
ir_ref ptr = ir_ADD_A(cdata_ref, ir_CONST_LONG(field->offset));
1546015478

@@ -15496,6 +15514,15 @@ static int zend_jit_ffi_assign_sym(zend_jit_ctx *jit,
1549615514
return 0;
1549715515
}
1549815516

15517+
if (val_addr != val_def_addr && val_def_addr) {
15518+
if (!zend_jit_update_regs(jit, (opline+1)->op1.var, val_addr, val_def_addr, val_info)) {
15519+
return 0;
15520+
}
15521+
if (Z_MODE(val_def_addr) == IS_REG && Z_MODE(val_addr) != IS_REG) {
15522+
val_addr = val_def_addr;
15523+
}
15524+
}
15525+
1549915526
ir_ref ptr = ir_CONST_ADDR(sym->addr);
1550015527
if (!zend_jit_ffi_write(jit, sym_type, ptr, val_info, val_addr, val_ffi_type)) {
1550115528
return 0;

0 commit comments

Comments
 (0)