Commit cb4add33 authored by Richard Henderson's avatar Richard Henderson Committed by Laurent Vivier
Browse files

target/m68k: Use DISAS_NORETURN for exceptions



The raise_exception helper does not return.  Do not generate
any code following that.

Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Message-Id: <20180512050250.12774-2-richard.henderson@linaro.org>
Signed-off-by: default avatarLaurent Vivier <laurent@vivier.eu>
parent 0d2fa03d
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -291,18 +291,18 @@ static void gen_jmp(DisasContext *s, TCGv dest)
    s->is_jmp = DISAS_JUMP;
}

static void gen_raise_exception(int nr)
static void gen_exception(DisasContext *s, uint32_t dest, int nr)
{
    TCGv_i32 tmp = tcg_const_i32(nr);
    TCGv_i32 tmp;

    update_cc_op(s);
    tcg_gen_movi_i32(QREG_PC, dest);

    tmp = tcg_const_i32(nr);
    gen_helper_raise_exception(cpu_env, tmp);
    tcg_temp_free_i32(tmp);
}

static void gen_exception(DisasContext *s, uint32_t where, int nr)
{
    gen_jmp_im(s, where);
    gen_raise_exception(nr);
    s->is_jmp = DISAS_NORETURN;
}

static inline void gen_addr_fault(DisasContext *s)
@@ -6106,7 +6106,6 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb)

        if (unlikely(cpu_breakpoint_test(cs, dc->pc, BP_ANY))) {
            gen_exception(dc, dc->pc, EXCP_DEBUG);
            dc->is_jmp = DISAS_JUMP;
            /* The address covered by the breakpoint must be included in
               [tb->pc, tb->pc + tb->size) in order to for it to be
               properly cleared -- thus we increment the PC here so that
@@ -6150,6 +6149,7 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb)
            tcg_gen_exit_tb(NULL, 0);
            break;
        case DISAS_TB_JUMP:
        case DISAS_NORETURN:
            /* nothing more to generate */
            break;
        }