summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2004-06-08 01:14:39 +0000
committerPeter Wemm <peter@FreeBSD.org>2004-06-08 01:14:39 +0000
commit96a7759e99cc4c5431ee2d2c09176241965cebc7 (patch)
tree16a83b1326c986fb78a6956708b277170ee9392c
parent18154cd6f8c9df5254a25bfd4c64ba5b95025754 (diff)
Notes
-rw-r--r--sys/amd64/amd64/fpu.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c
index 34af7ae995c4..0b91603cb130 100644
--- a/sys/amd64/amd64/fpu.c
+++ b/sys/amd64/amd64/fpu.c
@@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
#define fnstsw(addr) __asm __volatile("fnstsw %0" : "=m" (*(addr)))
#define fxrstor(addr) __asm("fxrstor %0" : : "m" (*(addr)))
#define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr)))
+#define ldmxcsr(r) __asm __volatile("ldmxcsr %0" : "m" (r))
#define start_emulating() __asm("smsw %%ax; orb %0,%%al; lmsw %%ax" \
: : "n" (CR0_TS) : "ax")
#define stop_emulating() __asm("clts")
@@ -111,6 +112,7 @@ void
fpuinit(void)
{
register_t savecrit;
+ u_int mxcsr;
u_short control;
savecrit = intr_disable();
@@ -119,6 +121,8 @@ fpuinit(void)
fninit();
control = __INITIAL_FPUCW__;
fldcw(&control);
+ mxcsr = __INITIAL_MXCSR__;
+ ldmxcsr(mxcsr);
fxsave(&fpu_cleanstate);
start_emulating();
fpu_cleanstate_ready = 1;