From: Dmitry Stogov Date: Thu, 20 Aug 2020 17:43:40 +0000 (+0300) Subject: cleanup unused parameters X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c64cb19138fc4f91e3726f1332f45b691e795043;p=php cleanup unused parameters --- diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index e66afd9d2b..2956591490 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -116,7 +116,7 @@ static void ZEND_FASTCALL zend_runtime_jit(void); static int zend_jit_trace_op_len(const zend_op *opline); static int zend_jit_trace_may_exit(const zend_op_array *op_array, const zend_op *opline); -static uint32_t zend_jit_trace_get_exit_point(const zend_op *from_opline, const zend_op *to_opline, zend_jit_trace_rec *trace, uint32_t flags); +static uint32_t zend_jit_trace_get_exit_point(const zend_op *to_opline, uint32_t flags); static const void *zend_jit_trace_get_exit_addr(uint32_t n); static void zend_jit_trace_add_code(const void *start, uint32_t size); @@ -2165,23 +2165,17 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op || op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_SWITCH_LONG || op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_SWITCH_STRING || op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_MATCH)) { - if (!zend_jit_reset_opline(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start) - || !zend_jit_set_valid_ip(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) { + zend_jit_reset_opline(); + if (!zend_jit_set_valid_ip(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) { goto jit_failure; } } else { - if (!zend_jit_set_opline(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) { - goto jit_failure; - } + zend_jit_set_opline(op_array->opcodes + ssa->cfg.blocks[b].start); } } else if (ssa->cfg.blocks[b].flags & ZEND_BB_TARGET) { - if (!zend_jit_reset_opline(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) { - goto jit_failure; - } + zend_jit_reset_opline(); } else if (ssa->cfg.blocks[b].flags & (ZEND_BB_START|ZEND_BB_RECV_ENTRY|ZEND_BB_ENTRY)) { - if (!zend_jit_set_opline(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) { - goto jit_failure; - } + zend_jit_set_opline(op_array->opcodes + ssa->cfg.blocks[b].start); } if (ssa->cfg.blocks[b].flags & ZEND_BB_LOOP_HEADER) { if (!zend_jit_check_timeout(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start, NULL)) { @@ -2254,7 +2248,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op res_addr = 0; } op1_def_info = OP1_DEF_INFO(); - if (!zend_jit_inc_dec(&dasm_state, opline, op_array, + if (!zend_jit_inc_dec(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op1_def_info, OP1_DEF_REG_ADDR(), res_use_info, res_info, @@ -2296,7 +2290,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op res_use_info = RES_USE_INFO(); res_addr = RES_REG_ADDR(); } - if (!zend_jit_long_math(&dasm_state, opline, op_array, + if (!zend_jit_long_math(&dasm_state, opline, op1_info, OP1_RANGE(), OP1_REG_ADDR(), op2_info, OP2_RANGE(), OP2_REG_ADDR(), res_use_info, RES_INFO(), res_addr, @@ -2320,7 +2314,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (opline->opcode == ZEND_ADD && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY && (op2_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY) { - if (!zend_jit_add_arrays(&dasm_state, opline, op_array, op1_info, op2_info)) { + if (!zend_jit_add_arrays(&dasm_state, opline, op1_info, op2_info)) { goto jit_failure; } goto done; @@ -2344,7 +2338,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op res_addr = RES_REG_ADDR(); } res_info = RES_INFO(); - if (!zend_jit_math(&dasm_state, opline, op_array, + if (!zend_jit_math(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op2_info, OP2_REG_ADDR(), res_use_info, res_info, res_addr, @@ -2378,8 +2372,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else { send_result = 0; } - if (!zend_jit_concat(&dasm_state, opline, op_array, - op1_info, op2_info, RES_INFO(), send_result, + if (!zend_jit_concat(&dasm_state, opline, + op1_info, op2_info, send_result, zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; } @@ -2426,7 +2420,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } } op1_def_info = OP1_DEF_INFO(); - if (!zend_jit_assign_op(&dasm_state, opline, op_array, + if (!zend_jit_assign_op(&dasm_state, opline, op1_info, op1_def_info, OP1_RANGE(), op2_info, OP2_RANGE(), (op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG) && (op1_def_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, op_array, ssa), @@ -2446,7 +2440,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (PROFITABILITY_CHECKS && (!ssa->ops || !ssa->var_info)) { break; } - if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array, + if (!zend_jit_assign_dim_op(&dasm_state, opline, OP1_INFO(), OP1_DEF_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP1_DATA_INFO(), OP1_DATA_RANGE(), zend_may_throw(opline, ssa_op, op_array, ssa))) { @@ -2460,7 +2454,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (PROFITABILITY_CHECKS && (!ssa->ops || !ssa->var_info)) { break; } - if (!zend_jit_assign_dim(&dasm_state, opline, op_array, + if (!zend_jit_assign_dim(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP1_DATA_INFO(), zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; @@ -2488,7 +2482,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else { op2_def_addr = op2_addr; } - if (!zend_jit_assign(&dasm_state, opline, op_array, + if (!zend_jit_assign(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), OP1_DEF_INFO(), OP1_DEF_REG_ADDR(), OP2_INFO(), op2_addr, op2_def_addr, @@ -2506,7 +2500,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else { op1_def_addr = op1_addr; } - if (!zend_jit_qm_assign(&dasm_state, opline, op_array, + if (!zend_jit_qm_assign(&dasm_state, opline, OP1_INFO(), op1_addr, op1_def_addr, RES_INFO(), RES_REG_ADDR())) { goto jit_failure; @@ -2529,7 +2523,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op && opline->op2.num > MAX_ARG_FLAG_NUM) { break; } - if (!zend_jit_send_val(&dasm_state, opline, op_array, + if (!zend_jit_send_val(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR())) { goto jit_failure; } @@ -2579,7 +2573,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (opline->op2.num > MAX_ARG_FLAG_NUM) { break; } - if (!zend_jit_check_func_arg(&dasm_state, opline, op_array)) { + if (!zend_jit_check_func_arg(&dasm_state, opline)) { goto jit_failure; } goto done; @@ -2626,7 +2620,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_cmp(&dasm_state, opline, op_array, + if (!zend_jit_cmp(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP2_REG_ADDR(), res_addr, @@ -2654,7 +2648,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_identical(&dasm_state, opline, op_array, + if (!zend_jit_identical(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), OP2_REG_ADDR(), RES_REG_ADDR(), @@ -2680,7 +2674,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_defined(&dasm_state, opline, op_array, smart_branch_opcode, target_label, target_label2, NULL)) { + if (!zend_jit_defined(&dasm_state, opline, smart_branch_opcode, target_label, target_label2, NULL)) { goto jit_failure; } goto done; @@ -2704,7 +2698,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_type_check(&dasm_state, opline, op_array, OP1_INFO(), smart_branch_opcode, target_label, target_label2, NULL)) { + if (!zend_jit_type_check(&dasm_state, opline, OP1_INFO(), smart_branch_opcode, target_label, target_label2, NULL)) { goto jit_failure; } goto done; @@ -2740,22 +2734,22 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op goto jit_failure; } for (j = 0 ; j < op_array->last_var; j++) { - uint32_t info = zend_ssa_cv_info(opline, op_array, ssa, j); + uint32_t info = zend_ssa_cv_info(op_array, ssa, j); if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { - if (!zend_jit_free_cv(&dasm_state, opline, op_array, info, j)) { + if (!zend_jit_free_cv(&dasm_state, info, j)) { goto jit_failure; } } } - if (!zend_jit_leave_func(&dasm_state, opline, op_array, NULL, NULL, 1)) { + if (!zend_jit_leave_func(&dasm_state, op_array, NULL, NULL, 1)) { goto jit_failure; } } goto done; case ZEND_BOOL: case ZEND_BOOL_NOT: - if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array, + if (!zend_jit_bool_jmpznz(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), RES_REG_ADDR(), -1, -1, zend_may_throw(opline, ssa_op, op_array, ssa), @@ -2782,7 +2776,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else { res_addr = RES_REG_ADDR(); } - if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array, + if (!zend_jit_bool_jmpznz(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), res_addr, ssa->cfg.blocks[b].successors[0], ssa->cfg.blocks[b].successors[1], zend_may_throw(opline, ssa_op, op_array, ssa), @@ -2810,7 +2804,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_isset_isempty_cv(&dasm_state, opline, op_array, + if (!zend_jit_isset_isempty_cv(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), smart_branch_opcode, target_label, target_label2, NULL)) { @@ -2822,7 +2816,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if (PROFITABILITY_CHECKS && (!ssa->ops || !ssa->var_info)) { break; } - if (!zend_jit_fetch_dim_read(&dasm_state, opline, op_array, ssa, ssa_op, + if (!zend_jit_fetch_dim_read(&dasm_state, opline, ssa, ssa_op, OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), RES_INFO(), RES_REG_ADDR(), zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; @@ -2851,7 +2845,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op smart_branch_opcode = 0; target_label = target_label2 = (uint32_t)-1; } - if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array, + if (!zend_jit_isset_isempty_dim(&dasm_state, opline, OP1_INFO(), OP1_REG_ADDR(), OP2_INFO(), zend_may_throw(opline, ssa_op, op_array, ssa), smart_branch_opcode, target_label, target_label2, @@ -2903,7 +2897,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } else { op1_info = OP1_INFO(); } - if (!zend_jit_bind_global(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_bind_global(&dasm_state, opline, op1_info)) { goto jit_failure; } goto done; @@ -2921,7 +2915,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op goto done; case ZEND_FREE: case ZEND_FE_FREE: - if (!zend_jit_free(&dasm_state, opline, op_array, OP1_INFO(), + if (!zend_jit_free(&dasm_state, opline, OP1_INFO(), zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; } @@ -2931,7 +2925,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if ((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) != MAY_BE_STRING) { break; } - if (!zend_jit_echo(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_echo(&dasm_state, opline, op1_info)) { goto jit_failure; } goto done; @@ -2940,7 +2934,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op if ((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) != MAY_BE_STRING) { break; } - if (!zend_jit_strlen(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_strlen(&dasm_state, opline, op1_info)) { goto jit_failure; } goto done; @@ -2995,7 +2989,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op goto jit_failure; } } - zend_jit_set_opline(&dasm_state, opline+1); + zend_jit_set_opline(opline+1); break; case ZEND_NOP: case ZEND_OP_DATA: diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 29684a4085..6ad0800036 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -132,7 +132,7 @@ static const void *zend_jit_trace_get_exit_addr(uint32_t n) ((n % ZEND_JIT_EXIT_POINTS_PER_GROUP) * ZEND_JIT_EXIT_POINTS_SPACING)); } -static uint32_t zend_jit_trace_get_exit_point(const zend_op *from_opline, const zend_op *to_opline, zend_jit_trace_rec *trace, uint32_t flags) +static uint32_t zend_jit_trace_get_exit_point(const zend_op *to_opline, uint32_t flags) { zend_jit_trace_info *t = &zend_jit_traces[ZEND_JIT_TRACE_NUM]; uint32_t exit_point; @@ -2954,13 +2954,13 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par parent_trace ? &zend_jit_traces[parent_trace] : NULL, exit_num); if (!parent_trace) { - zend_jit_set_opline(&dasm_state, opline); + zend_jit_set_opline(opline); } else { if (zend_jit_traces[parent_trace].exit_info[exit_num].opline == NULL) { zend_jit_trace_opline_guard(&dasm_state, opline); - zend_jit_set_opline(&dasm_state, opline); + zend_jit_set_opline(opline); } else { - zend_jit_reset_opline(&dasm_state, opline); + zend_jit_reset_opline(); } } @@ -3079,7 +3079,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (trace_buffer->stop != ZEND_JIT_TRACE_STOP_RECURSIVE_RET) { if (ra && zend_jit_trace_stack_needs_deoptimization(stack, op_array->last_var + op_array->T)) { - uint32_t exit_point = zend_jit_trace_get_exit_point(NULL, NULL, NULL, ZEND_JIT_EXIT_TO_VM); + uint32_t exit_point = zend_jit_trace_get_exit_point(NULL, ZEND_JIT_EXIT_TO_VM); timeout_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!timeout_exit_addr) { @@ -3181,7 +3181,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par res_addr = 0; } op1_def_info = OP1_DEF_INFO(); - if (!zend_jit_inc_dec(&dasm_state, opline, op_array, + if (!zend_jit_inc_dec(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op1_def_info, OP1_DEF_REG_ADDR(), res_use_info, res_info, @@ -3255,7 +3255,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par res_addr = RES_REG_ADDR(); } res_info = RES_INFO(); - if (!zend_jit_long_math(&dasm_state, opline, op_array, + if (!zend_jit_long_math(&dasm_state, opline, op1_info, OP1_RANGE(), OP1_REG_ADDR(), op2_info, OP2_RANGE(), OP2_REG_ADDR(), res_use_info, res_info, res_addr, @@ -3278,7 +3278,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (opline->opcode == ZEND_ADD && (op1_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY && (op2_info & (MAY_BE_ANY|MAY_BE_UNDEF)) == MAY_BE_ARRAY) { - if (!zend_jit_add_arrays(&dasm_state, opline, op_array, op1_info, op2_info)) { + if (!zend_jit_add_arrays(&dasm_state, opline, op1_info, op2_info)) { goto jit_failure; } goto done; @@ -3326,7 +3326,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par res_addr = RES_REG_ADDR(); } res_info = RES_INFO(); - if (!zend_jit_math(&dasm_state, opline, op_array, + if (!zend_jit_math(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op2_info, OP2_REG_ADDR(), res_use_info, res_info, res_addr, @@ -3378,9 +3378,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else { send_result = 0; } - res_info = RES_INFO(); - if (!zend_jit_concat(&dasm_state, opline, op_array, - op1_info, op2_info, res_info, send_result, + if (!zend_jit_concat(&dasm_state, opline, + op1_info, op2_info, send_result, zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; } @@ -3426,7 +3425,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } } op1_def_info = OP1_DEF_INFO(); - if (!zend_jit_assign_op(&dasm_state, opline, op_array, + if (!zend_jit_assign_op(&dasm_state, opline, op1_info, op1_def_info, OP1_RANGE(), op2_info, OP2_RANGE(), (op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG) && (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow_ex(opline, ssa_op, op_array, ssa), @@ -3464,7 +3463,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_data_info = OP1_DATA_INFO(); CHECK_OP1_DATA_TRACE_TYPE(); op1_def_info = OP1_DEF_INFO(); - if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array, + if (!zend_jit_assign_dim_op(&dasm_state, opline, op1_info, op1_def_info, op1_addr, op2_info, op1_data_info, OP1_DATA_RANGE(), zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { @@ -3489,7 +3488,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par CHECK_OP2_TRACE_TYPE(); op1_data_info = OP1_DATA_INFO(); CHECK_OP1_DATA_TRACE_TYPE(); - if (!zend_jit_assign_dim(&dasm_state, opline, op_array, + if (!zend_jit_assign_dim(&dasm_state, opline, op1_info, op1_addr, op2_info, op1_data_info, zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) { goto jit_failure; @@ -3525,7 +3524,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (!zend_jit_fetch_reference(&dasm_state, opline, orig_op1_type, &op1_info, &op1_addr, 0)) { goto jit_failure; } - if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, op_array, opline->op2_type, op2_addr, 1)) { + if (!zend_jit_assign_to_typed_ref(&dasm_state, opline, opline->op2_type, op2_addr, 1)) { goto jit_failure; } op1_def_addr = op1_addr; @@ -3538,7 +3537,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_def_info &= ~MAY_BE_REF; } } - if (!zend_jit_assign(&dasm_state, opline, op_array, + if (!zend_jit_assign(&dasm_state, opline, op1_info, op1_addr, op1_def_info, op1_def_addr, op2_info, op2_addr, op2_def_addr, @@ -3564,7 +3563,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op1_info = OP1_INFO(); CHECK_OP1_TRACE_TYPE(); res_info = RES_INFO(); - if (!zend_jit_qm_assign(&dasm_state, opline, op_array, + if (!zend_jit_qm_assign(&dasm_state, opline, op1_info, op1_addr, op1_def_addr, res_info, RES_REG_ADDR())) { goto jit_failure; @@ -3589,7 +3588,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } op1_info = OP1_INFO(); CHECK_OP1_TRACE_TYPE(); - if (!zend_jit_send_val(&dasm_state, opline, op_array, + if (!zend_jit_send_val(&dasm_state, opline, op1_info, OP1_REG_ADDR())) { goto jit_failure; } @@ -3672,7 +3671,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || !JIT_G(current_frame)->call->func)) { break; } - if (!zend_jit_check_func_arg(&dasm_state, opline, op_array)) { + if (!zend_jit_check_func_arg(&dasm_state, opline)) { goto jit_failure; } goto done; @@ -3706,7 +3705,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (ra) { zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); } - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { goto jit_failure; @@ -3716,7 +3715,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_cmp(&dasm_state, opline, op_array, + if (!zend_jit_cmp(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op2_info, OP2_REG_ADDR(), RES_REG_ADDR(), @@ -3739,7 +3738,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (ra) { zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); } - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { goto jit_failure; @@ -3752,7 +3751,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_identical(&dasm_state, opline, op_array, + if (!zend_jit_identical(&dasm_state, opline, op1_info, OP1_REG_ADDR(), op2_info, OP2_REG_ADDR(), RES_REG_ADDR(), @@ -3765,7 +3764,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if ((opline->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { zend_bool exit_if_true = 0; const zend_op *exit_opline = zend_jit_trace_get_exit_opline(p + 1, opline + 1, &exit_if_true); - uint32_t exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + uint32_t exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -3776,7 +3775,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_defined(&dasm_state, opline, op_array, smart_branch_opcode, -1, -1, exit_addr)) { + if (!zend_jit_defined(&dasm_state, opline, smart_branch_opcode, -1, -1, exit_addr)) { goto jit_failure; } goto done; @@ -3794,7 +3793,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (ra) { zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra); } - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { goto jit_failure; @@ -3804,7 +3803,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_type_check(&dasm_state, opline, op_array, op1_info, smart_branch_opcode, -1, -1, exit_addr)) { + if (!zend_jit_type_check(&dasm_state, opline, op1_info, smart_branch_opcode, -1, -1, exit_addr)) { goto jit_failure; } goto done; @@ -3846,11 +3845,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par && TRACE_FRAME_IS_RETURN_VALUE_USED(JIT_G(current_frame))) { continue; } - info = zend_ssa_cv_info(opline, op_array, op_array_ssa, j); + info = zend_ssa_cv_info(op_array, op_array_ssa, j); type = STACK_TYPE(stack, j); info = zend_jit_trace_type_to_info_ex(type, info); if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { - if (!zend_jit_free_cv(&dasm_state, opline, op_array, info, j)) { + if (!zend_jit_free_cv(&dasm_state, info, j)) { goto jit_failure; } if (info & (MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_ARRAY|MAY_BE_ARRAY_OF_RESOURCE)) { @@ -3860,7 +3859,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } } } - if (!zend_jit_leave_func(&dasm_state, opline, op_array, p + 1, &zend_jit_traces[ZEND_JIT_TRACE_NUM], may_throw)) { + if (!zend_jit_leave_func(&dasm_state, op_array, p + 1, &zend_jit_traces[ZEND_JIT_TRACE_NUM], may_throw)) { goto jit_failure; } } @@ -3869,7 +3868,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par case ZEND_BOOL_NOT: op1_info = OP1_INFO(); CHECK_OP1_TRACE_TYPE(); - if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array, + if (!zend_jit_bool_jmpznz(&dasm_state, opline, op1_info, OP1_REG_ADDR(), RES_REG_ADDR(), -1, -1, zend_may_throw(opline, ssa_op, op_array, ssa), @@ -3926,10 +3925,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p+1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); } else { - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p+1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); } exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -3945,7 +3944,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } op1_info = OP1_INFO(); CHECK_OP1_TRACE_TYPE(); - if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array, + if (!zend_jit_bool_jmpznz(&dasm_state, opline, op1_info, OP1_REG_ADDR(), res_addr, -1, -1, zend_may_throw(opline, ssa_op, op_array, ssa), @@ -3971,7 +3970,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if ((opline->result_type & (IS_SMART_BRANCH_JMPZ|IS_SMART_BRANCH_JMPNZ)) != 0) { zend_bool exit_if_true = 0; const zend_op *exit_opline = zend_jit_trace_get_exit_opline(p + 1, opline + 1, &exit_if_true); - uint32_t exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + uint32_t exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -3982,7 +3981,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_isset_isempty_cv(&dasm_state, opline, op_array, + if (!zend_jit_isset_isempty_cv(&dasm_state, opline, op1_info, op1_addr, smart_branch_opcode, -1, -1, exit_addr)) { goto jit_failure; @@ -4011,7 +4010,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par op2_info = OP2_INFO(); CHECK_OP2_TRACE_TYPE(); res_info = RES_INFO(); - if (!zend_jit_fetch_dim_read(&dasm_state, opline, op_array, ssa, ssa_op, + if (!zend_jit_fetch_dim_read(&dasm_state, opline, ssa, ssa_op, op1_info, op1_addr, op2_info, res_info, RES_REG_ADDR(), ( (op1_info & MAY_BE_ANY) != MAY_BE_ARRAY || @@ -4059,10 +4058,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->op1.var), ZREG_NONE); - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_info); } else { - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p + 1, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); } exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -4073,7 +4072,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par smart_branch_opcode = 0; exit_addr = NULL; } - if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array, + if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op1_info, op1_addr, op2_info, zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info), smart_branch_opcode, -1, -1, @@ -4159,7 +4158,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else { op1_info = OP1_INFO(); } - if (!zend_jit_bind_global(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_bind_global(&dasm_state, opline, op1_info)) { goto jit_failure; } if ((opline+1)->opcode == ZEND_BIND_GLOBAL) { @@ -4199,7 +4198,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par case ZEND_FREE: case ZEND_FE_FREE: op1_info = OP1_INFO(); - if (!zend_jit_free(&dasm_state, opline, op_array, op1_info, + if (!zend_jit_free(&dasm_state, opline, op1_info, zend_may_throw(opline, ssa_op, op_array, ssa))) { goto jit_failure; } @@ -4210,7 +4209,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if ((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) != MAY_BE_STRING) { break; } - if (!zend_jit_echo(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_echo(&dasm_state, opline, op1_info)) { goto jit_failure; } goto done; @@ -4220,7 +4219,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if ((op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) != MAY_BE_STRING) { break; } - if (!zend_jit_strlen(&dasm_state, opline, op_array, op1_info)) { + if (!zend_jit_strlen(&dasm_state, opline, op1_info)) { goto jit_failure; } goto done; @@ -4249,7 +4248,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par goto jit_failure; } if ((p+1)->op == ZEND_JIT_TRACE_INIT_CALL && (p+1)->func) { - if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) { + if (!zend_jit_init_fcall_guard(&dasm_state, (p+1)->func, opline+1)) { goto jit_failure; } } @@ -4261,7 +4260,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if ((opline->op1_type != IS_CONST || opline->op2_type != IS_CONST) && (p+1)->op == ZEND_JIT_TRACE_INIT_CALL && (p+1)->func) { - if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) { + if (!zend_jit_init_fcall_guard(&dasm_state, (p+1)->func, opline+1)) { goto jit_failure; } } @@ -4272,7 +4271,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } if (opline->op2_type != IS_CONST && (p+1)->op == ZEND_JIT_TRACE_INIT_CALL && (p+1)->func) { - if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) { + if (!zend_jit_init_fcall_guard(&dasm_state, (p+1)->func, opline+1)) { goto jit_failure; } } @@ -4284,7 +4283,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (opline->op1_type != IS_CONST && (p+1)->op == ZEND_JIT_TRACE_INIT_CALL && (p+1)->func) { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_OBJECT); - if (!zend_jit_init_fcall_guard(&dasm_state, opline, (p+1)->func, opline+1)) { + if (!zend_jit_init_fcall_guard(&dasm_state, (p+1)->func, opline+1)) { goto jit_failure; } } @@ -4522,7 +4521,7 @@ done: if ((p+1)->op == ZEND_JIT_TRACE_END) { p++; - zend_jit_set_opline(&dasm_state, p->opline); + zend_jit_set_opline(p->opline); break; } op_array = (zend_op_array*)p->op_array; @@ -4550,7 +4549,7 @@ done: } } } - zend_jit_set_opline(&dasm_state, (p+1)->opline); + zend_jit_set_opline((p+1)->opline); } else if (p->op == ZEND_JIT_TRACE_BACK) { op_array = (zend_op_array*)p->op_array; jit_extension = @@ -4691,7 +4690,7 @@ done: opline = q->opline; ZEND_ASSERT(opline != NULL); } - if (!zend_jit_init_fcall_guard(&dasm_state, NULL, p->func, opline)) { + if (!zend_jit_init_fcall_guard(&dasm_state, p->func, opline)) { goto jit_failure; } } diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 1cf4183b61..121dd62719 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -1419,7 +1419,7 @@ static void* dasm_labels[zend_lb_MAX]; || } |.endmacro -|.macro FREE_OP, op_type, op, op_info, cold, op_array, opline +|.macro FREE_OP, op_type, op, op_info, cold, opline || if (op_type & (IS_VAR|IS_TMP_VAR)) { | ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_FP, op.var), op_info, 0, cold, opline || } @@ -2945,7 +2945,7 @@ static int zend_jit_trace_begin(dasm_State **Dst, uint32_t trace_num, zend_jit_t static int zend_jit_trace_opline_guard(dasm_State **Dst, const zend_op *opline) { - uint32_t exit_point = zend_jit_trace_get_exit_point(NULL, NULL, NULL, 0); + uint32_t exit_point = zend_jit_trace_get_exit_point(NULL, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -3223,7 +3223,7 @@ static int zend_jit_trace_return(dasm_State **Dst, zend_bool original_handler) static int zend_jit_type_guard(dasm_State **Dst, const zend_op *opline, uint32_t var, uint8_t type) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -3345,7 +3345,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); } - exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, trace, 0); + exit_point = zend_jit_trace_get_exit_point(exit_opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { @@ -3454,18 +3454,16 @@ static int zend_jit_tail_handler(dasm_State **Dst, const zend_op *opline) return 1; } -static int zend_jit_set_opline(dasm_State **Dst, const zend_op *target_opline) +static void zend_jit_set_opline(const zend_op *target_opline) { if (!reuse_ip) { last_valid_opline = target_opline; } - return 1; } -static int zend_jit_reset_opline(dasm_State **Dst, const zend_op *target_opline) +static void zend_jit_reset_opline(void) { last_valid_opline = NULL; - return 1; } static void zend_jit_start_reuse_ip(void) { @@ -3689,7 +3687,7 @@ static int zend_jit_store_const(dasm_State **Dst, int var, zend_reg reg) return 1; } -static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op1_def_info, zend_jit_addr op1_def_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_overflow, int may_throw) +static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op1_def_info, zend_jit_addr op1_def_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, int may_overflow, int may_throw) { if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)-MAY_BE_LONG)) { | IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >2 @@ -3739,7 +3737,7 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, const zend_ } } - exit_point = zend_jit_trace_get_exit_point(opline, opline + 1, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(opline + 1, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); | jo &exit_addr @@ -3922,7 +3920,6 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, const zend_ } static int zend_jit_math_long_long(dasm_State **Dst, - const zend_op_array *op_array, const zend_op *opline, zend_uchar opcode, zend_jit_addr op1_addr, @@ -3992,7 +3989,7 @@ static int zend_jit_math_long_long(dasm_State **Dst, } if (may_overflow) { if (res_info & MAY_BE_GUARD) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); | jo &exit_addr } else { @@ -4239,7 +4236,6 @@ static int zend_jit_math_double_double(dasm_State **Dst, static int zend_jit_math_helper(dasm_State **Dst, const zend_op *opline, zend_uchar opcode, - const zend_op_array *op_array, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, @@ -4283,7 +4279,7 @@ static int zend_jit_math_helper(dasm_State **Dst, | IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >6 } } - if (!zend_jit_math_long_long(Dst, op_array, opline, opcode, op1_addr, op2_addr, res_addr, res_info, res_use_info, may_overflow)) { + if (!zend_jit_math_long_long(Dst, opline, opcode, op1_addr, op2_addr, res_addr, res_info, res_use_info, may_overflow)) { return 0; } if (op1_info & MAY_BE_DOUBLE) { @@ -4438,8 +4434,8 @@ static int zend_jit_math_helper(dasm_State **Dst, |.if not(X64) | add r4, 12 |.endif - | FREE_OP op1_type, op1, op1_info, 0, op_array, opline - | FREE_OP op2_type, op2, op2_info, 0, op_array, opline + | FREE_OP op1_type, op1, op1_info, 0, opline + | FREE_OP op2_type, op2, op2_info, 0, opline if (may_throw) { zend_jit_check_exception(Dst); } @@ -4459,7 +4455,7 @@ static int zend_jit_math_helper(dasm_State **Dst, return 1; } -static int zend_jit_math(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_overflow, int may_throw) +static int zend_jit_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_overflow, int may_throw) { ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); ZEND_ASSERT((op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) && @@ -4474,7 +4470,7 @@ static int zend_jit_math(dasm_State **Dst, const zend_op *opline, const zend_op_ res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); } - if (!zend_jit_math_helper(Dst, opline, opline->opcode, op_array, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->result.var, res_addr, res_info, res_use_info, may_overflow, may_throw)) { + if (!zend_jit_math_helper(Dst, opline, opline->opcode, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->result.var, res_addr, res_info, res_use_info, may_overflow, may_throw)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { @@ -4483,7 +4479,7 @@ static int zend_jit_math(dasm_State **Dst, const zend_op *opline, const zend_op_ return 1; } -static int zend_jit_add_arrays(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, uint32_t op2_info) +static int zend_jit_add_arrays(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info) { zend_jit_addr op1_addr = OP1_ADDR(); zend_jit_addr op2_addr = OP2_ADDR(); @@ -4494,15 +4490,14 @@ static int zend_jit_add_arrays(dasm_State **Dst, const zend_op *opline, const ze | EXT_CALL zend_jit_add_arrays_helper, r0 | SET_ZVAL_PTR res_addr, r0 | SET_ZVAL_TYPE_INFO res_addr, IS_ARRAY_EX - | FREE_OP opline->op1_type, opline->op1, op1_info, 0, op_array, opline - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline return 1; } static int zend_jit_long_math_helper(dasm_State **Dst, const zend_op *opline, zend_uchar opcode, - const zend_op_array *op_array, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, @@ -4767,8 +4762,8 @@ static int zend_jit_long_math_helper(dasm_State **Dst, |.if not(X64) | add r4, 12 |.endif - | FREE_OP op1_type, op1, op1_info, 0, op_array, opline - | FREE_OP op2_type, op2, op2_info, 0, op_array, opline + | FREE_OP op1_type, op1, op1_info, 0, opline + | FREE_OP op2_type, op2, op2_info, 0, opline if (may_throw) { zend_jit_check_exception(Dst); } @@ -4789,7 +4784,7 @@ static int zend_jit_long_math_helper(dasm_State **Dst, return 1; } -static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_throw) +static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_ssa_range *op1_range, zend_jit_addr op1_addr, uint32_t op2_info, zend_ssa_range *op2_range, zend_jit_addr op2_addr, uint32_t res_use_info, uint32_t res_info, zend_jit_addr res_addr, zend_bool send_result, int may_throw) { ZEND_ASSERT(!(op1_info & MAY_BE_UNDEF) && !(op2_info & MAY_BE_UNDEF)); ZEND_ASSERT((op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG)); @@ -4803,7 +4798,7 @@ static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, const zen res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_RX, (opline+1)->result.var); } - if (!zend_jit_long_math_helper(Dst, opline, opline->opcode, op_array, + if (!zend_jit_long_math_helper(Dst, opline, opline->opcode, opline->op1_type, opline->op1, op1_addr, op1_info, op1_range, opline->op2_type, opline->op2, op2_addr, op2_info, op2_range, opline->result.var, res_addr, res_info, res_use_info, may_throw)) { @@ -4817,7 +4812,6 @@ static int zend_jit_long_math(dasm_State **Dst, const zend_op *opline, const zen static int zend_jit_concat_helper(dasm_State **Dst, const zend_op *opline, - const zend_op_array *op_array, zend_uchar op1_type, znode_op op1, zend_jit_addr op1_addr, @@ -4827,7 +4821,6 @@ static int zend_jit_concat_helper(dasm_State **Dst, zend_jit_addr op2_addr, uint32_t op2_info, zend_jit_addr res_addr, - uint32_t res_info, int may_throw) { #if 1 @@ -4860,8 +4853,8 @@ static int zend_jit_concat_helper(dasm_State **Dst, | add r4, 12 |.endif } - | FREE_OP op1_type, op1, op1_info, 0, op_array, opline - | FREE_OP op2_type, op2, op2_info, 0, op_array, opline + | FREE_OP op1_type, op1, op1_info, 0, opline + | FREE_OP op2_type, op2, op2_info, 0, opline |5: } if ((op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF) - MAY_BE_STRING)) || @@ -4886,8 +4879,8 @@ static int zend_jit_concat_helper(dasm_State **Dst, |.if not(X64) | add r4, 12 |.endif - | FREE_OP op1_type, op1, op1_info, 0, op_array, opline - | FREE_OP op2_type, op2, op2_info, 0, op_array, opline + | FREE_OP op1_type, op1, op1_info, 0, opline + | FREE_OP op2_type, op2, op2_info, 0, opline if (may_throw) { zend_jit_check_exception(Dst); } @@ -4902,7 +4895,7 @@ static int zend_jit_concat_helper(dasm_State **Dst, return 1; } -static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, uint32_t op2_info, uint32_t res_info, zend_bool send_result, int may_throw) +static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op2_info, zend_bool send_result, int may_throw) { zend_jit_addr op1_addr, op2_addr, res_addr; @@ -4922,10 +4915,10 @@ static int zend_jit_concat(dasm_State **Dst, const zend_op *opline, const zend_o } else { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); } - return zend_jit_concat_helper(Dst, opline, op_array, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, res_info, may_throw); + return zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw); } -static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, uint32_t found, uint32_t not_found, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr) +static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_op *opline, uint32_t type, uint32_t op1_info, uint32_t op2_info, const void *found_exit_addr, const void *not_found_exit_addr, const void *exit_addr) /* Labels: 1,2,3,4,5 */ { zend_jit_addr op2_addr = OP2_ADDR(); @@ -4934,7 +4927,7 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R && !exit_addr) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -5362,7 +5355,6 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o static int zend_jit_simple_assign(dasm_State **Dst, const zend_op *opline, - const zend_op_array *op_array, zend_jit_addr var_addr, uint32_t var_info, uint32_t var_def_info, @@ -5501,7 +5493,6 @@ static int zend_jit_simple_assign(dasm_State **Dst, static int zend_jit_assign_to_typed_ref(dasm_State **Dst, const zend_op *opline, - const zend_op_array *op_array, zend_uchar val_type, zend_jit_addr val_addr, zend_bool check_exception) @@ -5539,7 +5530,6 @@ static int zend_jit_assign_to_typed_ref(dasm_State **Dst, static int zend_jit_assign_to_variable(dasm_State **Dst, const zend_op *opline, - const zend_op_array *op_array, zend_jit_addr var_use_addr, zend_jit_addr var_addr, uint32_t var_info, @@ -5563,7 +5553,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, | IF_NOT_Z_TYPE, FCARG1a, IS_REFERENCE, >1 | // if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(variable_ptr)))) { | GET_Z_PTR FCARG1a, FCARG1a - if (!zend_jit_assign_to_typed_ref(Dst, opline, op_array, val_type, val_addr, check_exception)) { + if (!zend_jit_assign_to_typed_ref(Dst, opline, val_type, val_addr, check_exception)) { return 0; } | add FCARG1a, offsetof(zend_reference, val) @@ -5583,7 +5573,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, if (Z_REG(var_use_addr) == ZREG_FCARG1a) { | GET_ZVAL_PTR r0, var_use_addr | mov aword T1, r0 // save - if (!zend_jit_simple_assign(Dst, opline, op_array, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, in_cold, 0)) { + if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, in_cold, 0)) { return 0; } if (Z_REG(var_use_addr) == ZREG_FCARG1a) { @@ -5591,7 +5581,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, } } else { | GET_ZVAL_PTR FCARG1a, var_use_addr - if (!zend_jit_simple_assign(Dst, opline, op_array, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, in_cold, 1)) { + if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, in_cold, 1)) { return 0; } } @@ -5653,7 +5643,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, } } - if (!done && !zend_jit_simple_assign(Dst, opline, op_array, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, 0, 0)) { + if (!done && !zend_jit_simple_assign(Dst, opline, var_addr, var_info, var_def_info, val_type, val, val_addr, val_info, res_addr, 0, 0)) { return 0; } @@ -5662,7 +5652,7 @@ static int zend_jit_assign_to_variable(dasm_State **Dst, return 1; } -static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, int may_throw) +static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t val_info, int may_throw) { zend_jit_addr op2_addr, op3_addr, res_addr; @@ -5741,14 +5731,14 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze |.code | mov FCARG1a, r0 - if (!zend_jit_simple_assign(Dst, opline, op_array, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0, 0)) { + if (!zend_jit_simple_assign(Dst, opline, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0, 0)) { return 0; } } else { uint32_t var_info = zend_array_element_type(op1_info, opline->op1_type, 0, 0); zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0); - if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, 8, 8, NULL, NULL, NULL)) { + if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, NULL, NULL, NULL)) { return 0; } @@ -5762,7 +5752,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze var_info |= MAY_BE_RC1; } | // value = zend_assign_to_variable(variable_ptr, value, OP_DATA_TYPE); - if (!zend_jit_assign_to_variable(Dst, opline, op_array, var_addr, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0)) { + if (!zend_jit_assign_to_variable(Dst, opline, var_addr, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0)) { return 0; } } @@ -5844,7 +5834,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze } #endif - | FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, op_array, opline + | FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline } if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_ARRAY)) { @@ -5863,7 +5853,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze #endif |9: - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (may_throw) { zend_jit_check_exception(Dst); @@ -5872,7 +5862,7 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze return 1; } -static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, int may_throw) +static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t op1_data_info, zend_ssa_range *op1_data_range, int may_throw) { zend_jit_addr op2_addr, op3_addr, var_addr; @@ -5975,7 +5965,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const var_info |= MAY_BE_RC1; } - if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, 8, 8, NULL, NULL, NULL)) { + if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, NULL, NULL, NULL)) { return 0; } @@ -6015,7 +6005,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const case ZEND_SUB: case ZEND_MUL: case ZEND_DIV: - if (!zend_jit_math_helper(Dst, opline, opline->extended_value, op_array, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, 0, var_addr, var_def_info, var_info, + if (!zend_jit_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, 0, var_addr, var_def_info, var_info, 1 /* may overflow */, may_throw)) { return 0; } @@ -6026,7 +6016,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const case ZEND_SL: case ZEND_SR: case ZEND_MOD: - if (!zend_jit_long_math_helper(Dst, opline, opline->extended_value, op_array, + if (!zend_jit_long_math_helper(Dst, opline, opline->extended_value, IS_CV, opline->op1, var_addr, var_info, NULL, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, op1_data_range, @@ -6035,7 +6025,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const } break; case ZEND_CONCAT: - if (!zend_jit_concat_helper(Dst, opline, op_array, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, var_addr, op1_def_info, + if (!zend_jit_concat_helper(Dst, opline, IS_CV, opline->op1, var_addr, var_info, (opline+1)->op1_type, (opline+1)->op1, op3_addr, op1_data_info, var_addr, may_throw)) { return 0; } @@ -6093,7 +6083,7 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const return 1; } -static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, uint32_t op1_def_info, zend_ssa_range *op1_range, uint32_t op2_info, zend_ssa_range *op2_range, int may_overflow, int may_throw) +static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, uint32_t op1_def_info, zend_ssa_range *op1_range, uint32_t op2_info, zend_ssa_range *op2_range, int may_overflow, int may_throw) { zend_jit_addr op1_addr, op2_addr; @@ -6138,7 +6128,7 @@ static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, const zen case ZEND_SUB: case ZEND_MUL: case ZEND_DIV: - result = zend_jit_math_helper(Dst, opline, opline->extended_value, op_array, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->op1.var, op1_addr, op1_def_info, op1_info, may_overflow, may_throw); + result = zend_jit_math_helper(Dst, opline, opline->extended_value, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, opline->op1.var, op1_addr, op1_def_info, op1_info, may_overflow, may_throw); break; case ZEND_BW_OR: case ZEND_BW_AND: @@ -6146,13 +6136,13 @@ static int zend_jit_assign_op(dasm_State **Dst, const zend_op *opline, const zen case ZEND_SL: case ZEND_SR: case ZEND_MOD: - result = zend_jit_long_math_helper(Dst, opline, opline->extended_value, op_array, + result = zend_jit_long_math_helper(Dst, opline, opline->extended_value, opline->op1_type, opline->op1, op1_addr, op1_info, op1_range, opline->op2_type, opline->op2, op2_addr, op2_info, op2_range, opline->op1.var, op1_addr, op1_def_info, op1_info, may_throw); break; case ZEND_CONCAT: - result = zend_jit_concat_helper(Dst, opline, op_array, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, op1_addr, op1_def_info, may_throw); + result = zend_jit_concat_helper(Dst, opline, opline->op1_type, opline->op1, op1_addr, op1_info, opline->op2_type, opline->op2, op2_addr, op2_info, op1_addr, may_throw); break; default: ZEND_UNREACHABLE(); @@ -6928,7 +6918,7 @@ static int zend_jit_cmp_slow(dasm_State **Dst, const zend_op *opline, zend_jit_a return 1; } -static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_bool same_ops = (opline->op1_type == opline->op2_type) && (opline->op1.var == opline->op2.var); zend_bool has_slow; @@ -7133,9 +7123,9 @@ static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, const zend_op_a | add r4, 12 |.endif if (opline->opcode != ZEND_CASE) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 0, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline } - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (may_throw) { zend_jit_check_exception_undef_result(Dst, opline); } @@ -7153,7 +7143,7 @@ static int zend_jit_cmp(dasm_State **Dst, const zend_op *opline, const zend_op_a return 1; } -static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr res_addr, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { uint32_t identical_label = (uint32_t)-1; uint32_t not_identical_label = (uint32_t)-1; @@ -7310,8 +7300,8 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) { | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline - | FREE_OP opline->op2_type, opline->op2, op2_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline } if (smart_branch_opcode) { zend_jit_check_exception_undef_result(Dst, opline); @@ -7375,7 +7365,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen if (opline->op2_type == IS_VAR && (op2_info & MAY_BE_REF)) { | jne >8 | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op2_type, opline->op2, op2_info, 1, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline zend_jit_check_exception_undef_result(Dst, opline); if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { | jmp &exit_addr @@ -7405,7 +7395,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen if ((opline->op2_type & (IS_VAR|IS_TMP_VAR)) && (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op2_type, opline->op2, op2_info, 1, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline zend_jit_check_exception_undef_result(Dst, opline); } if (exit_addr) { @@ -7423,7 +7413,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen if (opline->op1_type == IS_VAR && (op1_info & MAY_BE_REF)) { | jne >8 | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline zend_jit_check_exception_undef_result(Dst, opline); if (exit_addr && smart_branch_opcode == ZEND_JMPNZ) { | jmp &exit_addr @@ -7453,7 +7443,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen if ((opline->op1_type & (IS_VAR|IS_TMP_VAR)) && (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline zend_jit_check_exception_undef_result(Dst, opline); } if (smart_branch_opcode) { @@ -7479,8 +7469,8 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen (op2_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)))) { | mov aword T1, r0 // save | SAVE_VALID_OPLINE opline, r0 - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline - | FREE_OP opline->op2_type, opline->op2, op2_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 1, opline zend_jit_check_exception_undef_result(Dst, opline); | mov r0, aword T1 // restore } @@ -7519,7 +7509,7 @@ static int zend_jit_identical(dasm_State **Dst, const zend_op *opline, const zen return 1; } -static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr res_addr, uint32_t target_label, uint32_t target_label2, int may_throw, zend_uchar branch_opcode, const void *exit_addr) +static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr res_addr, uint32_t target_label, uint32_t target_label2, int may_throw, zend_uchar branch_opcode, const void *exit_addr) { uint32_t true_label = -1; uint32_t false_label = -1; @@ -7984,7 +7974,7 @@ static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, const z return 1; } -static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr, uint32_t res_info, zend_jit_addr res_addr) +static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_jit_addr op1_def_addr, uint32_t res_info, zend_jit_addr res_addr) { if (op1_addr != op1_def_addr) { if (!zend_jit_update_regs(Dst, op1_addr, op1_def_addr, op1_info)) { @@ -7995,7 +7985,7 @@ static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, const zen } } - if (!zend_jit_simple_assign(Dst, opline, op_array, res_addr, -1, -1, opline->op1_type, opline->op1, op1_addr, op1_info, 0, 0, 0)) { + if (!zend_jit_simple_assign(Dst, opline, res_addr, -1, -1, opline->op1_type, opline->op1, op1_addr, op1_info, 0, 0, 0)) { return 0; } if (!zend_jit_store_var_if_necessary(Dst, opline->result.var, res_addr, res_info)) { @@ -8004,7 +7994,7 @@ static int zend_jit_qm_assign(dasm_State **Dst, const zend_op *opline, const zen return 1; } -static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_use_addr, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr op2_def_addr, uint32_t res_info, zend_jit_addr res_addr, int may_throw) +static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_use_addr, uint32_t op1_def_info, zend_jit_addr op1_addr, uint32_t op2_info, zend_jit_addr op2_addr, zend_jit_addr op2_def_addr, uint32_t res_info, zend_jit_addr res_addr, int may_throw) { ZEND_ASSERT(opline->op1_type == IS_CV); @@ -8024,7 +8014,7 @@ static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, const zend_o /* Force type update */ op1_info |= MAY_BE_UNDEF; } - if (!zend_jit_assign_to_variable(Dst, opline, op_array, op1_use_addr, op1_addr, op1_info, op1_def_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, + if (!zend_jit_assign_to_variable(Dst, opline, op1_use_addr, op1_addr, op1_info, op1_def_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr, may_throw)) { return 0; } @@ -8040,7 +8030,7 @@ static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, const zend_o return 1; } -static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_function *func) +static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, zend_function *func) { uint32_t used_stack; @@ -8081,7 +8071,7 @@ static int zend_jit_push_call_frame(dasm_State **Dst, const zend_op *opline, con } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -8318,7 +8308,7 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons } } -static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, const zend_function *func, const zend_op *to_opline) +static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_function *func, const zend_op *to_opline) { int32_t exit_point; const void *exit_addr; @@ -8338,7 +8328,7 @@ static int zend_jit_init_fcall_guard(dasm_State **Dst, const zend_op *opline, co return 0; } - exit_point = zend_jit_trace_get_exit_point(opline, to_opline, NULL, ZEND_JIT_EXIT_POLYMORPHISM); + exit_point = zend_jit_trace_get_exit_point(to_opline, ZEND_JIT_EXIT_POLYMORPHISM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -8465,7 +8455,7 @@ static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t | mov r1, EX->run_time_cache | mov aword [r1 + opline->result.num], r0 if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -8516,7 +8506,7 @@ static int zend_jit_init_fcall(dasm_State **Dst, const zend_op *opline, uint32_t |3: } - if (!zend_jit_push_call_frame(Dst, opline, op_array, func)) { + if (!zend_jit_push_call_frame(Dst, opline, func)) { return 0; } @@ -8654,7 +8644,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend if (opline->opcode == ZEND_DO_FCALL) { if (!func) { if (trace) { - uint32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + uint32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -8972,7 +8962,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend if (opline->opcode == ZEND_DO_FCALL_BY_NAME) { if (!func) { if (trace) { - uint32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + uint32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -9020,7 +9010,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend | // EG(current_execute_data) = execute_data; | MEM_OP2_1_ZTS mov, aword, executor_globals, current_execute_data, RX, r1 - zend_jit_reset_opline(Dst, NULL); + zend_jit_reset_opline(); | // fbc->internal_function.handler(call, ret); | mov FCARG1a, RX @@ -9119,7 +9109,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend // TODO: Can we avoid checking for interrupts after each call ??? if (trace && last_valid_opline != opline) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline + 1, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline + 1, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -9148,7 +9138,7 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend return 1; } -static int zend_jit_send_val(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr) +static int zend_jit_send_val(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr) { uint32_t arg_num = opline->op2.num; zend_jit_addr arg_addr; @@ -9175,7 +9165,7 @@ static int zend_jit_send_val(dasm_State **Dst, const zend_op *opline, const zend return 0; } } else if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -9304,7 +9294,7 @@ static int zend_jit_send_ref(dasm_State **Dst, const zend_op *opline, const zend } |6: - | FREE_OP opline->op1_type, opline->op1, op1_info, !cold, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, !cold, opline |7: return 1; @@ -9366,7 +9356,7 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend /* Don't generate code that always throws exception */ return 0; } else { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -9396,7 +9386,7 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend | test dword [r0 + offsetof(zend_function, quick_arg_flags)], mask | jnz >7 if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -9468,7 +9458,7 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend | je >7 } if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -9533,7 +9523,7 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, const zend return 1; } -static int zend_jit_check_func_arg(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array) +static int zend_jit_check_func_arg(dasm_State **Dst, const zend_op *opline) { uint32_t arg_num = opline->op2.num; @@ -9642,7 +9632,7 @@ static int zend_jit_smart_false(dasm_State **Dst, const zend_op *opline, int jmp return 1; } -static int zend_jit_defined(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_defined(dasm_State **Dst, const zend_op *opline, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { uint32_t defined_label = (uint32_t)-1; uint32_t undefined_label = (uint32_t)-1; @@ -9738,7 +9728,7 @@ static int zend_jit_defined(dasm_State **Dst, const zend_op *opline, const zend_ return 1; } -static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { uint32_t mask; zend_uchar type; @@ -9799,7 +9789,7 @@ static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const ze } if (!(op1_info & MAY_BE_GUARD) && !(op1_info & (MAY_BE_ANY - mask))) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (exit_addr) { if (smart_branch_opcode == ZEND_JMPNZ) { | jmp &exit_addr @@ -9808,7 +9798,7 @@ static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const ze return 0; } } else if (!(op1_info & MAY_BE_GUARD) && !(op1_info & mask)) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline if (exit_addr) { if (smart_branch_opcode == ZEND_JMPZ) { | jmp &exit_addr @@ -9896,7 +9886,7 @@ static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const ze | movzx eax, al | add eax, 2 | SET_ZVAL_TYPE_INFO res_addr, eax - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline } } else { if (smart_branch_opcode && @@ -9971,7 +9961,7 @@ static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const ze | movzx eax, al | add eax, 2 | SET_ZVAL_TYPE_INFO res_addr, eax - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline } } } @@ -9982,7 +9972,7 @@ static int zend_jit_type_check(dasm_State **Dst, const zend_op *opline, const ze return 1; } -static uint32_t zend_ssa_cv_info(const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, uint32_t var) +static uint32_t zend_ssa_cv_info(const zend_op_array *op_array, zend_ssa *ssa, uint32_t var) { uint32_t j, info; @@ -10028,7 +10018,7 @@ static int zend_jit_leave_frame(dasm_State **Dst) return 1; } -static int zend_jit_free_cv(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t info, uint32_t var) +static int zend_jit_free_cv(dasm_State **Dst, uint32_t info, uint32_t var) { if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { uint32_t offset = EX_NUM_TO_VAR(var); @@ -10037,7 +10027,7 @@ static int zend_jit_free_cv(dasm_State **Dst, const zend_op *opline, const zend_ return 1; } -static int zend_jit_free_op(dasm_State **Dst, const zend_op *opline, /*const zend_op_array *op_array, */uint32_t info, uint32_t var_offset) +static int zend_jit_free_op(dasm_State **Dst, const zend_op *opline, uint32_t info, uint32_t var_offset) { if (info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { | ZVAL_PTR_DTOR ZEND_ADDR_MEM_ZVAL(ZREG_FP, var_offset), info, 0, 1, opline @@ -10045,7 +10035,7 @@ static int zend_jit_free_op(dasm_State **Dst, const zend_op *opline, /*const zen return 1; } -static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_jit_trace_rec *trace, zend_jit_trace_info *trace_info, int may_throw) +static int zend_jit_leave_func(dasm_State **Dst, const zend_op_array *op_array, zend_jit_trace_rec *trace, zend_jit_trace_info *trace_info, int may_throw) { /* ZEND_CALL_FAKE_CLOSURE handled on slow path to eliminate check for ZEND_CALL_CLOSURE on fast path */ | mov FCARG1d, dword [FP + offsetof(zend_execute_data, This.u1.type_info)] @@ -10114,7 +10104,7 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const ze if (trace) { if (trace->op != ZEND_JIT_TRACE_END && (JIT_G(current_frame) && !TRACE_FRAME_IS_UNKNOWN_RETURN(JIT_G(current_frame)))) { - zend_jit_reset_opline(Dst, NULL); + zend_jit_reset_opline(); } else { | LOAD_OPLINE | ADD_IP sizeof(zend_op) @@ -10145,7 +10135,7 @@ static int zend_jit_leave_func(dasm_State **Dst, const zend_op *opline, const ze ZEND_ASSERT(next_opline != NULL); current_frame = JIT_G(current_frame); JIT_G(current_frame) = NULL; - exit_point = zend_jit_trace_get_exit_point(opline, NULL, trace, 0); + exit_point = zend_jit_trace_get_exit_point(NULL, 0); JIT_G(current_frame) = current_frame; exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -10441,7 +10431,7 @@ static zend_bool zend_jit_may_avoid_refcounting(const zend_op *opline) return 0; } -static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t res_info, zend_jit_addr res_addr, int may_throw) +static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, zend_ssa *ssa, const zend_ssa_op *ssa_op, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, uint32_t res_info, zend_jit_addr res_addr, int may_throw) { zend_jit_addr orig_op1_addr, op2_addr; const void *exit_addr = NULL; @@ -10453,7 +10443,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons if (opline->opcode != ZEND_FETCH_DIM_IS && JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { return 0; @@ -10494,7 +10484,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0); - exit_point = zend_jit_trace_get_exit_point(opline, opline+1, NULL, flags); + exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); res_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!res_exit_addr) { @@ -10509,7 +10499,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_NULL); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_NULL); - exit_point = zend_jit_trace_get_exit_point(opline, opline+1, NULL, flags); + exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); not_found_exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!not_found_exit_addr) { @@ -10533,7 +10523,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons } } | GET_ZVAL_LVAL ZREG_FCARG1a, op1_addr - if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, 8, 9, NULL, not_found_exit_addr, exit_addr)) { + if (!zend_jit_fetch_dimension_address_inner(Dst, opline, (opline->opcode != ZEND_FETCH_DIM_IS) ? BP_VAR_R : BP_VAR_IS, op1_info, op2_info, NULL, not_found_exit_addr, exit_addr)) { return 0; } } @@ -10712,9 +10702,9 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons } #endif - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (!(op1_info & AVOID_REFCOUNTING)) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 0, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline } if (may_throw) { @@ -10726,7 +10716,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst, const zend_op *opline, cons return 1; } -static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, uint32_t op2_info, int may_throw, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_jit_addr op2_addr, res_addr; @@ -10761,7 +10751,7 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, c not_found_exit_addr = exit_addr; } } - if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, 8, 9, found_exit_addr, not_found_exit_addr, NULL)) { + if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_JIT_IS, op1_info, op2_info, found_exit_addr, not_found_exit_addr, NULL)) { return 0; } @@ -10820,9 +10810,9 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, c #endif |8: - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (!(op1_info & AVOID_REFCOUNTING)) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 0, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline } if (may_throw) { if (!zend_jit_check_exception_undef_result(Dst, opline)) { @@ -10856,9 +10846,9 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, c } |9: // not found - | FREE_OP opline->op2_type, opline->op2, op2_info, 0, op_array, opline + | FREE_OP opline->op2_type, opline->op2, op2_info, 0, opline if (!(op1_info & AVOID_REFCOUNTING)) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 0, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 0, opline } if (may_throw) { if (!zend_jit_check_exception_undef_result(Dst, opline)) { @@ -10892,7 +10882,7 @@ static int zend_jit_isset_isempty_dim(dasm_State **Dst, const zend_op *opline, c return 1; } -static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info) +static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { zend_jit_addr op1_addr = OP1_ADDR(); zend_string *varname = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -11060,7 +11050,7 @@ static int zend_jit_recv(dasm_State **Dst, const zend_op *opline, const zend_op_ if (arg_info || (opline+1)->opcode != ZEND_RECV) { | cmp dword EX->This.u2.num_args, arg_num if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -11260,7 +11250,7 @@ static zend_bool zend_may_be_dynamic_property(zend_class_entry *ce, zend_string static int zend_jit_class_guard(dasm_State **Dst, const zend_op *opline, zend_class_entry *ce) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -11320,7 +11310,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen } if (op1_info & ((MAY_BE_UNDEF|MAY_BE_ANY)- MAY_BE_OBJECT)) { if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -11403,7 +11393,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen prop_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, prop_info->offset); | mov edx, dword [FCARG1a + prop_info->offset + 8] if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -11497,7 +11487,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var)); SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN); SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0); - exit_point = zend_jit_trace_get_exit_point(opline, opline+1, NULL, flags); + exit_point = zend_jit_trace_get_exit_point(opline+1, flags); SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -11615,7 +11605,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen | EXT_CALL zend_jit_extract_helper, r0 |1: } else if (!(op1_info & AVOID_REFCOUNTING)) { - | FREE_OP opline->op1_type, opline->op1, op1_info, 1, op_array, opline + | FREE_OP opline->op1_type, opline->op1, op1_info, 1, opline } } @@ -11635,7 +11625,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen return 1; } -static int zend_jit_free(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, int may_throw) +static int zend_jit_free(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, int may_throw) { zend_jit_addr op1_addr = OP1_ADDR(); @@ -11664,7 +11654,7 @@ static int zend_jit_free(dasm_State **Dst, const zend_op *opline, const zend_op_ return 1; } -static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info) +static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { if (opline->op1_type == IS_CONST) { zval *zv; @@ -11722,7 +11712,7 @@ static int zend_jit_echo(dasm_State **Dst, const zend_op *opline, const zend_op_ return 1; } -static int zend_jit_strlen(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info) +static int zend_jit_strlen(dasm_State **Dst, const zend_op *opline, uint32_t op1_info) { zend_jit_addr res_addr = RES_ADDR(); @@ -11771,7 +11761,7 @@ static int zend_jit_fetch_this(dasm_State **Dst, const zend_op *opline, const ze if (!JIT_G(current_frame) || !TRACE_FRAME_IS_THIS_CHECKED(JIT_G(current_frame))) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, ZEND_JIT_EXIT_TO_VM); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, ZEND_JIT_EXIT_TO_VM); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); | cmp byte EX->This.u1.v.type, IS_OBJECT @@ -11876,11 +11866,11 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o if (next_opline) { if (next_opline != opline + 1) { - exit_point = zend_jit_trace_get_exit_point(opline, opline + 1, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(opline + 1, 0); fallback_label = zend_jit_trace_get_exit_addr(exit_point); } if (next_opline != default_opline) { - exit_point = zend_jit_trace_get_exit_point(opline, default_opline, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(default_opline, 0); default_label = zend_jit_trace_get_exit_addr(exit_point); } } @@ -11964,7 +11954,7 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o } else if (next_opline == target) { | .aword >3 } else { - exit_point = zend_jit_trace_get_exit_point(opline, target, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(target, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); | .aword &exit_addr } @@ -12018,7 +12008,7 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o } else if (next_opline == target) { | .aword >3 } else { - exit_point = zend_jit_trace_get_exit_point(opline, target, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(target, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); | .aword &exit_addr } @@ -12103,7 +12093,7 @@ static int zend_jit_switch(dasm_State **Dst, const zend_op *opline, const zend_o } else if (next_opline == target) { | .aword >3 } else { - exit_point = zend_jit_trace_get_exit_point(opline, target, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(target, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); | .aword &exit_addr } @@ -12174,7 +12164,7 @@ static zend_bool zend_jit_verify_return_type(dasm_State **Dst, const zend_op *op return 1; } -static int zend_jit_isset_isempty_cv(dasm_State **Dst, const zend_op *opline, const zend_op_array *op_array, uint32_t op1_info, zend_jit_addr op1_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) +static int zend_jit_isset_isempty_cv(dasm_State **Dst, const zend_op *opline, uint32_t op1_info, zend_jit_addr op1_addr, zend_uchar smart_branch_opcode, uint32_t target_label, uint32_t target_label2, const void *exit_addr) { zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); @@ -12245,7 +12235,7 @@ static int zend_jit_isset_isempty_cv(dasm_State **Dst, const zend_op *opline, co static zend_bool zend_jit_noref_guard(dasm_State **Dst, const zend_op *opline, zend_jit_addr var_addr) { - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -12260,7 +12250,7 @@ static zend_bool zend_jit_fetch_reference(dasm_State **Dst, const zend_op *oplin { zend_jit_addr var_addr = *var_addr_ptr; uint32_t var_info = *var_info_ptr; - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -12301,7 +12291,7 @@ static zend_bool zend_jit_fetch_indirect_var(dasm_State **Dst, const zend_op *op { zend_jit_addr var_addr = *var_addr_ptr; uint32_t var_info = *var_info_ptr; - int32_t exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + int32_t exit_point = zend_jit_trace_get_exit_point(opline, 0); const void *exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) { @@ -12317,7 +12307,7 @@ static zend_bool zend_jit_fetch_indirect_var(dasm_State **Dst, const zend_op *op if (!(var_type & IS_TRACE_REFERENCE) && var_type != IS_UNKNOWN && (var_info & (MAY_BE_ANY|MAY_BE_UNDEF)) != (1 << var_type)) { - exit_point = zend_jit_trace_get_exit_point(opline, opline, NULL, 0); + exit_point = zend_jit_trace_get_exit_point(opline, 0); exit_addr = zend_jit_trace_get_exit_addr(exit_point); if (!exit_addr) {