From nobody Wed Feb 11 01:09:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1707227418; cv=none; d=zohomail.com; s=zohoarc; b=Dx1HnKQs7RS6azdkfV3qPm/rMLe8N8O1ioBqpnzagnYOxa580pZo+if8qtXpvAqHFuMhpn3wrwCyi4Tvv3j136HFbe1ZqrLj6Ujhpc/413zeA6mgspL4w492e6PI8dpgdSTByQuauyYCYWEuHsplG6ShBsE5TtfBq4jHV2wEPOU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1707227418; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=D4SzE0i2iyQOl10Q+gyAbiVRSC8FFcSAMne1WdMdRFs=; b=Tfu9L1Jj51v4k1yyfaQAe6vBblvCCw0fcvhA8IlR1gz4+4/b4DdFMTynWB1eA+XlZ9OMRS6zE8SzEAgfG5iteLHKvLvMQF+v2G5adSoNL04+kUgZzek7FGl0mdM7rhXQv66pK1v2Fz9Ob1vGQOV43bCRHFbObLRRyGvvZLGm580= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1707227418187525.594290894465; Tue, 6 Feb 2024 05:50:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rXLoy-0007AW-EL; Tue, 06 Feb 2024 08:49:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rXLow-00079a-B5 for qemu-devel@nongnu.org; Tue, 06 Feb 2024 08:49:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rXLor-0004Go-HC for qemu-devel@nongnu.org; Tue, 06 Feb 2024 08:49:06 -0500 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-213-szrGUsD_PGuXqWnamsn3MA-1; Tue, 06 Feb 2024 08:47:44 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A5EB628116AD; Tue, 6 Feb 2024 13:47:42 +0000 (UTC) Received: from work.fritz.box (unknown [10.39.195.68]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7117F2026D06; Tue, 6 Feb 2024 13:47:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707227340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=D4SzE0i2iyQOl10Q+gyAbiVRSC8FFcSAMne1WdMdRFs=; b=H58Unuhb5FmxJPAOSUDXIPDl45GW5LGpGmWk73Hk06dbMSD5GIX6BVMJNgzKuCMAmm9xaw uG6EF4qnMnGOcnSyjWPXbdoiv8HQJc/b1qv8pKPuVygjMkeSmYk0zWsx5cI92WfM+AC5RH P6jtWKlk+MCfzQSxSXKmn2m8TOAnQSA= X-MC-Unique: szrGUsD_PGuXqWnamsn3MA-1 From: Tim Wiederhake To: qemu-devel@nongnu.org Cc: Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , "Michael S . Tsirkin" , Tim Wiederhake Subject: [PATCH v3 1/5] target/i386: Split out feature_word_info Date: Tue, 6 Feb 2024 14:47:35 +0100 Message-ID: <20240206134739.15345-2-twiederh@redhat.com> In-Reply-To: <20240206134739.15345-1-twiederh@redhat.com> References: <20240206134739.15345-1-twiederh@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=twiederh@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.294, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1707227420422100003 Content-Type: text/plain; charset="utf-8" The isolated part will be generated by a script. Signed-off-by: Tim Wiederhake --- target/i386/cpu.c | 679 +--------------------------- target/i386/feature_word_info.c.inc | 678 +++++++++++++++++++++++++++ 2 files changed, 679 insertions(+), 678 deletions(-) create mode 100644 target/i386/feature_word_info.c.inc diff --git a/target/i386/cpu.c b/target/i386/cpu.c index ef46755a50..e87bce1970 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -763,684 +763,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t ven= dor1, #define TCG_8000_0008_EBX (CPUID_8000_0008_EBX_XSAVEERPTR | \ CPUID_8000_0008_EBX_WBNOINVD | CPUID_8000_0008_EBX_KERNEL_FEATUR= ES) =20 -FeatureWordInfo feature_word_info[FEATURE_WORDS] =3D { - [FEAT_1_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "fpu", "vme", "de", "pse", - "tsc", "msr", "pae", "mce", - "cx8", "apic", NULL, "sep", - "mtrr", "pge", "mca", "cmov", - "pat", "pse36", "pn" /* Intel psn */, "clflush" /* Intel clfsh= */, - NULL, "ds" /* Intel dts */, "acpi", "mmx", - "fxsr", "sse", "sse2", "ss", - "ht" /* Intel htt */, "tm", "ia64", "pbe", - }, - .cpuid =3D {.eax =3D 1, .reg =3D R_EDX, }, - .tcg_features =3D TCG_FEATURES, - .no_autoenable_flags =3D CPUID_HT, - }, - [FEAT_1_ECX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "pni" /* Intel,AMD sse3 */, "pclmulqdq", "dtes64", "monitor", - "ds-cpl", "vmx", "smx", "est", - "tm2", "ssse3", "cid", NULL, - "fma", "cx16", "xtpr", "pdcm", - NULL, "pcid", "dca", "sse4.1", - "sse4.2", "x2apic", "movbe", "popcnt", - "tsc-deadline", "aes", "xsave", NULL /* osxsave */, - "avx", "f16c", "rdrand", "hypervisor", - }, - .cpuid =3D { .eax =3D 1, .reg =3D R_ECX, }, - .tcg_features =3D TCG_EXT_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 - * to features[FEAT_8000_0001_EDX] if and only if CPU vendor is AMD. - */ - [FEAT_8000_0001_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL /* fpu */, NULL /* vme */, NULL /* de */, NULL /* pse */, - NULL /* tsc */, NULL /* msr */, NULL /* pae */, NULL /* mce */, - NULL /* cx8 */, NULL /* apic */, NULL, "syscall", - NULL /* mtrr */, NULL /* pge */, NULL /* mca */, NULL /* cmov = */, - NULL /* pat */, NULL /* pse36 */, NULL, NULL /* Linux mp */, - "nx", NULL, "mmxext", NULL /* mmx */, - NULL /* fxsr */, "fxsr-opt", "pdpe1gb", "rdtscp", - NULL, "lm", "3dnowext", "3dnow", - }, - .cpuid =3D { .eax =3D 0x80000001, .reg =3D R_EDX, }, - .tcg_features =3D TCG_EXT2_FEATURES, - }, - [FEAT_8000_0001_ECX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "lahf-lm", "cmp-legacy", "svm", "extapic", - "cr8legacy", "abm", "sse4a", "misalignsse", - "3dnowprefetch", "osvw", "ibs", "xop", - "skinit", "wdt", NULL, "lwp", - "fma4", "tce", NULL, "nodeid-msr", - NULL, "tbm", "topoext", "perfctr-core", - "perfctr-nb", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0x80000001, .reg =3D R_ECX, }, - .tcg_features =3D TCG_EXT3_FEATURES, - /* - * TOPOEXT is always allowed but can't be enabled blindly by - * "-cpu host", as it requires consistent cache topology info - * to be provided so it doesn't confuse guests. - */ - .no_autoenable_flags =3D CPUID_EXT3_TOPOEXT, - }, - [FEAT_C000_0001_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, "xstore", "xstore-en", - NULL, NULL, "xcrypt", "xcrypt-en", - "ace2", "ace2-en", "phe", "phe-en", - "pmm", "pmm-en", NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0xC0000001, .reg =3D R_EDX, }, - .tcg_features =3D TCG_EXT4_FEATURES, - }, - [FEAT_KVM] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "kvmclock", "kvm-nopiodelay", "kvm-mmu", "kvmclock", - "kvm-asyncpf", "kvm-steal-time", "kvm-pv-eoi", "kvm-pv-unhalt", - NULL, "kvm-pv-tlb-flush", NULL, "kvm-pv-ipi", - "kvm-poll-control", "kvm-pv-sched-yield", "kvm-asyncpf-int", "= kvm-msi-ext-dest-id", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - "kvmclock-stable-bit", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D KVM_CPUID_FEATURES, .reg =3D R_EAX, }, - .tcg_features =3D TCG_KVM_FEATURES, - }, - [FEAT_KVM_HINTS] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "kvm-hint-dedicated", 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, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D KVM_CPUID_FEATURES, .reg =3D R_EDX, }, - .tcg_features =3D TCG_KVM_FEATURES, - /* - * KVM hints aren't auto-enabled by -cpu host, they need to be - * explicitly enabled in the command-line. - */ - .no_autoenable_flags =3D ~0U, - }, - [FEAT_SVM] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "npt", "lbrv", "svm-lock", "nrip-save", - "tsc-scale", "vmcb-clean", "flushbyasid", "decodeassists", - NULL, NULL, "pause-filter", NULL, - "pfthreshold", "avic", NULL, "v-vmsave-vmload", - "vgif", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, "vnmi", NULL, NULL, - "svme-addr-chk", NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0x8000000A, .reg =3D R_EDX, }, - .tcg_features =3D TCG_SVM_FEATURES, - }, - [FEAT_7_0_EBX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "fsgsbase", "tsc-adjust", "sgx", "bmi1", - "hle", "avx2", NULL, "smep", - "bmi2", "erms", "invpcid", "rtm", - NULL, NULL, "mpx", NULL, - "avx512f", "avx512dq", "rdseed", "adx", - "smap", "avx512ifma", "pcommit", "clflushopt", - "clwb", "intel-pt", "avx512pf", "avx512er", - "avx512cd", "sha-ni", "avx512bw", "avx512vl", - }, - .cpuid =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EBX, - }, - .tcg_features =3D TCG_7_0_EBX_FEATURES, - }, - [FEAT_7_0_ECX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, "avx512vbmi", "umip", "pku", - NULL /* ospke */, "waitpkg", "avx512vbmi2", NULL, - "gfni", "vaes", "vpclmulqdq", "avx512vnni", - "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, - "la57", NULL, NULL, NULL, - NULL, NULL, "rdpid", NULL, - "bus-lock-detect", "cldemote", NULL, "movdiri", - "movdir64b", NULL, "sgxlc", "pks", - }, - .cpuid =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_ECX, - }, - .tcg_features =3D TCG_7_0_ECX_FEATURES, - }, - [FEAT_7_0_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, "avx512-4vnniw", "avx512-4fmaps", - "fsrm", NULL, NULL, NULL, - "avx512-vp2intersect", NULL, "md-clear", NULL, - NULL, NULL, "serialize", NULL, - "tsx-ldtrk", NULL, NULL /* pconfig */, "arch-lbr", - NULL, NULL, "amx-bf16", "avx512-fp16", - "amx-tile", "amx-int8", "spec-ctrl", "stibp", - "flush-l1d", "arch-capabilities", "core-capability", "ssbd", - }, - .cpuid =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EDX, - }, - .tcg_features =3D TCG_7_0_EDX_FEATURES, - }, - [FEAT_7_1_EAX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - "avx-vnni", "avx512-bf16", NULL, "cmpccxadd", - NULL, NULL, "fzrm", "fsrs", - "fsrc", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, "amx-fp16", NULL, "avx-ifma", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 1, - .reg =3D R_EAX, - }, - .tcg_features =3D TCG_7_1_EAX_FEATURES, - }, - [FEAT_7_1_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - "avx-vnni-int8", "avx-ne-convert", NULL, NULL, - "amx-complex", NULL, NULL, NULL, - NULL, NULL, "prefetchiti", NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 1, - .reg =3D R_EDX, - }, - .tcg_features =3D TCG_7_1_EDX_FEATURES, - }, - [FEAT_7_2_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - NULL, "mcdt-no", 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 =3D { - .eax =3D 7, - .needs_ecx =3D true, .ecx =3D 2, - .reg =3D R_EDX, - }, - .tcg_features =3D TCG_7_2_EDX_FEATURES, - }, - [FEAT_8000_0007_EDX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - "invtsc", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0x80000007, .reg =3D R_EDX, }, - .tcg_features =3D TCG_APM_FEATURES, - .unmigratable_flags =3D CPUID_APM_INVTSC, - }, - [FEAT_8000_0008_EBX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "clzero", NULL, "xsaveerptr", NULL, - NULL, NULL, NULL, NULL, - NULL, "wbnoinvd", NULL, NULL, - "ibpb", NULL, "ibrs", "amd-stibp", - NULL, "stibp-always-on", NULL, NULL, - NULL, NULL, NULL, NULL, - "amd-ssbd", "virt-ssbd", "amd-no-ssb", NULL, - "amd-psfd", NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0x80000008, .reg =3D R_EBX, }, - .tcg_features =3D TCG_8000_0008_EBX, - .unmigratable_flags =3D 0, - }, - [FEAT_8000_0021_EAX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "no-nested-data-bp", NULL, "lfence-always-serializing", NULL, - NULL, NULL, "null-sel-clr-base", NULL, - "auto-ibrs", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { .eax =3D 0x80000021, .reg =3D R_EAX, }, - .tcg_features =3D 0, - .unmigratable_flags =3D 0, - }, - [FEAT_XSAVE] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "xsaveopt", "xsavec", "xgetbv1", "xsaves", - "xfd", 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 =3D { - .eax =3D 0xd, - .needs_ecx =3D true, .ecx =3D 1, - .reg =3D R_EAX, - }, - .tcg_features =3D TCG_XSAVE_FEATURES, - }, - [FEAT_XSAVE_XSS_LO] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - 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, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 0xD, - .needs_ecx =3D true, - .ecx =3D 1, - .reg =3D R_ECX, - }, - }, - [FEAT_XSAVE_XSS_HI] =3D { - .type =3D CPUID_FEATURE_WORD, - .cpuid =3D { - .eax =3D 0xD, - .needs_ecx =3D true, - .ecx =3D 1, - .reg =3D R_EDX - }, - }, - [FEAT_6_EAX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, "arat", 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, NULL, - }, - .cpuid =3D { .eax =3D 6, .reg =3D R_EAX, }, - .tcg_features =3D TCG_6_EAX_FEATURES, - }, - [FEAT_XSAVE_XCR0_LO] =3D { - .type =3D CPUID_FEATURE_WORD, - .cpuid =3D { - .eax =3D 0xD, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EAX, - }, - .tcg_features =3D ~0U, - .migratable_flags =3D XSTATE_FP_MASK | XSTATE_SSE_MASK | - XSTATE_YMM_MASK | XSTATE_BNDREGS_MASK | XSTATE_BNDCSR_MASK | - XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi256_MASK | XSTATE_Hi16_ZMM_M= ASK | - XSTATE_PKRU_MASK, - }, - [FEAT_XSAVE_XCR0_HI] =3D { - .type =3D CPUID_FEATURE_WORD, - .cpuid =3D { - .eax =3D 0xD, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EDX, - }, - .tcg_features =3D ~0U, - }, - /*Below are MSR exposed features*/ - [FEAT_ARCH_CAPABILITIES] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - "rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry", - "ssb-no", "mds-no", "pschange-mc-no", "tsx-ctrl", - "taa-no", NULL, NULL, NULL, - NULL, "sbdr-ssdp-no", "fbsdp-no", "psdp-no", - NULL, "fb-clear", NULL, NULL, - NULL, NULL, NULL, NULL, - "pbrsb-no", NULL, "gds-no", NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_ARCH_CAPABILITIES, - }, - /* - * FEAT_ARCH_CAPABILITIES only affects a read-only MSR, which - * cannot be read from user mode. Therefore, it has no impact - > on any user-mode operation, and warnings about unsupported - * features do not matter. - */ - .tcg_features =3D ~0U, - }, - [FEAT_CORE_CAPABILITY] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - NULL, "split-lock-detect", 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, - }, - .msr =3D { - .index =3D MSR_IA32_CORE_CAPABILITY, - }, - }, - [FEAT_PERF_CAPABILITIES] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, "full-width-write", NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_PERF_CAPABILITIES, - }, - }, - - [FEAT_VMX_PROCBASED_CTLS] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, "vmx-vintr-pending", "vmx-tsc-offset", - NULL, NULL, NULL, "vmx-hlt-exit", - NULL, "vmx-invlpg-exit", "vmx-mwait-exit", "vmx-rdpmc-exit", - "vmx-rdtsc-exit", NULL, NULL, "vmx-cr3-load-noexit", - "vmx-cr3-store-noexit", NULL, NULL, "vmx-cr8-load-exit", - "vmx-cr8-store-exit", "vmx-flexpriority", "vmx-vnmi-pending", = "vmx-movdr-exit", - "vmx-io-exit", "vmx-io-bitmap", NULL, "vmx-mtf", - "vmx-msr-bitmap", "vmx-monitor-exit", "vmx-pause-exit", "vmx-s= econdary-ctls", - }, - .msr =3D { - .index =3D MSR_IA32_VMX_TRUE_PROCBASED_CTLS, - } - }, - - [FEAT_VMX_SECONDARY_CTLS] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - "vmx-apicv-xapic", "vmx-ept", "vmx-desc-exit", "vmx-rdtscp-exi= t", - "vmx-apicv-x2apic", "vmx-vpid", "vmx-wbinvd-exit", "vmx-unrest= ricted-guest", - "vmx-apicv-register", "vmx-apicv-vid", "vmx-ple", "vmx-rdrand-= exit", - "vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs", "vmx-encl= s-exit", - "vmx-rdseed-exit", "vmx-pml", NULL, NULL, - "vmx-xsaves", NULL, NULL, NULL, - NULL, "vmx-tsc-scaling", "vmx-enable-user-wait-pause", NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_PROCBASED_CTLS2, - } - }, - - [FEAT_VMX_PINBASED_CTLS] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - "vmx-intr-exit", NULL, NULL, "vmx-nmi-exit", - NULL, "vmx-vnmi", "vmx-preemption-timer", "vmx-posted-intr", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_TRUE_PINBASED_CTLS, - } - }, - - [FEAT_VMX_EXIT_CTLS] =3D { - .type =3D MSR_FEATURE_WORD, - /* - * VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE is copied from - * the LM CPUID bit. - */ - .feat_names =3D { - NULL, NULL, "vmx-exit-nosave-debugctl", NULL, - NULL, NULL, NULL, NULL, - NULL, NULL /* vmx-exit-host-addr-space-size */, NULL, NULL, - "vmx-exit-load-perf-global-ctrl", NULL, NULL, "vmx-exit-ack-in= tr", - NULL, NULL, "vmx-exit-save-pat", "vmx-exit-load-pat", - "vmx-exit-save-efer", "vmx-exit-load-efer", - "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs", - NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL, - NULL, "vmx-exit-load-pkrs", NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_TRUE_EXIT_CTLS, - } - }, - - [FEAT_VMX_ENTRY_CTLS] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, "vmx-entry-noload-debugctl", NULL, - NULL, NULL, NULL, NULL, - NULL, "vmx-entry-ia32e-mode", NULL, NULL, - NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat",= "vmx-entry-load-efer", - "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NUL= L, - NULL, NULL, "vmx-entry-load-pkrs", NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_TRUE_ENTRY_CTLS, - } - }, - - [FEAT_VMX_MISC] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - NULL, NULL, NULL, NULL, - NULL, "vmx-store-lma", "vmx-activity-hlt", "vmx-activity-shutd= own", - "vmx-activity-wait-sipi", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, "vmx-vmwrite-vmexit-fields", "vmx-zero-len-inject", NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_MISC, - } - }, - - [FEAT_VMX_EPT_VPID_CAPS] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - "vmx-ept-execonly", NULL, NULL, NULL, - NULL, NULL, "vmx-page-walk-4", "vmx-page-walk-5", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - "vmx-ept-2mb", "vmx-ept-1gb", NULL, NULL, - "vmx-invept", "vmx-eptad", "vmx-ept-advanced-exitinfo", NULL, - NULL, "vmx-invept-single-context", "vmx-invept-all-context", N= ULL, - NULL, NULL, NULL, NULL, - "vmx-invvpid", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - "vmx-invvpid-single-addr", "vmx-invept-single-context", - "vmx-invvpid-all-context", "vmx-invept-single-context-nogl= obals", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .msr =3D { - .index =3D MSR_IA32_VMX_EPT_VPID_CAP, - } - }, - - [FEAT_VMX_BASIC] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - [54] =3D "vmx-ins-outs", - [55] =3D "vmx-true-ctls", - [56] =3D "vmx-any-errcode", - }, - .msr =3D { - .index =3D MSR_IA32_VMX_BASIC, - }, - /* Just to be safe - we don't support setting the MSEG version fie= ld. */ - .no_autoenable_flags =3D MSR_VMX_BASIC_DUAL_MONITOR, - }, - - [FEAT_VMX_VMFUNC] =3D { - .type =3D MSR_FEATURE_WORD, - .feat_names =3D { - [0] =3D "vmx-eptp-switching", - }, - .msr =3D { - .index =3D MSR_IA32_VMX_VMFUNC, - } - }, - - [FEAT_14_0_ECX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - 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, - NULL, NULL, NULL, "intel-pt-lip", - }, - .cpuid =3D { - .eax =3D 0x14, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_ECX, - }, - .tcg_features =3D TCG_14_0_ECX_FEATURES, - }, - - [FEAT_SGX_12_0_EAX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "sgx1", "sgx2", NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, "sgx-edeccssa", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 0x12, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EAX, - }, - .tcg_features =3D TCG_SGX_12_0_EAX_FEATURES, - }, - - [FEAT_SGX_12_0_EBX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - "sgx-exinfo" , 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, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 0x12, - .needs_ecx =3D true, .ecx =3D 0, - .reg =3D R_EBX, - }, - .tcg_features =3D TCG_SGX_12_0_EBX_FEATURES, - }, - - [FEAT_SGX_12_1_EAX] =3D { - .type =3D CPUID_FEATURE_WORD, - .feat_names =3D { - NULL, "sgx-debug", "sgx-mode64", NULL, - "sgx-provisionkey", "sgx-tokenkey", NULL, "sgx-kss", - NULL, NULL, "sgx-aex-notify", NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - }, - .cpuid =3D { - .eax =3D 0x12, - .needs_ecx =3D true, .ecx =3D 1, - .reg =3D R_EAX, - }, - .tcg_features =3D TCG_SGX_12_1_EAX_FEATURES, - }, -}; +#include "feature_word_info.c.inc" =20 typedef struct FeatureMask { FeatureWord index; diff --git a/target/i386/feature_word_info.c.inc b/target/i386/feature_word= _info.c.inc new file mode 100644 index 0000000000..4c6a1613ae --- /dev/null +++ b/target/i386/feature_word_info.c.inc @@ -0,0 +1,678 @@ +FeatureWordInfo feature_word_info[FEATURE_WORDS] =3D { + [FEAT_1_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "fpu", "vme", "de", "pse", + "tsc", "msr", "pae", "mce", + "cx8", "apic", NULL, "sep", + "mtrr", "pge", "mca", "cmov", + "pat", "pse36", "pn" /* Intel psn */, "clflush" /* Intel clfsh= */, + NULL, "ds" /* Intel dts */, "acpi", "mmx", + "fxsr", "sse", "sse2", "ss", + "ht" /* Intel htt */, "tm", "ia64", "pbe", + }, + .cpuid =3D {.eax =3D 1, .reg =3D R_EDX, }, + .tcg_features =3D TCG_FEATURES, + .no_autoenable_flags =3D CPUID_HT, + }, + [FEAT_1_ECX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "pni" /* Intel,AMD sse3 */, "pclmulqdq", "dtes64", "monitor", + "ds-cpl", "vmx", "smx", "est", + "tm2", "ssse3", "cid", NULL, + "fma", "cx16", "xtpr", "pdcm", + NULL, "pcid", "dca", "sse4.1", + "sse4.2", "x2apic", "movbe", "popcnt", + "tsc-deadline", "aes", "xsave", NULL /* osxsave */, + "avx", "f16c", "rdrand", "hypervisor", + }, + .cpuid =3D { .eax =3D 1, .reg =3D R_ECX, }, + .tcg_features =3D TCG_EXT_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 + * to features[FEAT_8000_0001_EDX] if and only if CPU vendor is AMD. + */ + [FEAT_8000_0001_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL /* fpu */, NULL /* vme */, NULL /* de */, NULL /* pse */, + NULL /* tsc */, NULL /* msr */, NULL /* pae */, NULL /* mce */, + NULL /* cx8 */, NULL /* apic */, NULL, "syscall", + NULL /* mtrr */, NULL /* pge */, NULL /* mca */, NULL /* cmov = */, + NULL /* pat */, NULL /* pse36 */, NULL, NULL /* Linux mp */, + "nx", NULL, "mmxext", NULL /* mmx */, + NULL /* fxsr */, "fxsr-opt", "pdpe1gb", "rdtscp", + NULL, "lm", "3dnowext", "3dnow", + }, + .cpuid =3D { .eax =3D 0x80000001, .reg =3D R_EDX, }, + .tcg_features =3D TCG_EXT2_FEATURES, + }, + [FEAT_8000_0001_ECX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "lahf-lm", "cmp-legacy", "svm", "extapic", + "cr8legacy", "abm", "sse4a", "misalignsse", + "3dnowprefetch", "osvw", "ibs", "xop", + "skinit", "wdt", NULL, "lwp", + "fma4", "tce", NULL, "nodeid-msr", + NULL, "tbm", "topoext", "perfctr-core", + "perfctr-nb", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0x80000001, .reg =3D R_ECX, }, + .tcg_features =3D TCG_EXT3_FEATURES, + /* + * TOPOEXT is always allowed but can't be enabled blindly by + * "-cpu host", as it requires consistent cache topology info + * to be provided so it doesn't confuse guests. + */ + .no_autoenable_flags =3D CPUID_EXT3_TOPOEXT, + }, + [FEAT_C000_0001_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, "xstore", "xstore-en", + NULL, NULL, "xcrypt", "xcrypt-en", + "ace2", "ace2-en", "phe", "phe-en", + "pmm", "pmm-en", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0xC0000001, .reg =3D R_EDX, }, + .tcg_features =3D TCG_EXT4_FEATURES, + }, + [FEAT_KVM] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "kvmclock", "kvm-nopiodelay", "kvm-mmu", "kvmclock", + "kvm-asyncpf", "kvm-steal-time", "kvm-pv-eoi", "kvm-pv-unhalt", + NULL, "kvm-pv-tlb-flush", NULL, "kvm-pv-ipi", + "kvm-poll-control", "kvm-pv-sched-yield", "kvm-asyncpf-int", "= kvm-msi-ext-dest-id", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "kvmclock-stable-bit", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D KVM_CPUID_FEATURES, .reg =3D R_EAX, }, + .tcg_features =3D TCG_KVM_FEATURES, + }, + [FEAT_KVM_HINTS] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "kvm-hint-dedicated", 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, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D KVM_CPUID_FEATURES, .reg =3D R_EDX, }, + .tcg_features =3D TCG_KVM_FEATURES, + /* + * KVM hints aren't auto-enabled by -cpu host, they need to be + * explicitly enabled in the command-line. + */ + .no_autoenable_flags =3D ~0U, + }, + [FEAT_SVM] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "npt", "lbrv", "svm-lock", "nrip-save", + "tsc-scale", "vmcb-clean", "flushbyasid", "decodeassists", + NULL, NULL, "pause-filter", NULL, + "pfthreshold", "avic", NULL, "v-vmsave-vmload", + "vgif", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "vnmi", NULL, NULL, + "svme-addr-chk", NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0x8000000A, .reg =3D R_EDX, }, + .tcg_features =3D TCG_SVM_FEATURES, + }, + [FEAT_7_0_EBX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "fsgsbase", "tsc-adjust", "sgx", "bmi1", + "hle", "avx2", NULL, "smep", + "bmi2", "erms", "invpcid", "rtm", + NULL, NULL, "mpx", NULL, + "avx512f", "avx512dq", "rdseed", "adx", + "smap", "avx512ifma", "pcommit", "clflushopt", + "clwb", "intel-pt", "avx512pf", "avx512er", + "avx512cd", "sha-ni", "avx512bw", "avx512vl", + }, + .cpuid =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EBX, + }, + .tcg_features =3D TCG_7_0_EBX_FEATURES, + }, + [FEAT_7_0_ECX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, "avx512vbmi", "umip", "pku", + NULL /* ospke */, "waitpkg", "avx512vbmi2", NULL, + "gfni", "vaes", "vpclmulqdq", "avx512vnni", + "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, + "la57", NULL, NULL, NULL, + NULL, NULL, "rdpid", NULL, + "bus-lock-detect", "cldemote", NULL, "movdiri", + "movdir64b", NULL, "sgxlc", "pks", + }, + .cpuid =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_ECX, + }, + .tcg_features =3D TCG_7_0_ECX_FEATURES, + }, + [FEAT_7_0_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, "avx512-4vnniw", "avx512-4fmaps", + "fsrm", NULL, NULL, NULL, + "avx512-vp2intersect", NULL, "md-clear", NULL, + NULL, NULL, "serialize", NULL, + "tsx-ldtrk", NULL, NULL /* pconfig */, "arch-lbr", + NULL, NULL, "amx-bf16", "avx512-fp16", + "amx-tile", "amx-int8", "spec-ctrl", "stibp", + "flush-l1d", "arch-capabilities", "core-capability", "ssbd", + }, + .cpuid =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EDX, + }, + .tcg_features =3D TCG_7_0_EDX_FEATURES, + }, + [FEAT_7_1_EAX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + "avx-vnni", "avx512-bf16", NULL, "cmpccxadd", + NULL, NULL, "fzrm", "fsrs", + "fsrc", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "amx-fp16", NULL, "avx-ifma", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 1, + .reg =3D R_EAX, + }, + .tcg_features =3D TCG_7_1_EAX_FEATURES, + }, + [FEAT_7_1_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + "avx-vnni-int8", "avx-ne-convert", NULL, NULL, + "amx-complex", NULL, NULL, NULL, + NULL, NULL, "prefetchiti", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 1, + .reg =3D R_EDX, + }, + .tcg_features =3D TCG_7_1_EDX_FEATURES, + }, + [FEAT_7_2_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + NULL, "mcdt-no", 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 =3D { + .eax =3D 7, + .needs_ecx =3D true, .ecx =3D 2, + .reg =3D R_EDX, + }, + .tcg_features =3D TCG_7_2_EDX_FEATURES, + }, + [FEAT_8000_0007_EDX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "invtsc", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0x80000007, .reg =3D R_EDX, }, + .tcg_features =3D TCG_APM_FEATURES, + .unmigratable_flags =3D CPUID_APM_INVTSC, + }, + [FEAT_8000_0008_EBX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "clzero", NULL, "xsaveerptr", NULL, + NULL, NULL, NULL, NULL, + NULL, "wbnoinvd", NULL, NULL, + "ibpb", NULL, "ibrs", "amd-stibp", + NULL, "stibp-always-on", NULL, NULL, + NULL, NULL, NULL, NULL, + "amd-ssbd", "virt-ssbd", "amd-no-ssb", NULL, + "amd-psfd", NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0x80000008, .reg =3D R_EBX, }, + .tcg_features =3D TCG_8000_0008_EBX, + .unmigratable_flags =3D 0, + }, + [FEAT_8000_0021_EAX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "no-nested-data-bp", NULL, "lfence-always-serializing", NULL, + NULL, NULL, "null-sel-clr-base", NULL, + "auto-ibrs", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { .eax =3D 0x80000021, .reg =3D R_EAX, }, + .tcg_features =3D 0, + .unmigratable_flags =3D 0, + }, + [FEAT_XSAVE] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "xsaveopt", "xsavec", "xgetbv1", "xsaves", + "xfd", 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 =3D { + .eax =3D 0xd, + .needs_ecx =3D true, .ecx =3D 1, + .reg =3D R_EAX, + }, + .tcg_features =3D TCG_XSAVE_FEATURES, + }, + [FEAT_XSAVE_XSS_LO] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + 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, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 0xD, + .needs_ecx =3D true, + .ecx =3D 1, + .reg =3D R_ECX, + }, + }, + [FEAT_XSAVE_XSS_HI] =3D { + .type =3D CPUID_FEATURE_WORD, + .cpuid =3D { + .eax =3D 0xD, + .needs_ecx =3D true, + .ecx =3D 1, + .reg =3D R_EDX + }, + }, + [FEAT_6_EAX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, "arat", 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, NULL, + }, + .cpuid =3D { .eax =3D 6, .reg =3D R_EAX, }, + .tcg_features =3D TCG_6_EAX_FEATURES, + }, + [FEAT_XSAVE_XCR0_LO] =3D { + .type =3D CPUID_FEATURE_WORD, + .cpuid =3D { + .eax =3D 0xD, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EAX, + }, + .tcg_features =3D ~0U, + .migratable_flags =3D XSTATE_FP_MASK | XSTATE_SSE_MASK | + XSTATE_YMM_MASK | XSTATE_BNDREGS_MASK | XSTATE_BNDCSR_MASK | + XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi256_MASK | XSTATE_Hi16_ZMM_M= ASK | + XSTATE_PKRU_MASK, + }, + [FEAT_XSAVE_XCR0_HI] =3D { + .type =3D CPUID_FEATURE_WORD, + .cpuid =3D { + .eax =3D 0xD, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EDX, + }, + .tcg_features =3D ~0U, + }, + /*Below are MSR exposed features*/ + [FEAT_ARCH_CAPABILITIES] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + "rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry", + "ssb-no", "mds-no", "pschange-mc-no", "tsx-ctrl", + "taa-no", NULL, NULL, NULL, + NULL, "sbdr-ssdp-no", "fbsdp-no", "psdp-no", + NULL, "fb-clear", NULL, NULL, + NULL, NULL, NULL, NULL, + "pbrsb-no", NULL, "gds-no", NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_ARCH_CAPABILITIES, + }, + /* + * FEAT_ARCH_CAPABILITIES only affects a read-only MSR, which + * cannot be read from user mode. Therefore, it has no impact + > on any user-mode operation, and warnings about unsupported + * features do not matter. + */ + .tcg_features =3D ~0U, + }, + [FEAT_CORE_CAPABILITY] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + NULL, "split-lock-detect", 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, + }, + .msr =3D { + .index =3D MSR_IA32_CORE_CAPABILITY, + }, + }, + [FEAT_PERF_CAPABILITIES] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "full-width-write", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_PERF_CAPABILITIES, + }, + }, + + [FEAT_VMX_PROCBASED_CTLS] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, "vmx-vintr-pending", "vmx-tsc-offset", + NULL, NULL, NULL, "vmx-hlt-exit", + NULL, "vmx-invlpg-exit", "vmx-mwait-exit", "vmx-rdpmc-exit", + "vmx-rdtsc-exit", NULL, NULL, "vmx-cr3-load-noexit", + "vmx-cr3-store-noexit", NULL, NULL, "vmx-cr8-load-exit", + "vmx-cr8-store-exit", "vmx-flexpriority", "vmx-vnmi-pending", = "vmx-movdr-exit", + "vmx-io-exit", "vmx-io-bitmap", NULL, "vmx-mtf", + "vmx-msr-bitmap", "vmx-monitor-exit", "vmx-pause-exit", "vmx-s= econdary-ctls", + }, + .msr =3D { + .index =3D MSR_IA32_VMX_TRUE_PROCBASED_CTLS, + } + }, + + [FEAT_VMX_SECONDARY_CTLS] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + "vmx-apicv-xapic", "vmx-ept", "vmx-desc-exit", "vmx-rdtscp-exi= t", + "vmx-apicv-x2apic", "vmx-vpid", "vmx-wbinvd-exit", "vmx-unrest= ricted-guest", + "vmx-apicv-register", "vmx-apicv-vid", "vmx-ple", "vmx-rdrand-= exit", + "vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs", "vmx-encl= s-exit", + "vmx-rdseed-exit", "vmx-pml", NULL, NULL, + "vmx-xsaves", NULL, NULL, NULL, + NULL, "vmx-tsc-scaling", "vmx-enable-user-wait-pause", NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_PROCBASED_CTLS2, + } + }, + + [FEAT_VMX_PINBASED_CTLS] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + "vmx-intr-exit", NULL, NULL, "vmx-nmi-exit", + NULL, "vmx-vnmi", "vmx-preemption-timer", "vmx-posted-intr", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_TRUE_PINBASED_CTLS, + } + }, + + [FEAT_VMX_EXIT_CTLS] =3D { + .type =3D MSR_FEATURE_WORD, + /* + * VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE is copied from + * the LM CPUID bit. + */ + .feat_names =3D { + NULL, NULL, "vmx-exit-nosave-debugctl", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL /* vmx-exit-host-addr-space-size */, NULL, NULL, + "vmx-exit-load-perf-global-ctrl", NULL, NULL, "vmx-exit-ack-in= tr", + NULL, NULL, "vmx-exit-save-pat", "vmx-exit-load-pat", + "vmx-exit-save-efer", "vmx-exit-load-efer", + "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs", + NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL, + NULL, "vmx-exit-load-pkrs", NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_TRUE_EXIT_CTLS, + } + }, + + [FEAT_VMX_ENTRY_CTLS] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, "vmx-entry-noload-debugctl", NULL, + NULL, NULL, NULL, NULL, + NULL, "vmx-entry-ia32e-mode", NULL, NULL, + NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat",= "vmx-entry-load-efer", + "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NUL= L, + NULL, NULL, "vmx-entry-load-pkrs", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_TRUE_ENTRY_CTLS, + } + }, + + [FEAT_VMX_MISC] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + NULL, NULL, NULL, NULL, + NULL, "vmx-store-lma", "vmx-activity-hlt", "vmx-activity-shutd= own", + "vmx-activity-wait-sipi", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, "vmx-vmwrite-vmexit-fields", "vmx-zero-len-inject", NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_MISC, + } + }, + + [FEAT_VMX_EPT_VPID_CAPS] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + "vmx-ept-execonly", NULL, NULL, NULL, + NULL, NULL, "vmx-page-walk-4", "vmx-page-walk-5", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "vmx-ept-2mb", "vmx-ept-1gb", NULL, NULL, + "vmx-invept", "vmx-eptad", "vmx-ept-advanced-exitinfo", NULL, + NULL, "vmx-invept-single-context", "vmx-invept-all-context", N= ULL, + NULL, NULL, NULL, NULL, + "vmx-invvpid", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "vmx-invvpid-single-addr", "vmx-invept-single-context", + "vmx-invvpid-all-context", "vmx-invept-single-context-nogl= obals", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr =3D { + .index =3D MSR_IA32_VMX_EPT_VPID_CAP, + } + }, + + [FEAT_VMX_BASIC] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + [54] =3D "vmx-ins-outs", + [55] =3D "vmx-true-ctls", + [56] =3D "vmx-any-errcode", + }, + .msr =3D { + .index =3D MSR_IA32_VMX_BASIC, + }, + /* Just to be safe - we don't support setting the MSEG version fie= ld. */ + .no_autoenable_flags =3D MSR_VMX_BASIC_DUAL_MONITOR, + }, + + [FEAT_VMX_VMFUNC] =3D { + .type =3D MSR_FEATURE_WORD, + .feat_names =3D { + [0] =3D "vmx-eptp-switching", + }, + .msr =3D { + .index =3D MSR_IA32_VMX_VMFUNC, + } + }, + + [FEAT_14_0_ECX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + 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, + NULL, NULL, NULL, "intel-pt-lip", + }, + .cpuid =3D { + .eax =3D 0x14, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_ECX, + }, + .tcg_features =3D TCG_14_0_ECX_FEATURES, + }, + + [FEAT_SGX_12_0_EAX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "sgx1", "sgx2", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, "sgx-edeccssa", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 0x12, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EAX, + }, + .tcg_features =3D TCG_SGX_12_0_EAX_FEATURES, + }, + + [FEAT_SGX_12_0_EBX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + "sgx-exinfo" , 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, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 0x12, + .needs_ecx =3D true, .ecx =3D 0, + .reg =3D R_EBX, + }, + .tcg_features =3D TCG_SGX_12_0_EBX_FEATURES, + }, + + [FEAT_SGX_12_1_EAX] =3D { + .type =3D CPUID_FEATURE_WORD, + .feat_names =3D { + NULL, "sgx-debug", "sgx-mode64", NULL, + "sgx-provisionkey", "sgx-tokenkey", NULL, "sgx-kss", + NULL, NULL, "sgx-aex-notify", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid =3D { + .eax =3D 0x12, + .needs_ecx =3D true, .ecx =3D 1, + .reg =3D R_EAX, + }, + .tcg_features =3D TCG_SGX_12_1_EAX_FEATURES, + }, +}; --=20 2.43.0