ref: cd38d4135633fd2dd9ce544aa3c2c86cf5078f8d
parent: dcdb2bfb9ab915b9f18c36dc951ca421d97496a2
author: cinap_lenrek <[email protected]>
date: Sun Dec 6 16:44:26 EST 2020
pc64: AMD64 mandates SSE support, remove the check in fpuinit()
--- a/sys/src/9/pc64/fpu.c
+++ b/sys/src/9/pc64/fpu.c
@@ -30,19 +30,7 @@
extern void _ldmxcsr(u32int);
extern void _stts(void);
-/*
- * not used, AMD64 mandated SSE
- */
static void
-fpx87save(FPsave*)
-{
-}
-static void
-fpx87restore(FPsave*)
-{
-}
-
-static void
fpssesave(FPsave *s)
{
_fxsave(s);
@@ -261,34 +249,29 @@
void
fpuinit(void)
{
- uintptr cr4;
+ u64int cr4;
ulong regs[4];
- if((m->cpuiddx & (Sse|Fxsr)) == (Sse|Fxsr)){ /* have sse fp? */
- cr4 = getcr4() | CR4Osfxsr|CR4Oxmmex;
+ cr4 = getcr4() | CR4Osfxsr|CR4Oxmmex;
+ putcr4(cr4);
+ fpsave = fpssesave;
+ fprestore = fpsserestore;
+
+ if((m->cpuidcx & (Xsave|Avx)) == (Xsave|Avx) && getconf("*noavx") == nil){
+ cr4 |= CR4Oxsave;
putcr4(cr4);
- fpsave = fpssesave;
- fprestore = fpsserestore;
+ m->xcr0 = 7; /* x87, sse, avx */
+ putxcr0(m->xcr0);
+ fpsave = fpxsave;
+ fprestore = fpxrestore;
- if((m->cpuidcx & (Xsave|Avx)) == (Xsave|Avx) && getconf("*noavx") == nil){
- cr4 |= CR4Oxsave;
- putcr4(cr4);
- m->xcr0 = 7; /* x87, sse, avx */
- putxcr0(m->xcr0);
- fpsave = fpxsave;
- fprestore = fpxrestore;
-
- cpuid(0xd, 1, regs);
- if(regs[0] & Xsaveopt)
- fpsave = fpxsaveopt;
- if(regs[0] & Xsaves){
- fpsave = fpxsaves;
- fprestore = fpxrestores;
- }
+ cpuid(0xd, 1, regs);
+ if(regs[0] & Xsaveopt)
+ fpsave = fpxsaveopt;
+ if(regs[0] & Xsaves){
+ fpsave = fpxsaves;
+ fprestore = fpxrestores;
}
- } else {
- fpsave = fpx87save;
- fprestore = fpx87restore;
}
}