summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--target-sparc/op.c9
-rw-r--r--target-sparc/translate.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/target-sparc/op.c b/target-sparc/op.c
index 7ea209ea86..1ec15d28b1 100644
--- a/target-sparc/op.c
+++ b/target-sparc/op.c
@@ -844,6 +844,15 @@ void OPPROTO op_wrpsr(void)
     FORCE_RET();
 }
 
+void OPPROTO op_wrwim(void)
+{
+#if NWINDOWS == 32
+    env->wim = T0;
+#else
+    env->wim = T0 & ((1 << NWINDOWS) - 1);
+#endif
+}
+
 void OPPROTO op_rett(void)
 {
     helper_rett();
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index a522d778be..455dd171e4 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -2005,7 +2005,7 @@ static void disas_sparc_insn(DisasContext * dc)
 				goto illegal_insn;
 			    }
 #else
-			    gen_op_movl_env_T0(offsetof(CPUSPARCState, wim));
+			    gen_op_wrwim();
 #endif
                         }
                         break;