summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/pc64/main.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/src/9/pc64/main.c b/sys/src/9/pc64/main.c
index 175f809bc..7e1b8449a 100644
--- a/sys/src/9/pc64/main.c
+++ b/sys/src/9/pc64/main.c
@@ -535,7 +535,7 @@ mathemu(Ureg *ureg, void*)
case FPinit:
fpinit();
index = up->fpstate >> FPindexs;
- if(index < 0 || index > FPindexm)
+ if(index < 0 || index > (FPindexm>>FPindexs))
panic("fpslot index overflow: %d", index);
if(userureg(ureg)){
if(index != 0)
@@ -684,7 +684,7 @@ procsave(Proc *p)
* emulation fault to activate the FPU.
*/
fpsave(p->fpsave);
- p->fpstate = FPinactive | (p->fpstate & (FPpush|FPnouser|FPkernel|FPindexm));
+ p->fpstate = FPinactive | (p->fpstate & ~FPactive);
break;
}
@@ -729,7 +729,8 @@ fpurestore(int ostate)
if((astate & ~(FPnouser|FPkernel|FPindexm)) == FPactive)
_stts();
up->fpsave = up->fpslot[ostate>>FPindexs];
- ostate = FPinactive | (ostate & (FPillegal|FPpush|FPnouser|FPkernel|FPindexm));
+ if(ostate & FPactive)
+ ostate = FPinactive | (ostate & ~FPactive);
}
up->fpstate = ostate;
}