diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-05-01 21:51:15 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-05-01 21:51:15 +0200 |
commit | 5aa224c153db83a9fe82848860a062c7c3566cc5 (patch) | |
tree | 204c17aa735b4aaed6265b14f14880ede6ab74cb /sys/src/9/pc | |
parent | e880549da638e3fa20465e7ed90d3803aa28fc18 (diff) |
pc: use fpsave() instead of fpenv() to capture fp exception context
Diffstat (limited to 'sys/src/9/pc')
-rw-r--r-- | sys/src/9/pc/fns.h | 2 | ||||
-rw-r--r-- | sys/src/9/pc/l.s | 9 | ||||
-rw-r--r-- | sys/src/9/pc/main.c | 5 |
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); } /* |