]> git.proxmox.com Git - mirror_qemu.git/blobdiff - target-sparc/op.c
SPARC merge
[mirror_qemu.git] / target-sparc / op.c
index 042fd6199a101082221bdd2a0918b91cf3455755..f8cf2f893465820269262d05611679b417beeb7e 100644 (file)
@@ -524,13 +524,7 @@ void OPPROTO op_rdpsr(void)
 
 void OPPROTO op_wrpsr(void)
 {
-    int cwp;
-    env->psr = T0 & ~PSR_ICC;
-    env->psrs = (T0 & PSR_S)? 1 : 0;
-    env->psrps = (T0 & PSR_PS)? 1 : 0;
-    env->psret = (T0 & PSR_ET)? 1 : 0;
-    cwp = (T0 & PSR_CWP) & (NWINDOWS - 1);
-    set_cwp(cwp);
+    PUT_PSR(env,T0);
     FORCE_RET();
 }
 
@@ -602,10 +596,27 @@ void OPPROTO op_trapcc_T0(void)
     FORCE_RET();
 }
 
-void OPPROTO op_debug(void)
+void OPPROTO op_trap_ifnofpu(void)
+{
+    if (!env->psref) {
+        env->exception_index = TT_NFPU_INSN;
+        cpu_loop_exit();
+    }
+    FORCE_RET();
+}
+
+void OPPROTO op_fpexception_im(void)
 {
-    env->exception_index = EXCP_DEBUG;
+    env->exception_index = TT_FP_EXCP;
+    env->fsr &= ~FSR_FTT_MASK;
+    env->fsr |= PARAM1;
     cpu_loop_exit();
+    FORCE_RET();
+}
+
+void OPPROTO op_debug(void)
+{
+    helper_debug();
 }
 
 void OPPROTO op_exit_tb(void)
@@ -932,20 +943,32 @@ void OPPROTO op_fcmpd(void)
     do_fcmpd();
 }
 
+#ifdef USE_INT_TO_FLOAT_HELPERS
 void OPPROTO op_fitos(void)
 {
-    FT0 = (float) *((int32_t *)&FT1);
+    do_fitos();
 }
 
-void OPPROTO op_fdtos(void)
+void OPPROTO op_fitod(void)
 {
-    FT0 = (float) DT1;
+    do_fitod();
+}
+#else
+void OPPROTO op_fitos(void)
+{
+    FT0 = (float) *((int32_t *)&FT1);
 }
 
 void OPPROTO op_fitod(void)
 {
     DT0 = (double) *((int32_t *)&FT1);
 }
+#endif
+
+void OPPROTO op_fdtos(void)
+{
+    FT0 = (float) DT1;
+}
 
 void OPPROTO op_fstod(void)
 {