@@ -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)
@@ -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);
-}
@@ -2170,26 +2170,25 @@ static bool trans_RTE(DisasContext *ctx, arg_RTE *a)
return true;
}
-/* brk */
-static bool trans_BRK(DisasContext *ctx, arg_BRK *a)
+static bool do_trap(DisasContext *ctx, uint8_t vec)
{
tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next);
- gen_helper_rxbrk(tcg_env);
+ 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)
+{
+ 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 */