Signed-off-by: Serge Vakulenko <se...@vak.ru>
---
 target-mips/op_helper.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 2a9ddff..1b7caeb 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -22,6 +22,7 @@
 #include "exec/helper-proto.h"
 #include "exec/cpu_ldst.h"
 #include "sysemu/kvm.h"
+#include "sysemu/sysemu.h"

 #ifndef CONFIG_USER_ONLY
 static inline void cpu_mips_tlb_flush (CPUMIPSState *env, int flush_global);
@@ -2235,6 +2236,12 @@ void helper_wait(CPUMIPSState *env)
 {
     CPUState *cs = CPU(mips_env_get_cpu(env));

+#ifndef CONFIG_USER_ONLY
+    if (!(env->CP0_Status & (1 << CP0St_IE))) {
+        /* WAIT instruction with interrupts disabled - halt the simulation. */
+        qemu_system_shutdown_request();
+    }
+#endif
     cs->halted = 1;
     cpu_reset_interrupt(cs, CPU_INTERRUPT_WAKE);
     helper_raise_exception(env, EXCP_HLT);
--
1.9.1

Reply via email to