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

Reply via email to