]> xenbits.xensource.com Git - qemu-upstream-4.6-testing.git/commitdiff
target-mips: fix 64-bit FPU config for user-mode emulation
authorPetar Jovanovic <petar.jovanovic@imgtec.com>
Fri, 29 Nov 2013 16:27:42 +0000 (17:27 +0100)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Mon, 9 Dec 2013 20:42:33 +0000 (14:42 -0600)
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 <petar.jovanovic@imgtec.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit 4d66261f71f2efa31e1052e4041c5ee505572fe5)

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
target-mips/translate.c

index e2eb908cf32f0127321abdc7be4b2f4f75da3019..cf29e71e7e11e5560cafc810073f63ced9104d77 100644 (file)
@@ -15988,10 +15988,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,