@@ -13949,6 +13949,15 @@ static int zend_jit_ffi_assign_dim(zend_jit_ctx *jit,
13949
13949
return 0;
13950
13950
}
13951
13951
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
+
13952
13961
if (!zend_jit_ffi_abc(jit, opline, op1_ffi_type, op2_info, op2_addr, op2_range)) {
13953
13962
return 0;
13954
13963
}
@@ -15455,6 +15464,15 @@ static int zend_jit_ffi_assign_obj(zend_jit_ctx *jit,
15455
15464
return 0;
15456
15465
}
15457
15466
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
+
15458
15476
ir_ref cdata_ref = ir_LOAD_A(ir_ADD_OFFSET(obj_ref, offsetof(zend_ffi_cdata, ptr)));
15459
15477
ir_ref ptr = ir_ADD_A(cdata_ref, ir_CONST_LONG(field->offset));
15460
15478
@@ -15496,6 +15514,15 @@ static int zend_jit_ffi_assign_sym(zend_jit_ctx *jit,
15496
15514
return 0;
15497
15515
}
15498
15516
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
+
15499
15526
ir_ref ptr = ir_CONST_ADDR(sym->addr);
15500
15527
if (!zend_jit_ffi_write(jit, sym_type, ptr, val_info, val_addr, val_ffi_type)) {
15501
15528
return 0;
0 commit comments