mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-23 02:55:06 +00:00
x86: add AVX512_4VNNIW and AVX512_4FMAPS features
The spec can be found in Intel Software Developer Manual or in Instruction Set Extensions Programming Reference. Backports commit 95ea69fb46266aaa46d0c8b7f0ba8c4903dbe4e3 from qemu
This commit is contained in:
parent
1e4154af83
commit
57533d1adc
|
@ -25,7 +25,6 @@
|
|||
#include "cpu.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "sysemu/cpus.h"
|
||||
#include "sysemu/kvm.h"
|
||||
|
||||
#include "qapi/qmp/qerror.h"
|
||||
|
||||
|
@ -232,6 +231,7 @@ static void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1,
|
|||
CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM,
|
||||
CPUID_7_0_EBX_RDSEED */
|
||||
#define TCG_7_0_ECX_FEATURES (CPUID_7_0_ECX_PKU | CPUID_7_0_ECX_OSPKE)
|
||||
#define TCG_7_0_EDX_FEATURES 0
|
||||
#define TCG_APM_FEATURES 0
|
||||
#define TCG_6_EAX_FEATURES CPUID_6_EAX_ARAT
|
||||
|
||||
|
@ -324,6 +324,23 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
|||
R_ECX,
|
||||
TCG_7_0_ECX_FEATURES,
|
||||
},
|
||||
// FEAT_7_0_EDX
|
||||
{
|
||||
{
|
||||
NULL, NULL, "avx512-4vnniw", "avx512-4fmaps",
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
},
|
||||
7,
|
||||
true, 0,
|
||||
R_EDX,
|
||||
TCG_7_0_EDX_FEATURES,
|
||||
},
|
||||
/* Feature names that are already defined on feature_name[] but
|
||||
* are set on CPUID[8000_0001].EDX on AMD CPUs don't have their
|
||||
* names on feat_names below. They are copied automatically
|
||||
|
@ -866,6 +883,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -891,6 +910,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | CPUID_EXT2_MMXEXT |
|
||||
|
@ -940,6 +961,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -965,6 +988,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
/* Missing: CPUID_EXT2_PDPE1GB, CPUID_EXT2_RDTSCP */
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
|
@ -1005,6 +1030,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
// FEAT_8000_0001_ECX
|
||||
0,
|
||||
|
@ -1030,6 +1057,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_NX,
|
||||
},
|
||||
|
@ -1090,6 +1119,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_MMXEXT | CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT,
|
||||
},
|
||||
|
@ -1116,6 +1147,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_NX,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -1141,6 +1174,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -1167,6 +1202,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -1193,6 +1230,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -1220,6 +1259,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
// FEAT_8000_0001_ECX
|
||||
|
@ -1267,6 +1308,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1316,6 +1359,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_ERMS,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1367,6 +1412,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1419,6 +1466,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_RTM,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1472,6 +1521,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_SMAP,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1525,6 +1576,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_SMAP,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1578,6 +1631,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX |
|
||||
CPUID_EXT2_SYSCALL,
|
||||
|
@ -1629,6 +1684,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
|
||||
CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT |
|
||||
|
@ -1657,6 +1714,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_FXSR |
|
||||
CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PSE36 |
|
||||
|
@ -1689,6 +1748,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_FXSR |
|
||||
CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PSE36 |
|
||||
|
@ -1724,6 +1785,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP |
|
||||
CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
|
||||
|
@ -1761,6 +1824,8 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
|||
0,
|
||||
// FEAT_7_0_ECX
|
||||
0,
|
||||
// FEAT_7_0_EDX
|
||||
0,
|
||||
// FEAT_8000_0001_EDX
|
||||
CPUID_EXT2_LM | CPUID_EXT2_RDTSCP |
|
||||
CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
|
||||
|
@ -2543,7 +2608,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
|||
if ((*ecx & CPUID_7_0_ECX_PKU) && env->cr[4] & CR4_PKE_MASK) {
|
||||
*ecx |= CPUID_7_0_ECX_OSPKE;
|
||||
}
|
||||
*edx = 0; /* Reserved */
|
||||
*edx = env->features[FEAT_7_0_EDX]; /* Feature flags */
|
||||
} else {
|
||||
*eax = 0;
|
||||
*ebx = 0;
|
||||
|
|
|
@ -441,6 +441,7 @@ typedef enum FeatureWord {
|
|||
FEAT_1_ECX, /* CPUID[1].ECX */
|
||||
FEAT_7_0_EBX, /* CPUID[EAX=7,ECX=0].EBX */
|
||||
FEAT_7_0_ECX, /* CPUID[EAX=7,ECX=0].ECX */
|
||||
FEAT_7_0_EDX, /* CPUID[EAX=7,ECX=0].EDX */
|
||||
FEAT_8000_0001_EDX, /* CPUID[8000_0001].EDX */
|
||||
FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */
|
||||
FEAT_8000_0007_EDX, /* CPUID[8000_0007].EDX */
|
||||
|
@ -627,6 +628,9 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
|
|||
#define CPUID_7_0_ECX_OSPKE (1U << 4)
|
||||
#define CPUID_7_0_ECX_RDPID (1U << 22)
|
||||
|
||||
#define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */
|
||||
#define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */
|
||||
|
||||
#define CPUID_XSAVE_XSAVEOPT (1U << 0)
|
||||
#define CPUID_XSAVE_XSAVEC (1U << 1)
|
||||
#define CPUID_XSAVE_XGETBV1 (1U << 2)
|
||||
|
|
Loading…
Reference in a new issue