Exit to cpu loop so we reevaluate cpu_arm_hw_interrupts.
Tested-by: Emilio G. Cota <cota@braap.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <rth@twiddle.net>
gen_helper_msr_i_pstate(cpu_env, tcg_op, tcg_imm);
tcg_temp_free_i32(tcg_imm);
tcg_temp_free_i32(tcg_op);
- s->is_jmp = DISAS_UPDATE;
+ /* 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);
break;
}
default:
case DISAS_JUMP:
tcg_gen_lookup_and_goto_ptr(cpu_pc);
break;
+ case DISAS_EXIT:
+ tcg_gen_exit_tb(0);
+ break;
case DISAS_TB_JUMP:
case DISAS_EXC:
case DISAS_SWI: