BRK is equivalent to INT #0, so route both instructions through the same trap helper.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/rx/helper.h | 3 +-- target/rx/op_helper.c | 7 +------ target/rx/translate.c | 21 ++++++++++----------- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/target/rx/helper.h b/target/rx/helper.h index 8cc38b0cb71..f3897ce7619 100644 --- a/target/rx/helper.h +++ b/target/rx/helper.h @@ -2,8 +2,7 @@ DEF_HELPER_1(raise_illegal_instruction, noreturn, env) DEF_HELPER_1(raise_access_fault, noreturn, env) DEF_HELPER_1(raise_privilege_violation, noreturn, env) DEF_HELPER_1(wait, noreturn, env) -DEF_HELPER_2(rxint, noreturn, env, i32) -DEF_HELPER_1(rxbrk, noreturn, env) +DEF_HELPER_2(trap, noreturn, env, i32) DEF_HELPER_3(fadd, f32, env, f32, f32) DEF_HELPER_3(fsub, f32, env, f32, f32) DEF_HELPER_3(fmul, f32, env, f32, f32) diff --git a/target/rx/op_helper.c b/target/rx/op_helper.c index 36df7d377e5..6782912247e 100644 --- a/target/rx/op_helper.c +++ b/target/rx/op_helper.c @@ -455,12 +455,7 @@ G_NORETURN void helper_wait(CPURXState *env) raise_exception(env, EXCP_HLT, 0); } -G_NORETURN void helper_rxint(CPURXState *env, uint32_t vec) +G_NORETURN void helper_trap(CPURXState *env, uint32_t vec) { raise_exception(env, 0x100 + vec, 0); } - -G_NORETURN void helper_rxbrk(CPURXState *env) -{ - raise_exception(env, 0x100, 0); -} diff --git a/target/rx/translate.c b/target/rx/translate.c index 132d495710c..d0910fbf8e7 100644 --- a/target/rx/translate.c +++ b/target/rx/translate.c @@ -2170,26 +2170,25 @@ static bool trans_RTE(DisasContext *ctx, arg_RTE *a) return true; } +static bool do_trap(DisasContext *ctx, uint8_t vec) +{ + tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next); + gen_helper_trap(tcg_env, tcg_constant_i32(vec)); + ctx->base.is_jmp = DISAS_NORETURN; + return true; +} + /* brk */ static bool trans_BRK(DisasContext *ctx, arg_BRK *a) { - tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next); - gen_helper_rxbrk(tcg_env); - ctx->base.is_jmp = DISAS_NORETURN; - return true; + return do_trap(ctx, 0); } /* int #imm */ static bool trans_INT(DisasContext *ctx, arg_INT *a) { - TCGv_i32 vec; - tcg_debug_assert(a->imm < 0x100); - vec = tcg_constant_i32(a->imm); - tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next); - gen_helper_rxint(tcg_env, vec); - ctx->base.is_jmp = DISAS_NORETURN; - return true; + return do_trap(ctx, a->imm); } /* wait */ -- 2.53.0
