summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/npx.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-05-30 23:44:21 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-05-30 23:44:21 +0000
commitfa9df4abe12110a487787e1d598d0c05af348a13 (patch)
tree8fe4415c7c155100ca395c3fcc5aca0e656c49c0 /sys/i386/isa/npx.c
parente96ef6e51ce2eada4161f8c46c031c67179ff703 (diff)
downloadFreeBSD-src-fa9df4abe12110a487787e1d598d0c05af348a13.zip
FreeBSD-src-fa9df4abe12110a487787e1d598d0c05af348a13.tar.gz
Use the method described in IA-32 Intel Architecture Software Developer's
Manual chapter 11.6.6 to get valid mxcsr bits, use the mxcsr mask to clear invalid bits passed by user code. Reviewed by: bde
Diffstat (limited to 'sys/i386/isa/npx.c')
-rw-r--r--sys/i386/isa/npx.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c
index bc39629..ba202fc 100644
--- a/sys/i386/isa/npx.c
+++ b/sys/i386/isa/npx.c
@@ -417,6 +417,15 @@ npx_attach(dev)
stop_emulating();
fpusave(&npx_cleanstate);
start_emulating();
+#ifdef CPU_ENABLE_SSE
+ if (cpu_fxsr) {
+ if (npx_cleanstate.sv_xmm.sv_env.en_mxcsr_mask)
+ cpu_mxcsr_mask =
+ npx_cleanstate.sv_xmm.sv_env.en_mxcsr_mask;
+ else
+ cpu_mxcsr_mask = 0xFFBF;
+ }
+#endif
npx_cleanstate_ready = 1;
intr_restore(s);
}
OpenPOWER on IntegriCloud