add more cpuid bits. Reference: /n/atom/patch/applied/moarcpuid Date: Mon Feb 9 05:18:06 CET 2015 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/aux/cpuid/cpuid.c Mon Feb 9 05:17:55 2015 +++ /sys/src/cmd/aux/cpuid/cpuid.c Mon Feb 9 05:17:56 2015 @@ -38,7 +38,7 @@ /* 7 */ "mce", "machine check exception", /* 8 */ "cx8", "CMPXCHGQ", /* 9 */ "apic", "onboard apic", -/* 10 */ "--", "reserved", +/* 10 */ "-10-", "reserved", /* 11 */ "sep", "SYSENTER", /* 12 */ "mtrr", "memory type range registers", /* 13 */ "pge", "cr4 page global enable", @@ -48,7 +48,7 @@ /* 17 */ "pse36", "36-bit huge pages", /* 18 */ "pn", "processor serial#", /* 19 */ "clflush", "CLFLUSH", -/* 20 */ "--", "reserved", +/* 20 */ "-20-", "reserved", /* 21 */ "dts", "debug store", /* 22 */ "acpi", "onboard acpi thermal msrs", /* 23 */ "mmx", "mmx", @@ -74,12 +74,12 @@ /* 8 */ "tm2", "thermal monitor 2", /* 9 */ "ssse3", "supplemntal SSE3", /* 10 */ "cid", "context id", -/* 11 */ "--", "reserved", +/* 11 */ "sdbg", "silicon debug msr", /* 12 */ "fma", "fused multiply-add", /* 13 */ "cx16", "CMPXCHGO", /* 14 */ "xtpr", "xtpr update control", /* 15 */ "pdcm", "perfmon and debug", -/* 16 */ "--", "reserved", +/* 16 */ "-16-", "reserved", /* 17 */ "pcid", "process context identifiers", /* 18 */ "dca", "direct cache access dma write", /* 19 */ "sse41", "SSE 4.1", @@ -97,74 +97,144 @@ /* 31 */ "hyp", "running on hypervisor", }; +char *fn7bx[32*2] = { +/* 0 */ "fsgbase", "supports fsgbase", +/* 1 */ "adjmsr", "ia32_tsc_adjust msr", +/* 2 */ "-2-", "reserved", +/* 3 */ "bmi1", "bmi1", +/* 4 */ "hle", "hle", +/* 5 */ "avx2", "avx2", +/* 6 */ "-6-", "reserved", +/* 7 */ "smep", "supervisor-mode execution prevention", +/* 8 */ "bmi2", "bmi2", +/* 9 */ "erep", "supports enhanced rep movesb;stosb", +/* 10 */ "invpcid", "invpcid instruction for process context id", +/* 11 */ "rtm", "rtm", +/* 12 */ "pqm", "platform qos monitoring", +/* 13 */ "nofpucs", "depricates fpu cs/ds", +/* 14 */ "-14-", "reserved", +/* 15 */ "pqe", "platform quality-of-service enforcement", +/* 16 */ "-16-", "reserved", +/* 17 */ "-17-", "reserved", +/* 18 */ "rdseed", "rdseed supported", +/* 19 */ "adx", "adx", +/* 20 */ "smap", "smap", +/* 21 */ "-21-", "reserved", +/* 22 */ "-22-", "reserved", +/* 23 */ "-23-", "reserved", +/* 24 */ "-24-", "reserved", +/* 25 */ "ipt", "itel processor trace", +/* 26 */ "-26-", "reserved", +/* 27 */ "-27-", "reserved", +/* 28 */ "-28-", "reserved", +/* 29 */ "-29-", "reserved", +/* 30 */ "-30-", "reserved", +/* 31 */ "-31", "reserved", +}; + +char *fn7cx[32*2] = { +/* 0 */ "fsgbase", "supports fsgbase", +/* 1 */ "-1-", "reserved" +/* 2 */ "-2-", "reserved" +/* 3 */ "-3-", "reserved" +/* 4 */ "-4-", "reserved" +/* 5 */ "-5-", "reserved" +/* 6 */ "-6-", "reserved" +/* 7 */ "-7-", "reserved" +/* 8 */ "-8-", "reserved" +/* 9 */ "-9-", "reserved" +/* 10 */ "-10-", "reserved" +/* 11 */ "-11-", "reserved" +/* 12 */ "-12-", "reserved" +/* 13 */ "-13-", "reserved" +/* 14 */ "-14-", "reserved" +/* 15 */ "-15-", "reserved" +/* 16 */ "-16-", "reserved" +/* 17 */ "-17-", "reserved" +/* 18 */ "-18-", "reserved" +/* 19 */ "-19-", "reserved" +/* 20 */ "-20-", "reserved" +/* 21 */ "-21-", "reserved" +/* 22 */ "-22-", "reserved" +/* 23 */ "-23-", "reserved" +/* 24 */ "-24-", "reserved" +/* 25 */ "-25-", "reserved" +/* 26 */ "-26-", "reserved" +/* 27 */ "-27-", "reserved" +/* 28 */ "-28-", "reserved" +/* 29 */ "-29-", "reserved" +/* 30 */ "-30-", "reserved" +/* 31 */ "-31-", "reserved" +}; + char *fn80000001dx[32*2] = { -/* 0 */ "--", "reserved", -/* 1 */ "--", "reserved", -/* 2 */ "--", "reserved", -/* 3 */ "--", "reserved", -/* 4 */ "--", "reserved", -/* 5 */ "--", "reserved", -/* 6 */ "--", "reserved", -/* 7 */ "--", "reserved", -/* 8 */ "--", "reserved", -/* 9 */ "--", "reserved", -/* 10 */ "--", "reserved", +/* 0 */ "-0-", "reserved", +/* 1 */ "-1-", "reserved", +/* 2 */ "-2-", "reserved", +/* 3 */ "-3-", "reserved", +/* 4 */ "-4-", "reserved", +/* 5 */ "-5-", "reserved", +/* 6 */ "-6-", "reserved", +/* 7 */ "-7-", "reserved", +/* 8 */ "-8-", "reserved", +/* 9 */ "-9-", "reserved", +/* 10 */ "-10-", "reserved", /* 11 */ "syscall", "syscall instruction", -/* 12 */ "--", "reserved", -/* 13 */ "--", "reserved", -/* 14 */ "--", "reserved", -/* 15 */ "--", "reserved", -/* 16 */ "--", "reserved", -/* 17 */ "--", "reserved", -/* 18 */ "--", "reserved", -/* 19 */ "--", "reserved", +/* 12 */ "-12-", "reserved", +/* 13 */ "-13-", "reserved", +/* 14 */ "-14-", "reserved", +/* 15 */ "-15-", "reserved", +/* 16 */ "-16-", "reserved", +/* 17 */ "-17-", "reserved", +/* 18 */ "-18-", "reserved", +/* 19 */ "-19-", "reserved", /* 20 */ "nox", "execute disable", -/* 21 */ "--", "reserved", -/* 22 */ "--", "reserved", -/* 23 */ "--", "reserved", -/* 24 */ "--", "reserved", -/* 25 */ "--", "reserved", +/* 21 */ "-21-", "reserved", +/* 22 */ "-22-", "reserved", +/* 23 */ "-23-", "reserved", +/* 24 */ "-24-", "reserved", +/* 25 */ "-25-", "reserved", /* 26 */ "gb", "1gb pages", /* 27 */ "rdtscp", "RDTSCP supported", -/* 28 */ "--", "reserved", +/* 28 */ "-28-", "reserved", /* 29 */ "amd64", "64-bit long mode supported", -/* 30 */ "--", "reserved", -/* 31 */ "--", "reserved", +/* 30 */ "-30-", "reserved", +/* 31 */ "-31-", "reserved", }; char *intel80000001cx[32*2] = { /* 0 */ "lahf64", "LAHF in 64-bit mode", -/* 1 */ "--", "reserved", -/* 2 */ "--", "reserved", -/* 3 */ "--", "reserved", -/* 4 */ "--", "reserved", -/* 5 */ "--", "reserved", -/* 6 */ "--", "reserved", -/* 7 */ "--", "reserved", -/* 8 */ "--", "reserved", -/* 9 */ "--", "reserved", -/* 10 */ "--", "reserved", -/* 11 */ "--", "reserved", -/* 12 */ "--", "reserved", -/* 13 */ "--", "reserved", -/* 14 */ "--", "reserved", -/* 15 */ "--", "reserved", -/* 16 */ "--", "reserved", -/* 17 */ "--", "reserved", -/* 18 */ "--", "reserved", -/* 19 */ "--", "reserved", -/* 20 */ "--", "reserved", -/* 21 */ "--", "reserved", -/* 22 */ "--", "reserved", -/* 23 */ "--", "reserved", -/* 24 */ "--", "reserved", -/* 25 */ "--", "reserved", -/* 26 */ "--", "reserved", -/* 27 */ "--", "reserved", -/* 28 */ "--", "reserved", -/* 29 */ "--", "reserved", -/* 30 */ "--", "reserved", -/* 31 */ "--", "reserved", +/* 1 */ "cmp_leg", "hyperthreading not valid", +/* 2 */ "svm", "Secure Virtual Machine", +/* 3 */ "extapic", "Extended APIC space", +/* 4 */ "cr8_legacy", "CR8 in 32-bit mode", +/* 5 */ "abm", "Advanced bit manipulation (lzcnt and popcnt)", +/* 6 */ "sse4a", "SSE4a", +/* 7 */ "misalignsse", "Misaligned SSE mode", +/* 8 */ "prefetchw", "PREFETCH and PREFETCHW instructions", +/* 9 */ "osvw", "OS Visible Workaround", +/* 10 */ "Instruction Based Sampling", "", +/* 11 */ "xop", "XOP instruction set", +/* 12 */ "skinit", "SKINIT/STGI instructions", +/* 13 */ "wdt", "Watchdog timer", +/* 14 */ "(reserved)", "", +/* 15 */ "lwp", "Light Weight Profiling[21]", +/* 16 */ "fma4", "4 operands fused multiply-add", +/* 17 */ "tce", "Translation Cache Extension", +/* 18 */ "-18-", "reserved", +/* 19 */ "nodeid_msr", "NodeID MSR", +/* 20 */ "-20-", "reserved", +/* 21 */ "tbm", "Trailing Bit Manipulation", +/* 22 */ "topoext", "Topology Extensions", +/* 23 */ "perfctr_core", "Core performance counter extensions", +/* 24 */ "perfctr_nb", "NB performance counter extensions", +/* 25 */ "(reserved)", "", +/* 26 */ "dbx", "Data breakpoint extensions", +/* 27 */ "perftsc", "Performance TSC", +/* 28 */ "pcx_l2i", "L2I perf counter extensions", +/* 29 */ "-29-", "reserved", +/* 30 */ "-30-", "reserved", +/* 31 */ "-31-", "reserved", }; char *amd80000001cx[32*2] = { @@ -182,24 +252,24 @@ /* 11 */ "xop", "extended operation support (apm6)", /* 12 */ "skinit", "skinit support", /* 13 */ "wdt", "watchdog timer support", -/* 14 */ "--", "reserved", +/* 14 */ "-14-", "reserved", /* 15 */ "lwp", "lightweight profiling support", /* 16 */ "fma4", "4-op fma", -/* 17 */ "--", "reserved", -/* 18 */ "--", "reserved", +/* 17 */ "-17-", "reserved", +/* 18 */ "-18-", "reserved", /* 19 */ "nodeid", "support for msrc001_001c", -/* 20 */ "--", "reserved", +/* 20 */ "-20-", "reserved", /* 21 */ "tbm", "trailing-bit manipulation", -/* 22 */ "--", "reserved", -/* 23 */ "--", "reserved", -/* 24 */ "--", "reserved", -/* 25 */ "--", "reserved", -/* 26 */ "--", "reserved", -/* 27 */ "--", "reserved", -/* 28 */ "--", "reserved", -/* 29 */ "--", "reserved", -/* 30 */ "--", "reserved", -/* 31 */ "--", "reserved", +/* 22 */ "-22-", "reserved", +/* 23 */ "-23-", "reserved", +/* 24 */ "-24-", "reserved", +/* 25 */ "-25-", "reserved", +/* 26 */ "-26-", "reserved", +/* 27 */ "-27-", "reserved", +/* 28 */ "-28-", "reserved", +/* 29 */ "-29-", "reserved", +/* 30 */ "-30-", "reserved", +/* 31 */ "-31-", "reserved", }; void @@ -439,10 +509,18 @@ memset(&r, 0, sizeof r); r.ax = 1; cpuid1(&r); - print("dx\t"); + print("fn1 dx\t"); decodetab(fn1dx, r.dx, 0); - print("cx\t"); + print("fn1 cx\t"); decodetab(fn1cx, r.cx, 0); + + memset(&r, 0, sizeof r); + r.ax = 7; + cpuid1(&r); + print("fn7 bx\t"); + decodetab(fn7bx, r.bx, 0); + print("fn7 cx\t"); + decodetab(fn7cx, r.cx, 0); break; case 'i': p = buf;