summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-05-01 21:51:15 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2016-05-01 21:51:15 +0200
commit5aa224c153db83a9fe82848860a062c7c3566cc5 (patch)
tree204c17aa735b4aaed6265b14f14880ede6ab74cb /sys/src
parente880549da638e3fa20465e7ed90d3803aa28fc18 (diff)
pc: use fpsave() instead of fpenv() to capture fp exception context
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/9/pc/fns.h2
-rw-r--r--sys/src/9/pc/l.s9
-rw-r--r--sys/src/9/pc/main.c5
3 files changed, 3 insertions, 13 deletions
diff --git a/sys/src/9/pc/fns.h b/sys/src/9/pc/fns.h
index 9701ed547..69c4fc01c 100644
--- a/sys/src/9/pc/fns.h
+++ b/sys/src/9/pc/fns.h
@@ -35,7 +35,6 @@ int ecread(uchar addr);
int ecwrite(uchar addr, uchar val);
#define evenaddr(x) /* x86 doesn't care */
void fpclear(void);
-void fpenv(FPsave*);
void fpinit(void);
void fpoff(void);
void (*fprestore)(FPsave*);
@@ -44,7 +43,6 @@ void fpsserestore(FPsave*);
void fpsserestore0(FPsave*);
void fpssesave(FPsave*);
void fpssesave0(FPsave*);
-ulong fpstatus(void);
void fpx87restore(FPsave*);
void fpx87restore0(FPsave*);
void fpx87save(FPsave*);
diff --git a/sys/src/9/pc/l.s b/sys/src/9/pc/l.s
index f9e5c5372..40b05519f 100644
--- a/sys/src/9/pc/l.s
+++ b/sys/src/9/pc/l.s
@@ -612,15 +612,6 @@ TEXT fpx87restore0(SB), $0 /* enable and restore state */
WAIT
RET
-TEXT fpstatus(SB), $0 /* get floating point status */
- FSTSW AX
- RET
-
-TEXT fpenv(SB), $0 /* save state without waiting */
- MOVL p+0(FP), AX
- FSTENV 0(AX)
- RET
-
TEXT fpclear(SB), $0 /* clear pending exceptions */
FPON
FCLEX /* no WAIT */
diff --git a/sys/src/9/pc/main.c b/sys/src/9/pc/main.c
index 02ca17d81..e972c2854 100644
--- a/sys/src/9/pc/main.c
+++ b/sys/src/9/pc/main.c
@@ -706,8 +706,9 @@ matherror(Ureg*, void*)
/*
* get floating point state to check out error
*/
- fpenv(&up->fpsave);
- mathnote(up->fpsave.status, up->fpsave.pc);
+ fpsave(&up->fpsave);
+ up->fpstate = FPinactive;
+ mathnote(up->fpsave.fsw, up->fpsave.fpuip);
}
/*