From 9791e7e91819468fa4009809fd340575f3fd3d12 Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Mon, 11 Feb 2019 02:00:06 -0800 Subject: [PATCH] target/xtensa: get rid of gen_callw[i] Merge gen_callwi and gen_callw into their only users, translate_callw and translate_callxw. Extract jump slot adjustment logic into a separate function and use it in gen_jumpi and translate_callw. Signed-off-by: Max Filippov --- target/xtensa/translate.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index 6e4f0ad44c..62283cd1cc 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -387,13 +387,19 @@ static void gen_jump(DisasContext *dc, TCGv dest) gen_jump_slot(dc, dest, -1); } -static void gen_jumpi(DisasContext *dc, uint32_t dest, int slot) +static int adjust_jump_slot(DisasContext *dc, uint32_t dest, int slot) { - TCGv_i32 tmp = tcg_const_i32(dest); if (((dc->base.pc_first ^ dest) & TARGET_PAGE_MASK) != 0) { - slot = -1; + return -1; + } else { + return slot; } - gen_jump_slot(dc, tmp, slot); +} + +static void gen_jumpi(DisasContext *dc, uint32_t dest, int slot) +{ + TCGv_i32 tmp = tcg_const_i32(dest); + gen_jump_slot(dc, tmp, adjust_jump_slot(dc, dest, slot)); tcg_temp_free(tmp); } @@ -410,21 +416,6 @@ static void gen_callw_slot(DisasContext *dc, int callinc, TCGv_i32 dest, gen_jump_slot(dc, dest, slot); } -static void gen_callw(DisasContext *dc, int callinc, TCGv_i32 dest) -{ - gen_callw_slot(dc, callinc, dest, -1); -} - -static void gen_callwi(DisasContext *dc, int callinc, uint32_t dest, int slot) -{ - TCGv_i32 tmp = tcg_const_i32(dest); - if (((dc->base.pc_first ^ dest) & TARGET_PAGE_MASK) != 0) { - slot = -1; - } - gen_callw_slot(dc, callinc, tmp, slot); - tcg_temp_free(tmp); -} - static bool gen_check_loop_end(DisasContext *dc, int slot) { if (dc->base.pc_next == dc->lend) { @@ -1477,7 +1468,9 @@ static void translate_call0(DisasContext *dc, const uint32_t arg[], static void translate_callw(DisasContext *dc, const uint32_t arg[], const uint32_t par[]) { - gen_callwi(dc, par[0], arg[0], 0); + TCGv_i32 tmp = tcg_const_i32(arg[0]); + gen_callw_slot(dc, par[0], tmp, adjust_jump_slot(dc, arg[0], 0)); + tcg_temp_free(tmp); } static void translate_callx0(DisasContext *dc, const uint32_t arg[], @@ -1496,7 +1489,7 @@ static void translate_callxw(DisasContext *dc, const uint32_t arg[], TCGv_i32 tmp = tcg_temp_new_i32(); tcg_gen_mov_i32(tmp, cpu_R[arg[0]]); - gen_callw(dc, par[0], tmp); + gen_callw_slot(dc, par[0], tmp, -1); tcg_temp_free(tmp); } -- 2.11.0