79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
111 lines
4.1 KiB
Diff
111 lines
4.1 KiB
Diff
From 71b820dc04fbe04342d5a05be3d774c704b682ec Mon Sep 17 00:00:00 2001
|
|
From: Quanxian Wang <quanxian.wang@intel.com>
|
|
Date: Wed, 8 Nov 2023 12:43:11 +0800
|
|
Subject: [PATCH] target/i386: Add support for AVX-VNNI-INT8 in CPUID
|
|
enumeration
|
|
|
|
commit eaaa197d5b112ea2758b54df58881a2626de3af5 upstream.
|
|
|
|
AVX-VNNI-INT8 is a new set of instructions in the latest Intel platform
|
|
Sierra Forest, aims for the platform to have superior AI capabilities.
|
|
This instruction multiplies the individual bytes of two unsigned or
|
|
unsigned source operands, then adds and accumulates the results into the
|
|
destination dword element size operand.
|
|
|
|
The bit definition:
|
|
CPUID.(EAX=7,ECX=1):EDX[bit 4]
|
|
|
|
AVX-VNNI-INT8 is on a new feature bits leaf. Add a CPUID feature word
|
|
FEAT_7_1_EDX for this leaf.
|
|
|
|
Add CPUID definition for AVX-VNNI-INT8.
|
|
|
|
Intel-SIG: commit eaaa197d5b11 target/i386: Add support for AVX-VNNI-INT8 in CPUID enumeration.
|
|
Backport GNR and SRF ISA into QEMU-6.2
|
|
|
|
Signed-off-by: Jiaxi Chen <jiaxi.chen@linux.intel.com>
|
|
Signed-off-by: Tao Su <tao1.su@linux.intel.com>
|
|
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
|
|
Message-Id: <20230303065913.1246327-5-tao1.su@linux.intel.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
[ Quanxian Wang: amend commit log ]
|
|
Signed-off-by: Quanxian Wang <quanxian.wang@intel.com>
|
|
---
|
|
target/i386/cpu.c | 22 +++++++++++++++++++++-
|
|
target/i386/cpu.h | 3 +++
|
|
2 files changed, 24 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
index b19fb0cf87..a14284a81b 100644
|
|
--- a/target/i386/cpu.c
|
|
+++ b/target/i386/cpu.c
|
|
@@ -663,6 +663,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1,
|
|
#define TCG_7_0_EDX_FEATURES CPUID_7_0_EDX_FSRM
|
|
#define TCG_7_1_EAX_FEATURES (CPUID_7_1_EAX_FZRM | CPUID_7_1_EAX_FSRS | \
|
|
CPUID_7_1_EAX_FSRC)
|
|
+#define TCG_7_1_EDX_FEATURES 0
|
|
#define TCG_7_2_EDX_FEATURES 0
|
|
#define TCG_APM_FEATURES 0
|
|
#define TCG_6_EAX_FEATURES CPUID_6_EAX_ARAT
|
|
@@ -906,6 +907,25 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
|
},
|
|
.tcg_features = TCG_7_2_EDX_FEATURES,
|
|
},
|
|
+ [FEAT_7_1_EDX] = {
|
|
+ .type = CPUID_FEATURE_WORD,
|
|
+ .feat_names = {
|
|
+ NULL, NULL, NULL, NULL,
|
|
+ "avx-vnni-int8", 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,
|
|
+ },
|
|
+ .cpuid = {
|
|
+ .eax = 7,
|
|
+ .needs_ecx = true, .ecx = 1,
|
|
+ .reg = R_EDX,
|
|
+ },
|
|
+ .tcg_features = TCG_7_1_EDX_FEATURES,
|
|
+ },
|
|
[FEAT_8000_0007_EDX] = {
|
|
.type = CPUID_FEATURE_WORD,
|
|
.feat_names = {
|
|
@@ -5557,9 +5577,9 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
|
}
|
|
} else if (count == 1) {
|
|
*eax = env->features[FEAT_7_1_EAX];
|
|
+ *edx = env->features[FEAT_7_1_EDX];
|
|
*ebx = 0;
|
|
*ecx = 0;
|
|
- *edx = 0;
|
|
} else if (count == 2) {
|
|
*edx = env->features[FEAT_7_2_EDX];
|
|
*eax = 0;
|
|
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
|
index 2bcc127fac..b81d77084c 100644
|
|
--- a/target/i386/cpu.h
|
|
+++ b/target/i386/cpu.h
|
|
@@ -601,6 +601,7 @@ typedef enum FeatureWord {
|
|
FEAT_SGX_12_0_EAX, /* CPUID[EAX=0x12,ECX=0].EAX (SGX) */
|
|
FEAT_SGX_12_0_EBX, /* CPUID[EAX=0x12,ECX=0].EBX (SGX MISCSELECT[31:0]) */
|
|
FEAT_SGX_12_1_EAX, /* CPUID[EAX=0x12,ECX=1].EAX (SGX ATTRIBUTES[31:0]) */
|
|
+ FEAT_7_1_EDX, /* CPUID[EAX=7,ECX=1].EDX */
|
|
FEAT_7_2_EDX, /* CPUID[EAX=7,ECX=2].EDX */
|
|
FEATURE_WORDS,
|
|
} FeatureWord;
|
|
@@ -895,6 +896,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
|
#define CPUID_7_1_EAX_AMX_FP16 (1U << 21)
|
|
/* Support for VPMADD52[H,L]UQ */
|
|
#define CPUID_7_1_EAX_AVX_IFMA (1U << 23)
|
|
+/* Support for VPDPB[SU,UU,SS]D[,S] */
|
|
+#define CPUID_7_1_EDX_AVX_VNNI_INT8 (1U << 4)
|
|
|
|
/* Do not exhibit MXCSR Configuration Dependent Timing (MCDT) behavior */
|
|
#define CPUID_7_2_EDX_MCDT_NO (1U << 5)
|
|
--
|
|
2.27.0
|
|
|