summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--target-sparc/cpu.h1
-rw-r--r--target-sparc/translate.c6
2 files changed, 5 insertions, 2 deletions
diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
index 7fbc19d142..a3d762f7f9 100644
--- a/target-sparc/cpu.h
+++ b/target-sparc/cpu.h
@@ -89,6 +89,7 @@
 #if defined(TARGET_SPARC64)
 #define PS_IG    (1<<11)
 #define PS_MG    (1<<10)
+#define PS_RMO   (1<<7)
 #define PS_RED   (1<<5)
 #define PS_PEF   (1<<4)
 #define PS_AM    (1<<3)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index c69ffd9afd..a2f3d5bd34 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -3315,8 +3315,10 @@ void cpu_reset(CPUSPARCState *env)
 #if defined(CONFIG_USER_ONLY)
     env->user_mode_only = 1;
 #ifdef TARGET_SPARC64
-    env->cleanwin = NWINDOWS - 1;
-    env->cansave = NWINDOWS - 1;
+    env->cleanwin = NWINDOWS - 2;
+    env->cansave = NWINDOWS - 2;
+    env->pstate = PS_RMO | PS_PEF | PS_IE;
+    env->asi = 0x82; // Primary no-fault
 #endif
 #else
     env->psret = 0;