svn commit: r273989 - head/sys/i386/isa
John Baldwin
jhb at FreeBSD.org
Sun Nov 2 21:34:25 UTC 2014
Author: jhb
Date: Sun Nov 2 21:34:24 2014
New Revision: 273989
URL: https://svnweb.freebsd.org/changeset/base/273989
Log:
MFamd64: Explicitly initialize the mxcsr during npxinit().
Modified:
head/sys/i386/isa/npx.c
Modified: head/sys/i386/isa/npx.c
==============================================================================
--- head/sys/i386/isa/npx.c Sun Nov 2 20:57:19 2014 (r273988)
+++ head/sys/i386/isa/npx.c Sun Nov 2 21:34:24 2014 (r273989)
@@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
#include <sys/syslog.h>
#endif
#include <sys/signalvar.h>
+#include <vm/uma.h>
#include <machine/asmacros.h>
#include <machine/cputypes.h>
@@ -99,6 +100,7 @@ __FBSDID("$FreeBSD$");
#ifdef CPU_ENABLE_SSE
#define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr)))
#define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr)))
+#define ldmxcsr(csr) __asm __volatile("ldmxcsr %0" : : "m" (csr))
#define stmxcsr(addr) __asm __volatile("stmxcsr %0" : : "m" (*(addr)))
#endif
#else /* !(__GNUCLIKE_ASM && !lint) */
@@ -114,6 +116,7 @@ void frstor(caddr_t addr);
#ifdef CPU_ENABLE_SSE
void fxsave(caddr_t addr);
void fxrstor(caddr_t addr);
+void ldmxcsr(u_int csr);
void stmxcsr(u_int *csr);
#endif
@@ -364,6 +367,12 @@ npxinit(void)
#endif
control = __INITIAL_NPXCW__;
fldcw(control);
+#ifdef CPU_ENABLE_SSE
+ if (cpu_fxsr) {
+ mxcsr = __INITIAL_MXCSR__;
+ ldmxcsr(mxcsr);
+ }
+#endif
start_emulating();
intr_restore(saveintr);
}
More information about the svn-src-all
mailing list