diff options
author | peter <peter@FreeBSD.org> | 2004-06-08 01:14:39 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2004-06-08 01:14:39 +0000 |
commit | 7740067a4a0e512d0ee3202bc8f71e95eae28de5 (patch) | |
tree | 16a83b1326c986fb78a6956708b277170ee9392c | |
parent | 5cebad93ca810e4c0b6aab8d1088e069c6390ed9 (diff) | |
download | FreeBSD-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.c | 4 |
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; |