On Tue, 29 Sep 2026 21:08:37 +0900, Philippe Mathieu-Daudé wrote: > > 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 >
Reviewed-by: Yoshinori Sato <[email protected]> -- Yosinori Sato
