@@ -1252,8 +1252,8 @@ static void* dasm_labels[zend_lb_MAX];
1252
1252
| sub dword [zv], 1
1253
1253
|.endmacro
1254
1254
1255
- |.macro IF_GC_MAY_NOT_LEAK, ptr, tmp_reg, label
1256
- | test dword [ptr + 4],(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
1255
+ |.macro IF_GC_MAY_NOT_LEAK, ptr, label
1256
+ | test dword [ptr+ 4],(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT))
1257
1257
| jne label
1258
1258
|.endmacro
1259
1259
@@ -1391,7 +1391,7 @@ static void* dasm_labels[zend_lb_MAX];
1391
1391
| GET_ZVAL_PTR FCARG1a, ref_addr
1392
1392
|1:
1393
1393
|| }
1394
- | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >4
1394
+ | IF_GC_MAY_NOT_LEAK FCARG1a, >4
1395
1395
| // gc_possible_root(Z_COUNTED_P(z))
1396
1396
| EXT_CALL gc_possible_root, r0
1397
1397
|| }
@@ -1526,17 +1526,21 @@ static void* dasm_labels[zend_lb_MAX];
1526
1526
||#endif
1527
1527
|.endmacro
1528
1528
1529
- |.macro OBJ_RELEASE, reg, tmp_reg, exit_label
1530
- | GC_DELREF reg
1529
+ |.macro OBJ_RELEASE, reg, exit_label
1530
+ | GC_DELREF Ra( reg)
1531
1531
| jne >1
1532
1532
| // zend_objects_store_del(obj);
1533
- | mov FCARG1a, reg
1533
+ || if (reg != ZREG_FCARG1a) {
1534
+ | mov FCARG1a, Ra(reg)
1535
+ || }
1534
1536
| EXT_CALL zend_objects_store_del, r0
1535
1537
| jmp exit_label
1536
1538
|1:
1537
- | IF_GC_MAY_NOT_LEAK reg, tmp_reg , >1
1539
+ | IF_GC_MAY_NOT_LEAK Ra( reg) , >1
1538
1540
| // gc_possible_root(obj)
1539
- | mov FCARG1a, reg
1541
+ || if (reg != ZREG_FCARG1a) {
1542
+ | mov FCARG1a, Ra(reg)
1543
+ || }
1540
1544
| EXT_CALL gc_possible_root, r0
1541
1545
|1:
1542
1546
|.endmacro
@@ -5343,7 +5347,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
5343
5347
if (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) {
5344
5348
| jmp >8
5345
5349
|4:
5346
- | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >8
5350
+ | IF_GC_MAY_NOT_LEAK FCARG1a, >8
5347
5351
| EXT_CALL gc_possible_root, r0
5348
5352
}
5349
5353
if (in_cold) {
@@ -5361,14 +5365,14 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
5361
5365
if (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) {
5362
5366
if (Z_REG(var_addr) == ZREG_FP) {
5363
5367
| GET_ZVAL_PTR FCARG1a, var_addr
5364
- | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5
5368
+ | IF_GC_MAY_NOT_LEAK FCARG1a, >5
5365
5369
} else if (Z_REG(var_addr) != ZREG_FCARG1a) {
5366
5370
| GET_ZVAL_PTR FCARG1a, var_addr
5367
- | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5
5371
+ | IF_GC_MAY_NOT_LEAK FCARG1a, >5
5368
5372
| mov T1, Ra(Z_REG(var_addr)) // save
5369
5373
} else {
5370
5374
| GET_ZVAL_PTR r0, var_addr
5371
- | IF_GC_MAY_NOT_LEAK r0, eax, >5
5375
+ | IF_GC_MAY_NOT_LEAK r0, >5
5372
5376
| mov T1, Ra(Z_REG(var_addr)) // save
5373
5377
| GET_ZVAL_PTR FCARG1a, var_addr
5374
5378
}
@@ -8760,9 +8764,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
8760
8764
| jnz >1
8761
8765
|.cold_code
8762
8766
|1:
8763
- | GET_Z_PTR r0 , RX + offsetof(zend_execute_data, This)
8767
+ | GET_Z_PTR FCARG1a , RX + offsetof(zend_execute_data, This)
8764
8768
| // OBJ_RELEASE(object);
8765
- | OBJ_RELEASE r0, ecx , >2
8769
+ | OBJ_RELEASE ZREG_FCARG1a , >2
8766
8770
| jmp >2
8767
8771
|.code
8768
8772
|2:
@@ -9768,17 +9772,17 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const ze
9768
9772
(op_array->fn_flags & ZEND_ACC_CLOSURE)) {
9769
9773
if (op_array->fn_flags & ZEND_ACC_CLOSURE) {
9770
9774
| // OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
9771
- | mov r0 , EX->func
9772
- | sub r0 , sizeof(zend_object)
9773
- | OBJ_RELEASE r0, ecx , >4
9775
+ | mov FCARG1a , EX->func
9776
+ | sub FCARG1a , sizeof(zend_object)
9777
+ | OBJ_RELEASE ZREG_FCARG1a , >4
9774
9778
} else if (op_array->scope && !(op_array->fn_flags & ZEND_ACC_STATIC)) {
9775
9779
| // if (call_info & ZEND_CALL_RELEASE_THIS)
9776
9780
| test FCARG1d, ZEND_CALL_RELEASE_THIS
9777
9781
| je >4
9778
9782
| // zend_object *object = Z_OBJ(execute_data->This);
9779
- | mov r0 , EX->This.value.obj
9783
+ | mov FCARG1a , EX->This.value.obj
9780
9784
| // OBJ_RELEASE(object);
9781
- | OBJ_RELEASE r0, ecx , >4
9785
+ | OBJ_RELEASE ZREG_FCARG1a , >4
9782
9786
}
9783
9787
|4:
9784
9788
}
@@ -10463,7 +10467,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, const z
10463
10467
if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) {
10464
10468
|3:
10465
10469
| // GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr)
10466
- | IF_GC_MAY_NOT_LEAK FCARG1a, edx, >5
10470
+ | IF_GC_MAY_NOT_LEAK FCARG1a, >5
10467
10471
| EXT_CALL gc_possible_root, r1
10468
10472
| jmp >5
10469
10473
}
0 commit comments