summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2004-06-08 01:14:39 +0000
committerpeter <peter@FreeBSD.org>2004-06-08 01:14:39 +0000
commit7740067a4a0e512d0ee3202bc8f71e95eae28de5 (patch)
tree16a83b1326c986fb78a6956708b277170ee9392c
parent5cebad93ca810e4c0b6aab8d1088e069c6390ed9 (diff)
downloadFreeBSD-src-7740067a4a0e512d0ee3202bc8f71e95eae28de5.zip
FreeBSD-src-7740067a4a0e512d0ee3202bc8f71e95eae28de5.tar.gz
Reapply rev 1.151 after enable sse/fpuinit order fixed in mp_machdep.c
Obtained from: das
-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 34af7ae..0b91603 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;
OpenPOWER on IntegriCloud