Add AMD znver3 processor support

gas/

	* config/tc-i386.c (cpu_arch): Add CPU_ZNVER3_FLAGS flags.
	(i386_align_code): Add PROCESSOR_ZNVER cases.
	* doc/c-i386.texi: Add znver3, snp, invlpgb and tlbsync.
	* gas/i386/i386.exp: Add new znver3 test cases.
	* gas/i386/arch-14-znver3.d: New.
	* gas/i386/arch-14.d: New.
	* gas/i386/arch-14.s: New.
	* gas/i386/invlpgb.d: New.
	* gas/i386/invlpgb64.d: New.
	* gas/i386/invlpgb.s: New.
	* gas/i386/snp.d: New.
	* gas/i386/snp64.d: New.
	* gas/i386/snp.s: New.
	* gas/i386/tlbsync.d: New.
	* gas/i386/tlbsync.s: New.
	* gas/i386/x86-64-arch-4-znver3.d: New.
	* gas/i386/x86-64-arch-4.d: New.
	* gas/i386/x86-64-arch-4.s: New.

opcodes/

	* i386-dis.c (rm_table): Add tlbsync, snp, invlpgb.
	* i386-gen.c (cpu_flag_init): Add new CPU_INVLPGB_FLAGS,
	CPU_TLBSYNC_FLAGS, and CPU_SNP_FLAGS.
	Add CPU_ZNVER3_FLAGS.
	(cpu_flags): Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
	* i386-opc.h: Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
	* i386-opc.tbl: Add invlpgb, tlbsync, psmash, pvalidate,
	rmpupdate, rmpadjust.
	* i386-init.h: Re-generated.
	* i386-tbl.h: Re-generated.
This commit is contained in:
Ganesh Gopalasubramanian 2020-10-20 23:56:58 +05:30 committed by H.J. Lu
parent c4464adef2
commit 646cc3e010
25 changed files with 4757 additions and 4216 deletions

View File

@ -1,3 +1,24 @@
2020-10-20 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
* config/tc-i386.c (cpu_arch): Add CPU_ZNVER3_FLAGS flags.
(i386_align_code): Add PROCESSOR_ZNVER cases.
* doc/c-i386.texi: Add znver3, snp, invlpgb and tlbsync.
* gas/i386/i386.exp: Add new znver3 test cases.
* gas/i386/arch-14-znver3.d: New.
* gas/i386/arch-14.d: New.
* gas/i386/arch-14.s: New.
* gas/i386/invlpgb.d: New.
* gas/i386/invlpgb64.d: New.
* gas/i386/invlpgb.s: New.
* gas/i386/snp.d: New.
* gas/i386/snp64.d: New.
* gas/i386/snp.s: New.
* gas/i386/tlbsync.d: New.
* gas/i386/tlbsync.s: New.
* gas/i386/x86-64-arch-4-znver3.d: New.
* gas/i386/x86-64-arch-4.d: New.
* gas/i386/x86-64-arch-4.s: New.
2020-10-17 H.J. Lu <hongjiu.lu@intel.com>
PR gas/25878

View File

@ -1014,6 +1014,8 @@ static const arch_entry cpu_arch[] =
CPU_ZNVER1_FLAGS, 0 },
{ STRING_COMMA_LEN ("znver2"), PROCESSOR_ZNVER,
CPU_ZNVER2_FLAGS, 0 },
{ STRING_COMMA_LEN ("znver3"), PROCESSOR_ZNVER,
CPU_ZNVER3_FLAGS, 0 },
{ STRING_COMMA_LEN ("btver1"), PROCESSOR_BT,
CPU_BTVER1_FLAGS, 0 },
{ STRING_COMMA_LEN ("btver2"), PROCESSOR_BT,

View File

@ -125,6 +125,7 @@ processor names are recognized:
@code{bdver4},
@code{znver1},
@code{znver2},
@code{znver3},
@code{btver1},
@code{btver2},
@code{generic32} and
@ -285,6 +286,9 @@ accept various extension mnemonics. For example,
@code{3dnowa},
@code{sse4a},
@code{sse5},
@code{snp},
@code{invlpgb},
@code{tlbsync},
@code{svme} and
@code{padlock}.
Note that rather than extending a basic instruction set, the extension
@ -1496,8 +1500,8 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{corei7} @tab @samp{l1om} @tab @samp{k1om} @tab @samp{iamcu}
@item @samp{k6} @tab @samp{k6_2} @tab @samp{athlon} @tab @samp{k8}
@item @samp{amdfam10} @tab @samp{bdver1} @tab @samp{bdver2} @tab @samp{bdver3}
@item @samp{bdver4} @tab @samp{znver1} @tab @samp{znver2} @tab @samp{btver1}
@item @samp{btver2} @tab @samp{generic32} @tab @samp{generic64}
@item @samp{bdver4} @tab @samp{znver1} @tab @samp{znver2} @tab @samp{znver3}
@item @samp{btver1} @tab @samp{btver2} @tab @samp{generic32} @tab @samp{generic64}
@item @samp{.cmov} @tab @samp{.fxsr} @tab @samp{.mmx}
@item @samp{.sse} @tab @samp{.sse2} @tab @samp{.sse3} @tab @samp{.sse4a}
@item @samp{.ssse3} @tab @samp{.sse4.1} @tab @samp{.sse4.2} @tab @samp{.sse4}
@ -1526,7 +1530,8 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{.syscall} @tab @samp{.rdtscp} @tab @samp{.svme}
@item @samp{.lwp} @tab @samp{.fma4} @tab @samp{.xop} @tab @samp{.cx16}
@item @samp{.padlock} @tab @samp{.clzero} @tab @samp{.mwaitx} @tab @samp{.rdpru}
@item @samp{.mcommit} @tab @samp{.sev_es}
@item @samp{.mcommit} @tab @samp{.sev_es} @tab @samp{.snp} @tab @samp{.invlpgb}
@item @samp{.tlbsync}
@end multitable
Apart from the warning, there are only two other effects on

View File

@ -0,0 +1,5 @@
#source: arch-14.s
#as: -march=znver3
#objdump: -dw
#name: i386 arch 14 (znver3)
#dump: arch-14.d

View File

@ -0,0 +1,14 @@
#objdump: -dw
#name: i386 arch 14
.*: file format .*
Disassembly of section .text:
0+ <.text>:
[ ]*[0-9a-f]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[ ]*[0-9a-f]+:[ ]+0f 01 ff[ ]+tlbsync[ ]*
[ ]*[a-f0-9]+:[ ]*f2 0f 01 ff[ ]+pvalidate[ ]*
[ ]*[a-f0-9]+:[ ]*0f 01 ee[ ]+rdpkru[ ]*
[ ]*[a-f0-9]+:[ ]*0f 01 ef[ ]+wrpkru[ ]*
#pass

View File

@ -0,0 +1,12 @@
# Test -march=
.text
#INVLPGB
invlpgb
#TLBSYNC
tlbsync
#SNP - Secure Nested Paging support
pvalidate
#OSPKE
rdpkru
wrpkru

View File

@ -183,6 +183,7 @@ if [gas_32_check] then {
run_dump_test "arch-10-bdver4"
run_dump_test "arch-13-znver1"
run_dump_test "arch-13-znver2"
run_dump_test "arch-14-znver3"
run_dump_test "arch-10-btver1"
run_dump_test "arch-10-btver2"
run_list_test "arch-10-1" "-march=generic32 -I${srcdir}/$subdir -al"
@ -192,6 +193,7 @@ if [gas_32_check] then {
run_dump_test "arch-11"
run_dump_test "arch-12"
run_dump_test "arch-13"
run_dump_test "arch-14"
run_dump_test "8087"
run_dump_test "287"
run_dump_test "387"
@ -462,6 +464,9 @@ if [gas_32_check] then {
run_list_test "avx-vnni-inval"
run_list_test "sg"
run_dump_test "clzero"
run_dump_test "invlpgb"
run_dump_test "tlbsync"
run_dump_test "snp"
run_dump_test "disassem"
run_dump_test "mwaitx-bdver4"
run_list_test "mwaitx-reg"
@ -755,6 +760,8 @@ if [gas_64_check] then {
run_dump_test "movz64"
run_dump_test "x86-64-relax-1"
run_dump_test "svme64"
run_dump_test "snp64"
run_dump_test "invlpgb64"
run_dump_test "x86-64-amdfam10"
run_dump_test "x86-64-vmx"
run_dump_test "x86-64-vmfunc"
@ -843,6 +850,7 @@ if [gas_64_check] then {
run_dump_test "x86-64-arch-1"
run_dump_test "x86-64-arch-2"
run_dump_test "x86-64-arch-3"
run_dump_test "x86-64-arch-4"
run_dump_test "x86-64-arch-2-lzcnt"
run_dump_test "x86-64-arch-2-prefetchw"
run_dump_test "x86-64-arch-2-bdver1"
@ -851,6 +859,7 @@ if [gas_64_check] then {
run_dump_test "x86-64-arch-2-bdver4"
run_dump_test "x86-64-arch-3-znver1"
run_dump_test "x86-64-arch-3-znver2"
run_dump_test "x86-64-arch-4-znver3"
run_dump_test "x86-64-arch-2-btver1"
run_dump_test "x86-64-arch-2-btver2"
run_list_test "x86-64-arch-2-1" "-march=generic64 -I${srcdir}/$subdir -al"

View File

@ -0,0 +1,14 @@
#objdump: -dw
#name: 32-bit INVLPGB insn
.*: +file format .*
Disassembly of section \.text:
00000000 <_start>:
[ ]*[a-f0-9]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[0-9a-f]+ <att32>:
[ ]*[a-f0-9]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[0-9a-f]+ <att16>:
[ ]*[a-f0-9]+:[ ]+67 0f 01 fe[ ]+addr16 invlpgb[ ]*
#pass

View File

@ -0,0 +1,15 @@
# Check INVLPGB instructions
.text
_start:
invlpgb
.ifdef __amd64__
att64:
invlpgb %rax, %edx
.endif
att32:
invlpgb %eax, %edx
.ifndef __amd64__
att16:
invlpgb %ax, %edx
.endif

View File

@ -0,0 +1,16 @@
#as: --defsym __amd64__=1
#objdump: -dw
#name: 64-bit INVLPGB insn
#source: invlpgb.s
.*: +file format .*
Disassembly of section \.text:
0+000 <_start>:
[ ]*[a-f0-9]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[0-9a-f]+ <att64>:
[ ]*[a-f0-9]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[0-9a-f]+ <att32>:
[ ]*[a-f0-9]+:[ ]+67 0f 01 fe[ ]+addr32 invlpgb[ ]*
#pass

View File

@ -0,0 +1,13 @@
#objdump: -dw
#name: 32-bit SNP insn
.*: +file format .*
Disassembly of section \.text:
00000000 <att32>:
[ ]*[a-f0-9]+:[ ]+f2 0f 01 ff[ ]+pvalidate[ ]*
[ ]*[a-f0-9]+:[ ]+f2 0f 01 ff[ ]+pvalidate[ ]*
[ ]*[a-f0-9]+:[ ]+67 f2 0f 01 ff[ ]+addr16 pvalidate[ ]*
#pass

View File

@ -0,0 +1,23 @@
# Check SNP instructions
.text
.ifdef __amd64__
att64:
psmash %rax
psmash
psmash %eax
pvalidate %rax
pvalidate %eax
rmpupdate %rax
rmpupdate
rmpupdate %eax
rmpadjust %rax
rmpadjust
rmpadjust %eax
.endif
.ifndef __amd64__
att32:
pvalidate
pvalidate %eax
pvalidate %ax
.endif

View File

@ -0,0 +1,23 @@
#as: --defsym __amd64__=1
#objdump: -dw
#name: 64-bit SNP insn
#source: snp.s
.*: +file format .*
Disassembly of section \.text:
0+000 <att64>:
[ ]*[a-f0-9]+:[ ]+f3 0f 01 ff[ ]+psmash[ ]*
[ ]*[a-f0-9]+:[ ]+f3 0f 01 ff[ ]+psmash[ ]*
[ ]*[a-f0-9]+:[ ]+67 f3 0f 01 ff[ ]+addr32 psmash[ ]*
[ ]*[a-f0-9]+:[ ]+f2 0f 01 ff[ ]+pvalidate[ ]*
[ ]*[a-f0-9]+:[ ]+67 f2 0f 01 ff[ ]+addr32 pvalidate[ ]*
[ ]*[a-f0-9]+:[ ]+f2 0f 01 fe[ ]+rmpupdate[ ]*
[ ]*[a-f0-9]+:[ ]+f2 0f 01 fe[ ]+rmpupdate[ ]*
[ ]*[a-f0-9]+:[ ]+67 f2 0f 01 fe[ ]+addr32 rmpupdate[ ]*
[ ]*[a-f0-9]+:[ ]+f3 0f 01 fe[ ]+rmpadjust[ ]*
[ ]*[a-f0-9]+:[ ]+f3 0f 01 fe[ ]+rmpadjust[ ]*
[ ]*[a-f0-9]+:[ ]+67 f3 0f 01 fe[ ]+addr32 rmpadjust[ ]*
#pass

View File

@ -0,0 +1,11 @@
#objdump: -dw
#name: i386 TLBSYNC insn
.*: +file format .*
Disassembly of section \.text:
00000000 <_start>:
[ ]*[a-f0-9]+: 0f 01 ff tlbsync[ ]*
#pass

View File

@ -0,0 +1,5 @@
# Check TLBSYNC instructions
.text
_start:
tlbsync

View File

@ -0,0 +1,5 @@
#source: x86-64-arch-4.s
#as: -march=znver3
#objdump: -dw
#name: x86-64 arch 4 (znver3)
#dump: x86-64-arch-4.d

View File

@ -0,0 +1,33 @@
#objdump: -dw
#name: x86-64 arch 4
.*: file format .*
Disassembly of section .text:
0+ <.text>:
[ ]*[0-9a-f]+:[ ]+0f 01 fe[ ]+invlpgb[ ]*
[ ]*[0-9a-f]+:[ ]+0f 01 ff[ ]+tlbsync[ ]*
[ ]*[a-f0-9]+:[ ]*c4 43 35 44 d0 ab[ ]*vpclmulqdq \$0xab,%ymm8,%ymm9,%ymm10
[ ]*[a-f0-9]+:[ ]*c4 23 35 44 94 f0 24 01 00 00 7b[ ]*vpclmulqdq \$0x7b,0x124\(%rax,%r14,8\),%ymm9,%ymm10
[ ]*[a-f0-9]+:[ ]*c4 63 35 44 92 e0 0f 00 00 7b[ ]*vpclmulqdq \$0x7b,0xfe0\(%rdx\),%ymm9,%ymm10
[ ]*[a-f0-9]+:[ ]*c4 43 25 44 e2 11[ ]*vpclmulhqhqdq %ymm10,%ymm11,%ymm12
[ ]*[a-f0-9]+:[ ]*c4 43 1d 44 eb 01[ ]*vpclmulhqlqdq %ymm11,%ymm12,%ymm13
[ ]*[a-f0-9]+:[ ]*c4 43 15 44 f4 10[ ]*vpclmullqhqdq %ymm12,%ymm13,%ymm14
[ ]*[a-f0-9]+:[ ]*c4 43 0d 44 fd 00[ ]*vpclmullqlqdq %ymm13,%ymm14,%ymm15
[ ]*[a-f0-9]+: c4 e2 4d dc d4[ ]+vaesenc %ymm4,%ymm6,%ymm2
[ ]*[a-f0-9]+: c4 e2 4d dc 39[ ]+vaesenc \(%rcx\),%ymm6,%ymm7
[ ]*[a-f0-9]+: c4 e2 4d dd d4[ ]+vaesenclast %ymm4,%ymm6,%ymm2
[ ]*[a-f0-9]+: c4 e2 4d dd 39[ ]+vaesenclast \(%rcx\),%ymm6,%ymm7
[ ]*[a-f0-9]+: c4 e2 4d de d4[ ]+vaesdec %ymm4,%ymm6,%ymm2
[ ]*[a-f0-9]+: c4 e2 4d de 39[ ]+vaesdec \(%rcx\),%ymm6,%ymm7
[ ]*[a-f0-9]+: c4 e2 4d df d4[ ]+vaesdeclast %ymm4,%ymm6,%ymm2
[ ]*[a-f0-9]+: c4 e2 4d df 39[ ]+vaesdeclast \(%rcx\),%ymm6,%ymm7
[ ]*[a-f0-9]+: f3 0f 01 ff[ ]+psmash[ ]*
[ ]*[a-f0-9]+: f2 0f 01 ff[ ]+pvalidate[ ]*
[ ]*[a-f0-9]+: f2 0f 01 fe[ ]+rmpupdate[ ]*
[ ]*[a-f0-9]+: f3 0f 01 fe[ ]+rmpadjust[ ]*
[ ]*[a-f0-9]+: 66 0f 38 82 10[ ]+invpcid \(%rax\),%rdx
[ ]*[a-f0-9]+: 0f 01 ee[ ]+rdpkru[ ]*
[ ]*[a-f0-9]+: 0f 01 ef[ ]+wrpkru[ ]*
#pass

View File

@ -0,0 +1,34 @@
# Test -march=
.text
#INVLPGB
invlpgb
#TLBSYNC
tlbsync
#VPCLMUL 256 datapath
vpclmulqdq $0xab, %ymm8, %ymm9, %ymm10
vpclmulqdq $123, 0x124(%rax,%r14,8), %ymm9, %ymm10
vpclmulqdq $123, 4064(%rdx), %ymm9, %ymm10
vpclmulhqhqdq %ymm10, %ymm11, %ymm12
vpclmulhqlqdq %ymm11, %ymm12, %ymm13
vpclmullqhqdq %ymm12, %ymm13, %ymm14
vpclmullqlqdq %ymm13, %ymm14, %ymm15
#VAES
vaesenc %ymm4,%ymm6,%ymm2
vaesenc (%rcx),%ymm6,%ymm7
vaesenclast %ymm4,%ymm6,%ymm2
vaesenclast (%rcx),%ymm6,%ymm7
vaesdec %ymm4,%ymm6,%ymm2
vaesdec (%rcx),%ymm6,%ymm7
vaesdeclast %ymm4,%ymm6,%ymm2
vaesdeclast (%rcx),%ymm6,%ymm7
#SNP - Secure Nested Paging support
psmash
pvalidate
rmpupdate
rmpadjust
#INVPCID
invpcid (%rax), %rdx
#OSPKE
rdpkru
wrpkru

View File

@ -1,3 +1,16 @@
2020-10-20 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
* i386-dis.c (rm_table): Add tlbsync, snp, invlpgb.
* i386-gen.c (cpu_flag_init): Add new CPU_INVLPGB_FLAGS,
CPU_TLBSYNC_FLAGS, and CPU_SNP_FLAGS.
Add CPU_ZNVER3_FLAGS.
(cpu_flags): Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
* i386-opc.h: Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
* i386-opc.tbl: Add invlpgb, tlbsync, psmash, pvalidate,
rmpupdate, rmpadjust.
* i386-init.h: Re-generated.
* i386-tbl.h: Re-generated.
2020-10-16 Lili Cui <lili.cui@intel.com>
* i386-opc.tbl: Rename CpuVEX_PREFIX to PseudoVexPrefix

View File

@ -969,6 +969,8 @@ enum
PREFIX_0F01_REG_5_MOD_3_RM_6,
PREFIX_0F01_REG_5_MOD_3_RM_7,
PREFIX_0F01_REG_7_MOD_3_RM_2,
PREFIX_0F01_REG_7_MOD_3_RM_6,
PREFIX_0F01_REG_7_MOD_3_RM_7,
PREFIX_0F09,
PREFIX_0F10,
PREFIX_0F11,
@ -1202,6 +1204,9 @@ enum
X86_64_0F01_REG_5_MOD_3_RM_5_PREFIX_1,
X86_64_0F01_REG_5_MOD_3_RM_6_PREFIX_1,
X86_64_0F01_REG_5_MOD_3_RM_7_PREFIX_1,
X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_1,
X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_3,
X86_64_0F01_REG_7_MOD_3_RM_7_PREFIX_1,
X86_64_0FC7_REG_6_MOD_3_PREFIX_1
};
@ -3210,6 +3215,22 @@ static const struct dis386 prefix_table[][4] = {
{ "mcommit", { Skip_MODRM }, 0 },
},
/* PREFIX_0F01_REG_7_MOD_3_RM_6 */
{
{ "invlpgb", { Skip_MODRM }, 0 },
{ X86_64_TABLE (X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_1) },
{ Bad_Opcode },
{ X86_64_TABLE (X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_3) },
},
/* PREFIX_0F01_REG_7_MOD_3_RM_7 */
{
{ "tlbsync", { Skip_MODRM }, 0 },
{ X86_64_TABLE (X86_64_0F01_REG_7_MOD_3_RM_7_PREFIX_1) },
{ Bad_Opcode },
{ "pvalidate", { Skip_MODRM }, 0 },
},
/* PREFIX_0F09 */
{
{ "wbinvd", { XX }, 0 },
@ -4384,6 +4405,24 @@ static const struct dis386 x86_64_table[][2] = {
{ "stui", { Skip_MODRM }, 0 },
},
/* X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_1 */
{
{ Bad_Opcode },
{ "rmpadjust", { Skip_MODRM }, 0 },
},
/* X86_64_0F01_REG_7_MOD_3_RM_6_PREFIX_3 */
{
{ Bad_Opcode },
{ "rmpupdate", { Skip_MODRM }, 0 },
},
/* X86_64_0F01_REG_7_MOD_3_RM_7_PREFIX_1 */
{
{ Bad_Opcode },
{ "psmash", { Skip_MODRM }, 0 },
},
/* X86_64_0FC7_REG_6_MOD_3_PREFIX_1 */
{
{ Bad_Opcode },
@ -8990,6 +9029,8 @@ static const struct dis386 rm_table[][8] = {
{ "mwaitx", { { OP_Mwait, eBX_reg } }, PREFIX_OPCODE },
{ "clzero", { Skip_MODRM }, 0 },
{ "rdpru", { Skip_MODRM }, 0 },
{ PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_6) },
{ PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_7) },
},
{
/* RM_0F1E_P_1_MOD_3_REG_7 */

View File

@ -103,6 +103,8 @@ static initializer cpu_flag_init[] =
"CPU_GENERIC64_FLAGS|CpuFISTTP|CpuRdtscp|CpuCX16|CPU_AVX2_FLAGS|CpuSSE4A|CpuLZCNT|CpuPOPCNT|CpuSVME|CpuAES|CpuPCLMUL|CpuPRFCHW|CpuFMA|CpuBMI|CpuF16C|CpuXsaveopt|CpuFSGSBase|CpuMovbe|CpuBMI2|CpuRdRnd|CpuADX|CpuRdSeed|CpuSMAP|CpuSHA|CpuXSAVEC|CpuXSAVES|CpuClflushOpt|CpuCLZERO|CpuMWAITX" },
{ "CPU_ZNVER2_FLAGS",
"CPU_ZNVER1_FLAGS|CpuCLWB|CpuRDPID|CpuRDPRU|CpuMCOMMIT|CpuWBNOINVD" },
{ "CPU_ZNVER3_FLAGS",
"CPU_ZNVER2_FLAGS|CpuINVLPGB|CpuTLBSYNC|CpuVAES|CpuVPCLMULQDQ|CpuINVPCID|CpuSNP|CpuOSPKE" },
{ "CPU_BTVER1_FLAGS",
"CPU_GENERIC64_FLAGS|CpuFISTTP|CpuCX16|CpuRdtscp|CPU_SSSE3_FLAGS|CpuSSE4A|CpuLZCNT|CpuPOPCNT|CpuPRFCHW|CpuCX16|CpuClflush|CpuFISTTP|CpuSVME" },
{ "CPU_BTVER2_FLAGS",
@ -333,6 +335,12 @@ static initializer cpu_flag_init[] =
"CpuWideKL" },
{ "CPU_HRESET_FLAGS",
"CpuHRESET"},
{ "CPU_INVLPGB_FLAGS",
"CpuINVLPGB" },
{ "CPU_TLBSYNC_FLAGS",
"CpuTLBSYNC" },
{ "CPU_SNP_FLAGS",
"CpuSNP" },
{ "CPU_ANY_X87_FLAGS",
"CPU_ANY_287_FLAGS|Cpu8087" },
{ "CPU_ANY_287_FLAGS",
@ -666,6 +674,9 @@ static bitfield cpu_flags[] =
BITFIELD (CpuKL),
BITFIELD (CpuWideKL),
BITFIELD (CpuHRESET),
BITFIELD (CpuINVLPGB),
BITFIELD (CpuTLBSYNC),
BITFIELD (CpuSNP),
#ifdef CpuUnused
BITFIELD (CpuUnused),
#endif

File diff suppressed because it is too large Load Diff

View File

@ -271,6 +271,12 @@ enum
CpuWideKL,
/* HRESET instruction required */
CpuHRESET,
/* INVLPGB instructions required */
CpuINVLPGB,
/* TLBSYNC instructions required */
CpuTLBSYNC,
/* SNP instructions required */
CpuSNP,
/* 64bit support required */
Cpu64,
/* Not supported in the 64bit mode */
@ -414,6 +420,9 @@ typedef union i386_cpu_flags
unsigned int cpukl:1;
unsigned int cpuwidekl:1;
unsigned int cpuhreset:1;
unsigned int cpuinvlpgb:1;
unsigned int cputlbsync:1;
unsigned int cpusnp:1;
unsigned int cpu64:1;
unsigned int cpuno64:1;
#ifdef CpuUnused

View File

@ -3960,6 +3960,19 @@ vpclmulhqhqdq, 3, 0x6644, 0x11, 1, CpuVPCLMULQDQ|CpuAVX512F, Modrm|OpcodePrefix=
// AVX512 + VPCLMULQDQ instructions end
// INVLPGB instructions
invlpgb, 0, 0xf01fe, None, 3, CpuINVLPGB, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
invlpgb, 2, 0xf01fe, None, 3, CpuINVLPGB, AddrPrefixOpReg, { Acc|Word|Dword|Qword, RegD|Dword }
// INVLPGB instructions end
// TLBSYNC instructions
tlbsync, 0, 0xf01ff, None, 3, CpuTLBSYNC, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
// TLBSYNC instructions end
// CLZERO instructions
clzero, 0, 0xf01fc, None, 3, CpuCLZERO, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
@ -4092,6 +4105,19 @@ mcommit, 0, 0x0f01fa, None, 3, CpuMCOMMIT, Prefix_0XF3|No_bSuf|No_wSuf|No_lSuf|N
// MCOMMIT instruction end
// SNP instructions
psmash, 0, 0xf01ff, None, 3, CpuSNP|Cpu64, Prefix_0XF3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
psmash, 1, 0xf01ff, None, 3, CpuSNP|Cpu64, AddrPrefixOpReg|Prefix_0XF3, { Acc|Dword|Qword }
pvalidate, 0, 0xf01ff, None, 3, CpuSNP, Prefix_0XF2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
pvalidate, 1, 0xf01ff, None, 3, CpuSNP, AddrPrefixOpReg|Prefix_0XF2, { Acc|Word|Dword|Qword }
rmpupdate, 0, 0xf01fe, None, 3, CpuSNP|Cpu64, Prefix_0XF2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
rmpupdate, 1, 0xf01fe, None, 3, CpuSNP|Cpu64, AddrPrefixOpReg|Prefix_0XF2, { Acc|Dword|Qword }
rmpadjust, 0, 0xf01fe, None, 3, CpuSNP|Cpu64, Prefix_0XF3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
rmpadjust, 1, 0xf01fe, None, 3, CpuSNP|Cpu64, AddrPrefixOpReg|Prefix_0XF3, { Acc|Dword|Qword }
// SNP instructions end
// RDPRU instruction
rdpru, 0, 0x0f01fd, None, 3, CpuRDPRU, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }

File diff suppressed because it is too large Load Diff