diff --git a/doc/inslist.pl b/doc/inslist.pl index f3d160d7..c7d7da40 100644 --- a/doc/inslist.pl +++ b/doc/inslist.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl ## -------------------------------------------------------------------------- ## -## Copyright 1996-2009 The NASM Authors - All Rights Reserved +## Copyright 1996-2017 The NASM Authors - All Rights Reserved ## See the file AUTHORS included with the NASM distribution for ## the specific copyright holders. ## @@ -36,10 +36,6 @@ # inslist.pl produce inslist.src # -# Opcode prefixes which need their own opcode tables -# LONGER PREFIXES FIRST! -@disasm_prefixes = qw(0F24 0F25 0F38 0F3A 0F7A 0FA6 0FA7 0F); - print STDERR "Reading insns.dat...\n"; @args = (); @@ -82,13 +78,27 @@ while () { $entry[1] =~ s/ignore//; $entry[1] =~ s/void//; - $entry[3] =~ s/ignore//; - $entry[3] =~ s/,SB//; - $entry[3] =~ s/,SM//; - $entry[3] =~ s/,SM2//; - $entry[3] =~ s/,SQ//; - $entry[3] =~ s/,AR2//; - printf S "\\c %-16s %-24s %s\n",$entry[0],$entry[1],$entry[3]; + + my @flags = split(/,/, $entry[3]); + my @nflags; + undef $isavx512; + undef @avx512fl; + for my $fl (@flags) { + next if ($fl =~ /^(ignore|SB|SM|SM2|SQ|AR2|FUTURE)$/); + + if ($fl =~ /^AVX512(.*)$/) { + $isavx512 = 1; + push(@avx512fl, $1) unless ($1 eq ''); + } else { + push(@nflags,$fl); + } + } + + if ($isavx512) { + unshift(@nflags, "AVX512".join('/', @avx512fl)); + } + + printf S "\\c %-16s %-24s %s\n",$entry[0],$entry[1], join(',', @nflags); $insns++; } print S "\n"; diff --git a/x86/insns.dat b/x86/insns.dat index 3d9fcacd..00f25711 100644 --- a/x86/insns.dat +++ b/x86/insns.dat @@ -3418,7 +3418,7 @@ VPGATHERQQ xmmreg,xmem64,xmmreg [rmv: vm64x vex.dds.128.66.0f38.w1 91 /r] FUTUR VPGATHERDQ ymmreg,xmem64,ymmreg [rmv: vm32x vex.dds.256.66.0f38.w1 90 /r] FUTURE,AVX2 VPGATHERQQ ymmreg,ymem64,ymmreg [rmv: vm64y vex.dds.256.66.0f38.w1 91 /r] FUTURE,AVX2 -;# Transactional Synchronization Extensions (TSX) +;# Intel Transactional Synchronization Extensions (TSX) XABORT imm [i: c6 f8 ib] FUTURE,RTM XABORT imm8 [i: c6 f8 ib] FUTURE,RTM XBEGIN imm [i: odf c7 f8 rel] FUTURE,RTM @@ -3488,7 +3488,7 @@ T1MSKC reg64,rm64 [vm: xop.ndd.lz.m9.w1 01 /7] LONG,FUTURE,TBM PREFETCHWT1 mem8 [m: 0f 0d /2 ] PREFETCHWT1,FUTURE -; MPX instructions +;# Intel Memory Protection Extensions (MPX) BNDMK bndreg,mem [rm: f3 0f 1b /r ] MPX,MIB,FUTURE BNDCL bndreg,mem [rm: f3 0f 1a /r ] MPX,FUTURE BNDCL bndreg,reg32 [rm: f3 0f 1a /r ] MPX,NOLONG,FUTURE @@ -3512,7 +3512,17 @@ BNDSTX mem,reg64,bndreg [mxr: 0f 1b /r ] MPX,MIB,LONG,FUTU BNDSTX mem,bndreg,reg32 [mrx: 0f 1b /r ] MPX,MIB,NOLONG,FUTURE BNDSTX mem,bndreg,reg64 [mrx: 0f 1b /r ] MPX,MIB,LONG,FUTURE -;# MJC PUBLIC BEGIN +;# Intel SHA acceleration instructions +SHA1MSG1 xmmreg,xmmrm128 [rm: 0f 38 c9 /r ] SHA,FUTURE +SHA1MSG2 xmmreg,xmmrm128 [rm: 0f 38 ca /r ] SHA,FUTURE +SHA1NEXTE xmmreg,xmmrm128 [rm: 0f 38 c8 /r ] SHA,FUTURE +SHA1RNDS4 xmmreg,xmmrm128,imm8 [rmi: 0f 3a cc /r ib ] SHA,FUTURE +SHA256MSG1 xmmreg,xmmrm128 [rm: 0f 38 cc /r ] SHA,FUTURE +SHA256MSG2 xmmreg,xmmrm128 [rm: 0f 38 cd /r ] SHA,FUTURE +SHA256RNDS2 xmmreg,xmmrm128,xmm0 [rm-: 0f 38 cb /r ] SHA,FUTURE +SHA256RNDS2 xmmreg,xmmrm128 [rm: 0f 38 cb /r ] SHA,FUTURE + +;# AVX-512 mask register instructions KADDB kreg,kreg,kreg [rvm: vex.nds.l1.66.0f.w0 4a /r ] FUTURE KADDD kreg,kreg,kreg [rvm: vex.nds.l1.66.0f.w1 4a /r ] FUTURE KADDQ kreg,kreg,kreg [rvm: vex.nds.l1.0f.w1 4a /r ] FUTURE @@ -3576,14 +3586,8 @@ KXORB kreg,kreg,kreg [rvm: vex.nds.l1.66.0f.w0 47 KXORD kreg,kreg,kreg [rvm: vex.nds.l1.66.0f.w1 47 /r ] FUTURE KXORQ kreg,kreg,kreg [rvm: vex.nds.l1.0f.w1 47 /r ] FUTURE KXORW kreg,kreg,kreg [rvm: vex.nds.l1.0f.w0 47 /r ] FUTURE -SHA1MSG1 xmmreg,xmmrm128 [rm: 0f 38 c9 /r ] SHA,FUTURE -SHA1MSG2 xmmreg,xmmrm128 [rm: 0f 38 ca /r ] SHA,FUTURE -SHA1NEXTE xmmreg,xmmrm128 [rm: 0f 38 c8 /r ] SHA,FUTURE -SHA1RNDS4 xmmreg,xmmrm128,imm8 [rmi: 0f 3a cc /r ib ] SHA,FUTURE -SHA256MSG1 xmmreg,xmmrm128 [rm: 0f 38 cc /r ] SHA,FUTURE -SHA256MSG2 xmmreg,xmmrm128 [rm: 0f 38 cd /r ] SHA,FUTURE -SHA256RNDS2 xmmreg,xmmrm128,xmm0 [rm-: 0f 38 cb /r ] SHA,FUTURE -SHA256RNDS2 xmmreg,xmmrm128 [rm: 0f 38 cb /r ] SHA,FUTURE + +;# AVX-512 instructions VADDPD xmmreg|mask|z,xmmreg*,xmmrm128|b64 [rvm:fv: evex.nds.128.66.0f.w1 58 /r ] AVX512VL,AVX512,FUTURE VADDPD ymmreg|mask|z,ymmreg*,ymmrm256|b64 [rvm:fv: evex.nds.256.66.0f.w1 58 /r ] AVX512VL,AVX512,FUTURE VADDPD zmmreg|mask|z,zmmreg*,zmmrm512|b64|er [rvm:fv: evex.nds.512.66.0f.w1 58 /r ] AVX512,FUTURE @@ -5097,21 +5101,21 @@ VXORPD zmmreg|mask|z,zmmreg*,zmmrm512|b64 [rvm:fv: evex.nds.512.66.0f. VXORPS xmmreg|mask|z,xmmreg*,xmmrm128|b32 [rvm:fv: evex.nds.128.0f.w0 57 /r ] AVX512VL,AVX512DQ,FUTURE VXORPS ymmreg|mask|z,ymmreg*,ymmrm256|b32 [rvm:fv: evex.nds.256.0f.w0 57 /r ] AVX512VL,AVX512DQ,FUTURE VXORPS zmmreg|mask|z,zmmreg*,zmmrm512|b32 [rvm:fv: evex.nds.512.0f.w0 57 /r ] AVX512DQ,FUTURE -;# MJC PUBLIC END +; MJC PUBLIC END -; Intel memory protection keys for userspace (PKU aka PKEYs) +;# Intel memory protection keys for userspace (PKU aka PKEYs) RDPKRU void [ 0f 01 ee] X64,FUTURE WRPKRU void [ 0f 01 ef] X64,FUTURE -; Read Processor ID +;# Read Processor ID RDPID reg32 [m: f3 0f c7 /7] NOLONG,FUTURE RDPID reg64 [m: o64nw f3 0f c7 /7] X64,FUTURE RDPID reg32 [m: f3 0f c7 /7] X64,UNDOC,FUTURE -; New memory instructions +;# New memory instructions CLFLUSHOPT mem [m: 66 0f ae /7] FUTURE CLWB mem [m: 66 0f ae /6] FUTURE -;# This one was killed before it saw the light of day +; This one was killed before it saw the light of day PCOMMIT void [ 66 0f ae f8] FUTURE,UNDOC,OBSOLETE ; AMD Zen v1