diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-06 22:05:00 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-06 22:05:00 +0100 |
commit | 23b52bbf23bcc3f7f64b4d3496993bee83f5f2eb (patch) | |
tree | 295ad33428cb9781784d85dc96759fd9fff4f2c9 | |
parent | cd38d4135633fd2dd9ce544aa3c2c86cf5078f8d (diff) | |
download | plan9front-23b52bbf23bcc3f7f64b4d3496993bee83f5f2eb.tar.xz |
pc64: assign fpsave/fprestore only once in fpuinit()
-rw-r--r-- | sys/src/9/pc64/fpu.c | 19 |
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; } } |