summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-06 22:05:00 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-06 22:05:00 +0100
commit23b52bbf23bcc3f7f64b4d3496993bee83f5f2eb (patch)
tree295ad33428cb9781784d85dc96759fd9fff4f2c9
parentcd38d4135633fd2dd9ce544aa3c2c86cf5078f8d (diff)
downloadplan9front-23b52bbf23bcc3f7f64b4d3496993bee83f5f2eb.tar.xz
pc64: assign fpsave/fprestore only once in fpuinit()
-rw-r--r--sys/src/9/pc64/fpu.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/sys/src/9/pc64/fpu.c b/sys/src/9/pc64/fpu.c
index 2b9a377b7..1a5f31251 100644
--- a/sys/src/9/pc64/fpu.c
+++ b/sys/src/9/pc64/fpu.c
@@ -253,25 +253,26 @@ fpuinit(void)
ulong regs[4];
cr4 = getcr4() | CR4Osfxsr|CR4Oxmmex;
- putcr4(cr4);
- fpsave = fpssesave;
- fprestore = fpsserestore;
-
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;
+ } else {
+ if(regs[0] & Xsaveopt)
+ fpsave = fpxsaveopt;
+ else
+ fpsave = fpxsave;
+ fprestore = fpxrestore;
}
+ } else {
+ putcr4(cr4);
+ fpsave = fpssesave;
+ fprestore = fpsserestore;
}
}