From e2a8b3e120fc7fc0f160f08bcfead27f9a6cf44c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 23 Jun 2020 17:51:02 +0300 Subject: [PATCH] Cleanup and better register usage --- ext/opcache/jit/zend_jit_x86.dasc | 44 +++++++++++++++++-------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 0b339be895..1d409f72ed 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -1252,8 +1252,8 @@ static void* dasm_labels[zend_lb_MAX]; | sub dword [zv], 1 |.endmacro -|.macro IF_GC_MAY_NOT_LEAK, ptr, tmp_reg, label -| test dword [ptr + 4],(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT)) +|.macro IF_GC_MAY_NOT_LEAK, ptr, label +| test dword [ptr+4],(GC_INFO_MASK | (GC_NOT_COLLECTABLE << GC_FLAGS_SHIFT)) | jne label |.endmacro @@ -1391,7 +1391,7 @@ static void* dasm_labels[zend_lb_MAX]; | GET_ZVAL_PTR FCARG1a, ref_addr |1: || } -| IF_GC_MAY_NOT_LEAK FCARG1a, eax, >4 +| IF_GC_MAY_NOT_LEAK FCARG1a, >4 | // gc_possible_root(Z_COUNTED_P(z)) | EXT_CALL gc_possible_root, r0 || } @@ -1526,17 +1526,21 @@ static void* dasm_labels[zend_lb_MAX]; ||#endif |.endmacro -|.macro OBJ_RELEASE, reg, tmp_reg, exit_label -| GC_DELREF reg +|.macro OBJ_RELEASE, reg, exit_label +| GC_DELREF Ra(reg) | jne >1 | // zend_objects_store_del(obj); -| mov FCARG1a, reg +|| if (reg != ZREG_FCARG1a) { +| mov FCARG1a, Ra(reg) +|| } | EXT_CALL zend_objects_store_del, r0 | jmp exit_label |1: -| IF_GC_MAY_NOT_LEAK reg, tmp_reg, >1 +| IF_GC_MAY_NOT_LEAK Ra(reg), >1 | // gc_possible_root(obj) -| mov FCARG1a, reg +|| if (reg != ZREG_FCARG1a) { +| mov FCARG1a, Ra(reg) +|| } | EXT_CALL gc_possible_root, r0 |1: |.endmacro @@ -5343,7 +5347,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, if (RC_MAY_BE_N(var_info) && (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) { | jmp >8 |4: - | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >8 + | IF_GC_MAY_NOT_LEAK FCARG1a, >8 | EXT_CALL gc_possible_root, r0 } if (in_cold) { @@ -5361,14 +5365,14 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, if (var_info & (MAY_BE_ARRAY|MAY_BE_OBJECT)) { if (Z_REG(var_addr) == ZREG_FP) { | GET_ZVAL_PTR FCARG1a, var_addr - | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5 + | IF_GC_MAY_NOT_LEAK FCARG1a, >5 } else if (Z_REG(var_addr) != ZREG_FCARG1a) { | GET_ZVAL_PTR FCARG1a, var_addr - | IF_GC_MAY_NOT_LEAK FCARG1a, eax, >5 + | IF_GC_MAY_NOT_LEAK FCARG1a, >5 | mov T1, Ra(Z_REG(var_addr)) // save } else { | GET_ZVAL_PTR r0, var_addr - | IF_GC_MAY_NOT_LEAK r0, eax, >5 + | IF_GC_MAY_NOT_LEAK r0, >5 | mov T1, Ra(Z_REG(var_addr)) // save | GET_ZVAL_PTR FCARG1a, var_addr } @@ -8760,9 +8764,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend | jnz >1 |.cold_code |1: - | GET_Z_PTR r0, RX + offsetof(zend_execute_data, This) + | GET_Z_PTR FCARG1a, RX + offsetof(zend_execute_data, This) | // OBJ_RELEASE(object); - | OBJ_RELEASE r0, ecx, >2 + | OBJ_RELEASE ZREG_FCARG1a, >2 | jmp >2 |.code |2: @@ -9768,17 +9772,17 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const ze (op_array->fn_flags & ZEND_ACC_CLOSURE)) { if (op_array->fn_flags & ZEND_ACC_CLOSURE) { | // OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); - | mov r0, EX->func - | sub r0, sizeof(zend_object) - | OBJ_RELEASE r0, ecx, >4 + | mov FCARG1a, EX->func + | sub FCARG1a, sizeof(zend_object) + | OBJ_RELEASE ZREG_FCARG1a, >4 } else if (op_array->scope && !(op_array->fn_flags & ZEND_ACC_STATIC)) { | // if (call_info & ZEND_CALL_RELEASE_THIS) | test FCARG1d, ZEND_CALL_RELEASE_THIS | je >4 | // zend_object *object = Z_OBJ(execute_data->This); - | mov r0, EX->This.value.obj + | mov FCARG1a, EX->This.value.obj | // OBJ_RELEASE(object); - | OBJ_RELEASE r0, ecx, >4 + | OBJ_RELEASE ZREG_FCARG1a, >4 } |4: } @@ -10463,7 +10467,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, const z if (op1_info & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) { |3: | // GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) - | IF_GC_MAY_NOT_LEAK FCARG1a, edx, >5 + | IF_GC_MAY_NOT_LEAK FCARG1a, >5 | EXT_CALL gc_possible_root, r1 | jmp >5 } -- 2.40.0