@@ -1425,7 +1425,7 @@ static void handle_msr_i(DisasContext *s, uint32_t insn,
tcg_temp_free_i32(tcg_op);
/* For DAIFClear, exit the cpu loop to re-evaluate pending IRQs. */
gen_a64_set_pc_im(s->pc);
- s->is_jmp = (op == 0x1f ? DISAS_EXIT : DISAS_JUMP);
+ s->is_jmp = (op == 0x1f ? DISAS_UPDATE : DISAS_JUMP);
break;
}
default:
@@ -11394,7 +11394,6 @@ void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb)
tcg_gen_exit_tb(0);
break;
case DISAS_UPDATE:
- case DISAS_EXIT:
default:
tcg_gen_exit_tb(0);
break;
@@ -1194,11 +1194,13 @@ static void gen_exception_insn(DisasContext *s, int offset, int excp,
s->is_jmp = DISAS_EXC;
}
-/* Force a TB lookup after an instruction that changes the CPU state. */
+/* Force a TB lookup after an instruction that changes the CPU state.
+ * (other than just the PC)
+ */
static inline void gen_lookup_tb(DisasContext *s)
{
tcg_gen_movi_i32(cpu_R[15], s->pc & ~1);
- s->is_jmp = DISAS_EXIT;
+ s->is_jmp = DISAS_UPDATE;
}
static inline void gen_hlt(DisasContext *s, int imm)
@@ -139,10 +139,6 @@ static void disas_set_insn_syndrome(DisasContext *s, uint32_t syn)
* custom end-of-TB code)
*/
#define DISAS_BX_EXCRET 11
-/* For instructions which want an immediate exit to the main loop,
- * as opposed to attempting to use lookup_and_goto_ptr.
- */
-#define DISAS_EXIT 12
#ifdef TARGET_AARCH64
void a64_translate_init(void);
We already have an exit condition that declares we should exit to the run-loop because wider CPU state changes have been made. Use DISAS_UPDATE and kill the architecture specific DISAS_EXIT. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- target/arm/translate-a64.c | 3 +-- target/arm/translate.c | 6 ++++-- target/arm/translate.h | 4 ---- 3 files changed, 5 insertions(+), 8 deletions(-) -- 2.13.0