Skip to content

Commit e2a8b3e

Browse files
committed
Cleanup and better register usage
1 parent 6ac1688 commit e2a8b3e

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,8 +1252,8 @@ static void* dasm_labels[zend_lb_MAX];
12521252
| sub dword [zv], 1
12531253
|.endmacro
12541254

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))
12571257
| jne label
12581258
|.endmacro
12591259

@@ -1391,7 +1391,7 @@ static void* dasm_labels[zend_lb_MAX];
13911391
| GET_ZVAL_PTR FCARG1a, ref_addr
13921392
|1:
13931393
|| }
1394-
| IF_GC_MAY_NOT_LEAK FCARG1a, eax, >4
1394+
| IF_GC_MAY_NOT_LEAK FCARG1a, >4
13951395
| // gc_possible_root(Z_COUNTED_P(z))
13961396
| EXT_CALL gc_possible_root, r0
13971397
|| }
@@ -1526,17 +1526,21 @@ static void* dasm_labels[zend_lb_MAX];
15261526
||#endif
15271527
|.endmacro
15281528

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)
15311531
| jne >1
15321532
| // zend_objects_store_del(obj);
1533-
| mov FCARG1a, reg
1533+
|| if (reg != ZREG_FCARG1a) {
1534+
| mov FCARG1a, Ra(reg)
1535+
|| }
15341536
| EXT_CALL zend_objects_store_del, r0
15351537
| jmp exit_label
15361538
|1:
1537-
| IF_GC_MAY_NOT_LEAK reg, tmp_reg, >1
1539+
| IF_GC_MAY_NOT_LEAK Ra(reg), >1
15381540
| // gc_possible_root(obj)
1539-
| mov FCARG1a, reg
1541+
|| if (reg != ZREG_FCARG1a) {
1542+
| mov FCARG1a, Ra(reg)
1543+
|| }
15401544
| EXT_CALL gc_possible_root, r0
15411545
|1:
15421546
|.endmacro
@@ -5343,7 +5347,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
53435347
if (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) {
53445348
| jmp >8
53455349
|4:
5346-
| IF_GC_MAY_NOT_LEAK FCARG1a, eax, >8
5350+
| IF_GC_MAY_NOT_LEAK FCARG1a, >8
53475351
| EXT_CALL gc_possible_root, r0
53485352
}
53495353
if (in_cold) {
@@ -5361,14 +5365,14 @@ static int zend_jit_assign_to_variable(dasm_State **Dst,
53615365
if (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) {
53625366
if (Z_REG(var_addr) == ZREG_FP) {
53635367
| GET_ZVAL_PTR FCARG1a, var_addr
5364-
| IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5
5368+
| IF_GC_MAY_NOT_LEAK FCARG1a, >5
53655369
} else if (Z_REG(var_addr) != ZREG_FCARG1a) {
53665370
| GET_ZVAL_PTR FCARG1a, var_addr
5367-
| IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5
5371+
| IF_GC_MAY_NOT_LEAK FCARG1a, >5
53685372
| mov T1, Ra(Z_REG(var_addr)) // save
53695373
} else {
53705374
| GET_ZVAL_PTR r0, var_addr
5371-
| IF_GC_MAY_NOT_LEAK r0, eax, >5
5375+
| IF_GC_MAY_NOT_LEAK r0, >5
53725376
| mov T1, Ra(Z_REG(var_addr)) // save
53735377
| GET_ZVAL_PTR FCARG1a, var_addr
53745378
}
@@ -8760,9 +8764,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
87608764
| jnz >1
87618765
|.cold_code
87628766
|1:
8763-
| GET_Z_PTR r0, RX + offsetof(zend_execute_data, This)
8767+
| GET_Z_PTR FCARG1a, RX + offsetof(zend_execute_data, This)
87648768
| // OBJ_RELEASE(object);
8765-
| OBJ_RELEASE r0, ecx, >2
8769+
| OBJ_RELEASE ZREG_FCARG1a, >2
87668770
| jmp >2
87678771
|.code
87688772
|2:
@@ -9768,17 +9772,17 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const ze
97689772
(op_array->fn_flags & ZEND_ACC_CLOSURE)) {
97699773
if (op_array->fn_flags & ZEND_ACC_CLOSURE) {
97709774
| // 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
97749778
} else if (op_array->scope && !(op_array->fn_flags & ZEND_ACC_STATIC)) {
97759779
| // if (call_info & ZEND_CALL_RELEASE_THIS)
97769780
| test FCARG1d, ZEND_CALL_RELEASE_THIS
97779781
| je >4
97789782
| // zend_object *object = Z_OBJ(execute_data->This);
9779-
| mov r0, EX->This.value.obj
9783+
| mov FCARG1a, EX->This.value.obj
97809784
| // OBJ_RELEASE(object);
9781-
| OBJ_RELEASE r0, ecx, >4
9785+
| OBJ_RELEASE ZREG_FCARG1a, >4
97829786
}
97839787
|4:
97849788
}
@@ -10463,7 +10467,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, const z
1046310467
if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) {
1046410468
|3:
1046510469
| // GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr)
10466-
| IF_GC_MAY_NOT_LEAK FCARG1a, edx, >5
10470+
| IF_GC_MAY_NOT_LEAK FCARG1a, >5
1046710471
| EXT_CALL gc_possible_root, r1
1046810472
| jmp >5
1046910473
}

0 commit comments

Comments
 (0)