summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/devarch.c
diff options
context:
space:
mode:
authorSigrid <ftrvxmtrx@gmail.com>2020-12-06 18:48:32 +0100
committerSigrid <ftrvxmtrx@gmail.com>2020-12-06 18:48:32 +0100
commit66b6185845e85258f1408271d5f705aacfa6ffdb (patch)
tree3229e05ec37577d706d3d1efe9732244c55a92fc /sys/src/9/pc/devarch.c
parent753a35b52ac098985aff5e22a069d30d16903385 (diff)
amd64, vmx: support avx/avx2 for host/guest; use *noavx= in plan9.ini to disable
Diffstat (limited to 'sys/src/9/pc/devarch.c')
-rw-r--r--sys/src/9/pc/devarch.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/sys/src/9/pc/devarch.c b/sys/src/9/pc/devarch.c
index 6617d3e7b..564e7e7d8 100644
--- a/sys/src/9/pc/devarch.c
+++ b/sys/src/9/pc/devarch.c
@@ -18,11 +18,6 @@ enum {
Qmax = 32,
};
-enum {
- CR4Osfxsr = 1 << 9,
- CR4Oxmmex = 1 << 10,
-};
-
enum { /* cpuid standard function codes */
Highstdfunc = 0, /* also returns vendor string */
Procsig,
@@ -507,13 +502,13 @@ cpuidentify(void)
ulong regs[4];
vlong mca, mct, pat;
- cpuid(Highstdfunc, regs);
+ cpuid(Highstdfunc, 0, regs);
memmove(m->cpuidid, &regs[1], BY2WD); /* bx */
memmove(m->cpuidid+4, &regs[3], BY2WD); /* dx */
memmove(m->cpuidid+8, &regs[2], BY2WD); /* cx */
m->cpuidid[12] = '\0';
- cpuid(Procsig, regs);
+ cpuid(Procsig, 0, regs);
m->cpuidax = regs[0];
m->cpuidcx = regs[2];
m->cpuiddx = regs[3];
@@ -650,15 +645,6 @@ cpuidentify(void)
if(m->cpuiddx & Mtrr)
mtrrsync();
- if((m->cpuiddx & (Sse|Fxsr)) == (Sse|Fxsr)){ /* have sse fp? */
- fpsave = fpssesave;
- fprestore = fpsserestore;
- putcr4(getcr4() | CR4Osfxsr|CR4Oxmmex);
- } else {
- fpsave = fpx87save;
- fprestore = fpx87restore;
- }
-
if(strcmp(m->cpuidid, "GenuineIntel") == 0 && (m->cpuidcx & Rdrnd) != 0)
hwrandbuf = rdrandbuf;
else
@@ -669,9 +655,9 @@ cpuidentify(void)
m->havewatchpt8 = 1;
/* check and enable NX bit */
- cpuid(Highextfunc, regs);
+ cpuid(Highextfunc, 0, regs);
if(regs[0] >= Procextfeat){
- cpuid(Procextfeat, regs);
+ cpuid(Procextfeat, 0, regs);
if((regs[3] & (1<<20)) != 0){
vlong efer;
@@ -689,14 +675,16 @@ cpuidentify(void)
|| family == 6 && (model == 15 || model == 23 || model == 28))
m->havewatchpt8 = 1;
/* Intel SDM claims amd64 support implies 8-byte watchpoint support */
- cpuid(Highextfunc, regs);
+ cpuid(Highextfunc, 0, regs);
if(regs[0] >= Procextfeat){
- cpuid(Procextfeat, regs);
+ cpuid(Procextfeat, 0, regs);
if((regs[3] & 1<<29) != 0)
m->havewatchpt8 = 1;
}
}
+ fpuinit();
+
cputype = t;
return t->family;
}