Messages in this thread | | | Date | Mon, 18 Nov 2019 20:40:45 +0900 | From | Masami Hiramatsu <> | Subject | Re: [PATCH 2/2] x86/insn: Add some Intel instructions to the opcode map |
| |
Hi Adrian,
On Fri, 15 Nov 2019 15:54:47 +0200 Adrian Hunter <adrian.hunter@intel.com> wrote:
> Add to the opcode map the following instructions: > cldemote > tpause > umonitor > umwait > movdiri > movdir64b > enqcmd > enqcmds > encls > enclu > enclv > pconfig > wbnoinvd > > For information about the instructions, refer Intel SDM May 2019 > (325462-070US) and Intel Architecture Instruction Set Extensions > May 2019 (319433-037). > > The instruction decoding can be tested using the perf tools' > "x86 instruction decoder - new instructions" test as folllows: > > $ perf test -v "new " 2>&1 | grep -i cldemote > Decoded ok: 0f 1c 00 cldemote (%eax) > Decoded ok: 0f 1c 05 78 56 34 12 cldemote 0x12345678 > Decoded ok: 0f 1c 84 c8 78 56 34 12 cldemote 0x12345678(%eax,%ecx,8) > Decoded ok: 0f 1c 00 cldemote (%rax) > Decoded ok: 41 0f 1c 00 cldemote (%r8) > Decoded ok: 0f 1c 04 25 78 56 34 12 cldemote 0x12345678 > Decoded ok: 0f 1c 84 c8 78 56 34 12 cldemote 0x12345678(%rax,%rcx,8) > Decoded ok: 41 0f 1c 84 c8 78 56 34 12 cldemote 0x12345678(%r8,%rcx,8) > $ perf test -v "new " 2>&1 | grep -i tpause > Decoded ok: 66 0f ae f3 tpause %ebx > Decoded ok: 66 0f ae f3 tpause %ebx > Decoded ok: 66 41 0f ae f0 tpause %r8d > $ perf test -v "new " 2>&1 | grep -i umonitor > Decoded ok: 67 f3 0f ae f0 umonitor %ax > Decoded ok: f3 0f ae f0 umonitor %eax > Decoded ok: 67 f3 0f ae f0 umonitor %eax > Decoded ok: f3 0f ae f0 umonitor %rax > Decoded ok: 67 f3 41 0f ae f0 umonitor %r8d > $ perf test -v "new " 2>&1 | grep -i umwait > Decoded ok: f2 0f ae f0 umwait %eax > Decoded ok: f2 0f ae f0 umwait %eax > Decoded ok: f2 41 0f ae f0 umwait %r8d > $ perf test -v "new " 2>&1 | grep -i movdiri > Decoded ok: 0f 38 f9 03 movdiri %eax,(%ebx) > Decoded ok: 0f 38 f9 88 78 56 34 12 movdiri %ecx,0x12345678(%eax) > Decoded ok: 48 0f 38 f9 03 movdiri %rax,(%rbx) > Decoded ok: 48 0f 38 f9 88 78 56 34 12 movdiri %rcx,0x12345678(%rax) > $ perf test -v "new " 2>&1 | grep -i movdir64b > Decoded ok: 66 0f 38 f8 18 movdir64b (%eax),%ebx > Decoded ok: 66 0f 38 f8 88 78 56 34 12 movdir64b 0x12345678(%eax),%ecx > Decoded ok: 67 66 0f 38 f8 1c movdir64b (%si),%bx > Decoded ok: 67 66 0f 38 f8 8c 34 12 movdir64b 0x1234(%si),%cx > Decoded ok: 66 0f 38 f8 18 movdir64b (%rax),%rbx > Decoded ok: 66 0f 38 f8 88 78 56 34 12 movdir64b 0x12345678(%rax),%rcx > Decoded ok: 67 66 0f 38 f8 18 movdir64b (%eax),%ebx > Decoded ok: 67 66 0f 38 f8 88 78 56 34 12 movdir64b 0x12345678(%eax),%ecx > $ perf test -v "new " 2>&1 | grep -i enqcmd > Decoded ok: f2 0f 38 f8 18 enqcmd (%eax),%ebx > Decoded ok: f2 0f 38 f8 88 78 56 34 12 enqcmd 0x12345678(%eax),%ecx > Decoded ok: 67 f2 0f 38 f8 1c enqcmd (%si),%bx > Decoded ok: 67 f2 0f 38 f8 8c 34 12 enqcmd 0x1234(%si),%cx > Decoded ok: f3 0f 38 f8 18 enqcmds (%eax),%ebx > Decoded ok: f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%eax),%ecx > Decoded ok: 67 f3 0f 38 f8 1c enqcmds (%si),%bx > Decoded ok: 67 f3 0f 38 f8 8c 34 12 enqcmds 0x1234(%si),%cx > Decoded ok: f2 0f 38 f8 18 enqcmd (%rax),%rbx > Decoded ok: f2 0f 38 f8 88 78 56 34 12 enqcmd 0x12345678(%rax),%rcx > Decoded ok: 67 f2 0f 38 f8 18 enqcmd (%eax),%ebx > Decoded ok: 67 f2 0f 38 f8 88 78 56 34 12 enqcmd 0x12345678(%eax),%ecx > Decoded ok: f3 0f 38 f8 18 enqcmds (%rax),%rbx > Decoded ok: f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%rax),%rcx > Decoded ok: 67 f3 0f 38 f8 18 enqcmds (%eax),%ebx > Decoded ok: 67 f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%eax),%ecx > $ perf test -v "new " 2>&1 | grep -i enqcmds > Decoded ok: f3 0f 38 f8 18 enqcmds (%eax),%ebx > Decoded ok: f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%eax),%ecx > Decoded ok: 67 f3 0f 38 f8 1c enqcmds (%si),%bx > Decoded ok: 67 f3 0f 38 f8 8c 34 12 enqcmds 0x1234(%si),%cx > Decoded ok: f3 0f 38 f8 18 enqcmds (%rax),%rbx > Decoded ok: f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%rax),%rcx > Decoded ok: 67 f3 0f 38 f8 18 enqcmds (%eax),%ebx > Decoded ok: 67 f3 0f 38 f8 88 78 56 34 12 enqcmds 0x12345678(%eax),%ecx > $ perf test -v "new " 2>&1 | grep -i encls > Decoded ok: 0f 01 cf encls > Decoded ok: 0f 01 cf encls > $ perf test -v "new " 2>&1 | grep -i enclu > Decoded ok: 0f 01 d7 enclu > Decoded ok: 0f 01 d7 enclu > $ perf test -v "new " 2>&1 | grep -i enclv > Decoded ok: 0f 01 c0 enclv > Decoded ok: 0f 01 c0 enclv > $ perf test -v "new " 2>&1 | grep -i pconfig > Decoded ok: 0f 01 c5 pconfig > Decoded ok: 0f 01 c5 pconfig > $ perf test -v "new " 2>&1 | grep -i wbnoinvd > Decoded ok: f3 0f 09 wbnoinvd > Decoded ok: f3 0f 09 wbnoinvd >
Thanks for updating it! This looks good to me.
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > Reviewed-by: Andi Kleen <ak@linux.intel.com> > --- > arch/x86/lib/x86-opcode-map.txt | 18 ++++++++++++------ > tools/arch/x86/lib/x86-opcode-map.txt | 18 ++++++++++++------ > 2 files changed, 24 insertions(+), 12 deletions(-) > > diff --git a/arch/x86/lib/x86-opcode-map.txt b/arch/x86/lib/x86-opcode-map.txt > index e0b85930dd77..0a0e9112f284 100644 > --- a/arch/x86/lib/x86-opcode-map.txt > +++ b/arch/x86/lib/x86-opcode-map.txt > @@ -333,7 +333,7 @@ AVXcode: 1 > 06: CLTS > 07: SYSRET (o64) > 08: INVD > -09: WBINVD > +09: WBINVD | WBNOINVD (F3) > 0a: > 0b: UD2 (1B) > 0c: > @@ -364,7 +364,7 @@ AVXcode: 1 > # a ModR/M byte. > 1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev > 1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv > -1c: > +1c: Grp20 (1A),(1C) > 1d: > 1e: > 1f: NOP Ev > @@ -792,6 +792,8 @@ f3: Grp17 (1A) > f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) > f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) > f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v) > +f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3) > +f9: MOVDIRI My,Gy > EndTable > > Table: 3-byte opcode 2 (0x0f 0x3a) > @@ -943,9 +945,9 @@ GrpTable: Grp6 > EndTable > > GrpTable: Grp7 > -0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) > -1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) > -2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) > +0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) | PCONFIG (101),(11B) | ENCLV (000),(11B) > +1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) | ENCLS (111),(11B) > +2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B) > 3: LIDT Ms > 4: SMSW Mw/Rv > 5: rdpkru (110),(11B) | wrpkru (111),(11B) > @@ -1020,7 +1022,7 @@ GrpTable: Grp15 > 3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B) > 4: XSAVE | ptwrite Ey (F3),(11B) > 5: XRSTOR | lfence (11B) > -6: XSAVEOPT | clwb (66) | mfence (11B) > +6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) > 7: clflush | clflushopt (66) | sfence (11B) > EndTable > > @@ -1051,6 +1053,10 @@ GrpTable: Grp19 > 6: vscatterpf1qps/d Wx (66),(ev) > EndTable > > +GrpTable: Grp20 > +0: cldemote Mb > +EndTable > + > # AMD's Prefetch Group > GrpTable: GrpP > 0: PREFETCH > diff --git a/tools/arch/x86/lib/x86-opcode-map.txt b/tools/arch/x86/lib/x86-opcode-map.txt > index e0b85930dd77..0a0e9112f284 100644 > --- a/tools/arch/x86/lib/x86-opcode-map.txt > +++ b/tools/arch/x86/lib/x86-opcode-map.txt > @@ -333,7 +333,7 @@ AVXcode: 1 > 06: CLTS > 07: SYSRET (o64) > 08: INVD > -09: WBINVD > +09: WBINVD | WBNOINVD (F3) > 0a: > 0b: UD2 (1B) > 0c: > @@ -364,7 +364,7 @@ AVXcode: 1 > # a ModR/M byte. > 1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev > 1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv > -1c: > +1c: Grp20 (1A),(1C) > 1d: > 1e: > 1f: NOP Ev > @@ -792,6 +792,8 @@ f3: Grp17 (1A) > f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) > f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) > f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v) > +f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3) > +f9: MOVDIRI My,Gy > EndTable > > Table: 3-byte opcode 2 (0x0f 0x3a) > @@ -943,9 +945,9 @@ GrpTable: Grp6 > EndTable > > GrpTable: Grp7 > -0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) > -1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) > -2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) > +0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) | PCONFIG (101),(11B) | ENCLV (000),(11B) > +1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) | ENCLS (111),(11B) > +2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B) > 3: LIDT Ms > 4: SMSW Mw/Rv > 5: rdpkru (110),(11B) | wrpkru (111),(11B) > @@ -1020,7 +1022,7 @@ GrpTable: Grp15 > 3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B) > 4: XSAVE | ptwrite Ey (F3),(11B) > 5: XRSTOR | lfence (11B) > -6: XSAVEOPT | clwb (66) | mfence (11B) > +6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) > 7: clflush | clflushopt (66) | sfence (11B) > EndTable > > @@ -1051,6 +1053,10 @@ GrpTable: Grp19 > 6: vscatterpf1qps/d Wx (66),(ev) > EndTable > > +GrpTable: Grp20 > +0: cldemote Mb > +EndTable > + > # AMD's Prefetch Group > GrpTable: GrpP > 0: PREFETCH > -- > 2.17.1 >
-- Masami Hiramatsu <mhiramat@kernel.org>
| |