]> Git Repo - qemu.git/commitdiff
target-mips: fix 64-bit FPU config for user-mode emulation
authorPetar Jovanovic <[email protected]>
Fri, 29 Nov 2013 16:27:42 +0000 (17:27 +0100)
committerAurelien Jarno <[email protected]>
Mon, 9 Dec 2013 15:41:23 +0000 (16:41 +0100)
FR bit should be initialized to 1 for MIPS64, under condition that this
bit is writable and that CPU has an FPU unit. It should be initialized to
zero for MIPS32.
This fixes different MIPS32 issues with FPU instructions whose behaviour
defaulted to 64-bit FPU mode.

Signed-off-by: Petar Jovanovic <[email protected]>
Signed-off-by: Aurelien Jarno <[email protected]>
target-mips/translate.c

index 67f326b20511db67021184528304132fdf840369..e30273438a9cf6d89d741bf4958cb192553ba7ec 100644 (file)
@@ -15983,10 +15983,13 @@ void cpu_state_reset(CPUMIPSState *env)
     if (env->CP0_Config3 & (1 << CP0C3_DSPP)) {
         env->CP0_Status |= (1 << CP0St_MX);
     }
-    /* Enable 64-bit FPU if the target cpu supports it.  */
-    if (env->active_fpu.fcr0 & (1 << FCR0_F64)) {
+# if defined(TARGET_MIPS64)
+    /* For MIPS64, init FR bit to 1 if FPU unit is there and bit is writable. */
+    if ((env->CP0_Config1 & (1 << CP0C1_FP)) &&
+        (env->CP0_Status_rw_bitmask & (1 << CP0St_FR))) {
         env->CP0_Status |= (1 << CP0St_FR);
     }
+# endif
 #else
     if (env->hflags & MIPS_HFLAG_BMASK) {
         /* If the exception was raised from a delay slot,
This page took 0.043719 seconds and 4 git commands to generate.