instrs: Remove redundant IMM_8

This commit is contained in:
Alexis Engelke
2020-07-02 08:58:35 +02:00
parent 854082a156
commit da4ad137d8
3 changed files with 196 additions and 179 deletions

View File

@@ -2,7 +2,7 @@
01 MR GP GP - - ADD LOCK
02 RM GP GP - - ADD SIZE_8
03 RM GP GP - - ADD
04 IA GP IMM - - ADD SIZE_8 IMM_8
04 IA GP IMM - - ADD SIZE_8
05 IA GP IMM - - ADD
06 NP - - - - PUSH_ES ONLY32
07 NP - - - - POP_ES ONLY32
@@ -10,7 +10,7 @@
09 MR GP GP - - OR LOCK
0a RM GP GP - - OR SIZE_8
0b RM GP GP - - OR
0c IA GP IMM - - OR SIZE_8 IMM_8
0c IA GP IMM - - OR SIZE_8
0d IA GP IMM - - OR
0e NP - - - - PUSH_CS ONLY32
#0f escape opcode
@@ -18,7 +18,7 @@
11 MR GP GP - - ADC LOCK
12 RM GP GP - - ADC SIZE_8
13 RM GP GP - - ADC
14 IA GP IMM - - ADC SIZE_8 IMM_8
14 IA GP IMM - - ADC SIZE_8
15 IA GP IMM - - ADC
16 NP - - - - PUSH_SS ONLY32
17 NP - - - - POP_SS ONLY32
@@ -26,7 +26,7 @@
19 MR GP GP - - SBB LOCK
1a RM GP GP - - SBB SIZE_8
1b RM GP GP - - SBB
1c IA GP IMM - - SBB SIZE_8 IMM_8
1c IA GP IMM - - SBB SIZE_8
1d IA GP IMM - - SBB
1e NP - - - - PUSH_DS ONLY32
1f NP - - - - POP_DS ONLY32
@@ -34,7 +34,7 @@
21 MR GP GP - - AND LOCK
22 RM GP GP - - AND SIZE_8
23 RM GP GP - - AND
24 IA GP IMM - - AND SIZE_8 IMM_8
24 IA GP IMM - - AND SIZE_8
25 IA GP IMM - - AND
#26 SEG=ES prefix
27 NP - - - - DAA ONLY32
@@ -42,7 +42,7 @@
29 MR GP GP - - SUB LOCK
2a RM GP GP - - SUB SIZE_8
2b RM GP GP - - SUB
2c IA GP IMM - - SUB SIZE_8 IMM_8
2c IA GP IMM - - SUB SIZE_8
2d IA GP IMM - - SUB
#2e SEG=CS prefix
2f NP - - - - DAS ONLY32
@@ -50,7 +50,7 @@
31 MR GP GP - - XOR LOCK
32 RM GP GP - - XOR SIZE_8
33 RM GP GP - - XOR
34 IA GP IMM - - XOR SIZE_8 IMM_8
34 IA GP IMM - - XOR SIZE_8
35 IA GP IMM - - XOR
#36 SEG=SS prefix
37 NP - - - - AAA ONLY32
@@ -58,7 +58,7 @@
39 MR GP GP - - CMP
3a RM GP GP - - CMP SIZE_8
3b RM GP GP - - CMP
3c IA GP IMM - - CMP SIZE_8 IMM_8
3c IA GP IMM - - CMP SIZE_8
3d IA GP IMM - - CMP
#3e SEG=DS prefix
3f NP - - - - AAS ONLY32 INSTR_WIDTH
@@ -99,14 +99,14 @@
7d D IMM - - - JGE DEF64 IMM_8
7e D IMM - - - JLE DEF64 IMM_8
7f D IMM - - - JG DEF64 IMM_8
80/0 MI GP IMM - - ADD IMM_8 SIZE_8 LOCK
80/1 MI GP IMM - - OR IMM_8 SIZE_8 LOCK
80/2 MI GP IMM - - ADC IMM_8 SIZE_8 LOCK
80/3 MI GP IMM - - SBB IMM_8 SIZE_8 LOCK
80/4 MI GP IMM - - AND IMM_8 SIZE_8 LOCK
80/5 MI GP IMM - - SUB IMM_8 SIZE_8 LOCK
80/6 MI GP IMM - - XOR IMM_8 SIZE_8 LOCK
80/7 MI GP IMM - - CMP IMM_8 SIZE_8
80/0 MI GP IMM - - ADD SIZE_8 LOCK
80/1 MI GP IMM - - OR SIZE_8 LOCK
80/2 MI GP IMM - - ADC SIZE_8 LOCK
80/3 MI GP IMM - - SBB SIZE_8 LOCK
80/4 MI GP IMM - - AND SIZE_8 LOCK
80/5 MI GP IMM - - SUB SIZE_8 LOCK
80/6 MI GP IMM - - XOR SIZE_8 LOCK
80/7 MI GP IMM - - CMP SIZE_8
81/0 MI GP IMM - - ADD LOCK
81/1 MI GP IMM - - OR LOCK
81/2 MI GP IMM - - ADC LOCK
@@ -115,14 +115,14 @@
81/5 MI GP IMM - - SUB LOCK
81/6 MI GP IMM - - XOR LOCK
81/7 MI GP IMM - - CMP
82/0 MI GP IMM - - ADD ONLY32 IMM_8 SIZE_8 LOCK
82/1 MI GP IMM - - OR ONLY32 IMM_8 SIZE_8 LOCK
82/2 MI GP IMM - - ADC ONLY32 IMM_8 SIZE_8 LOCK
82/3 MI GP IMM - - SBB ONLY32 IMM_8 SIZE_8 LOCK
82/4 MI GP IMM - - AND ONLY32 IMM_8 SIZE_8 LOCK
82/5 MI GP IMM - - SUB ONLY32 IMM_8 SIZE_8 LOCK
82/6 MI GP IMM - - XOR ONLY32 IMM_8 SIZE_8 LOCK
82/7 MI GP IMM - - CMP ONLY32 IMM_8 SIZE_8
82/0 MI GP IMM - - ADD ONLY32 SIZE_8 LOCK
82/1 MI GP IMM - - OR ONLY32 SIZE_8 LOCK
82/2 MI GP IMM - - ADC ONLY32 SIZE_8 LOCK
82/3 MI GP IMM - - SBB ONLY32 SIZE_8 LOCK
82/4 MI GP IMM - - AND ONLY32 SIZE_8 LOCK
82/5 MI GP IMM - - SUB ONLY32 SIZE_8 LOCK
82/6 MI GP IMM - - XOR ONLY32 SIZE_8 LOCK
82/7 MI GP IMM - - CMP ONLY32 SIZE_8
83/0 MI GP IMM - - ADD IMM_8 LOCK
83/1 MI GP IMM - - OR IMM_8 LOCK
83/2 MI GP IMM - - ADC IMM_8 LOCK
@@ -169,7 +169,7 @@ a4 NP - - - - MOVS SIZE_8 INSTR_WIDTH
a5 NP - - - - MOVS INSTR_WIDTH
a6 NP - - - - CMPS SIZE_8 INSTR_WIDTH
a7 NP - - - - CMPS INSTR_WIDTH
a8 IA GP IMM - - TEST SIZE_8 IMM_8
a8 IA GP IMM - - TEST SIZE_8
a9 IA GP IMM - - TEST
aa NP - - - - STOS SIZE_8 INSTR_WIDTH
ab NP - - - - STOS INSTR_WIDTH
@@ -177,30 +177,30 @@ ac NP - - - - LODS SIZE_8 INSTR_WIDTH
ad NP - - - - LODS INSTR_WIDTH
ae NP - - - - SCAS SIZE_8 INSTR_WIDTH
af NP - - - - SCAS INSTR_WIDTH
b0+ OI GP IMM - - MOVABS SIZE_8 IMM_8
b0+ OI GP IMM8 - - MOVABS SIZE_8
b8+ OI GP IMM - - MOVABS
c0/0 MI GP IMM - - ROL SIZE_8 IMM_8
c0/1 MI GP IMM - - ROR SIZE_8 IMM_8
c0/2 MI GP IMM - - RCL SIZE_8 IMM_8
c0/3 MI GP IMM - - RCR SIZE_8 IMM_8
c0/4 MI GP IMM - - SHL SIZE_8 IMM_8
c0/5 MI GP IMM - - SHR SIZE_8 IMM_8
c0/7 MI GP IMM - - SAR SIZE_8 IMM_8
c1/0 MI GP IMM - - ROL IMM_8
c1/1 MI GP IMM - - ROR IMM_8
c1/2 MI GP IMM - - RCL IMM_8
c1/3 MI GP IMM - - RCR IMM_8
c1/4 MI GP IMM - - SHL IMM_8
c1/5 MI GP IMM - - SHR IMM_8
c1/7 MI GP IMM - - SAR IMM_8
c0/0 MI GP IMM8 - - ROL SIZE_8
c0/1 MI GP IMM8 - - ROR SIZE_8
c0/2 MI GP IMM8 - - RCL SIZE_8
c0/3 MI GP IMM8 - - RCR SIZE_8
c0/4 MI GP IMM8 - - SHL SIZE_8
c0/5 MI GP IMM8 - - SHR SIZE_8
c0/7 MI GP IMM8 - - SAR SIZE_8
c1/0 MI GP IMM8 - - ROL
c1/1 MI GP IMM8 - - ROR
c1/2 MI GP IMM8 - - RCL
c1/3 MI GP IMM8 - - RCR
c1/4 MI GP IMM8 - - SHL
c1/5 MI GP IMM8 - - SHR
c1/7 MI GP IMM8 - - SAR
# RET immediate size handled in code
c2 I IMM16 - - - RET DEF64 INSTR_WIDTH
c3 NP - - - - RET DEF64 INSTR_WIDTH
c4 RM GP MEMZ - - LES ONLY32 MUSTMEM
c5 RM GP MEMZ - - LDS ONLY32 MUSTMEM
c6//0 MI GP IMM - - MOV SIZE_8 IMM_8
c6//c0+ OI GP IMM - - MOV SIZE_8 IMM_8
c6//f8 I IMM - - - XABORT IMM_8
c6//0 MI GP IMM - - MOV SIZE_8
c6//c0+ OI GP IMM - - MOV SIZE_8
c6//f8 I IMM8 - - - XABORT
c7//0 MI GP IMM - - MOV
c7//c0+ OI GP IMM - - MOV
c7//f8 D IMM - - - XBEGIN
@@ -211,7 +211,7 @@ c9 NP - - - - LEAVE DEF64 INSTR_WIDTH
ca I IMM16 - - - RETF INSTR_WIDTH
cb NP - - - - RETF INSTR_WIDTH
cc NP - - - - INT3
cd I IMM8 - - - INT IMM_8
cd I IMM8 - - - INT
ce NP - - - - INTO ONLY32
cf NP - - - - IRET INSTR_WIDTH
d0/0 M1 GP IMM8 - - ROL SIZE_8
@@ -242,8 +242,8 @@ d3/3 MC GP GP8 - - RCR
d3/4 MC GP GP8 - - SHL
d3/5 MC GP GP8 - - SHR
d3/7 MC GP GP8 - - SAR
d4 I IMM - - - AAM ONLY32 SIZE_8 IMM_8
d5 I IMM - - - AAD ONLY32 SIZE_8 IMM_8
d4 I IMM - - - AAM ONLY32 SIZE_8
d5 I IMM - - - AAD ONLY32 SIZE_8
#d6 unused
d7 NP - - - - XLATB
#d8-df FPU Escape
@@ -251,10 +251,10 @@ e0 D IMM - - - LOOPNZ DEF64 IMM_8
e1 D IMM - - - LOOPZ DEF64 IMM_8
e2 D IMM - - - LOOP DEF64 IMM_8
e3 D IMM - - - JCXZ DEF64 IMM_8
e4 IA GP IMM - - IN SIZE_8 IMM_8
e5 IA GP IMM - - IN IMM_8
e6 IA GP IMM - - OUT SIZE_8 IMM_8
e7 IA GP IMM - - OUT IMM_8
e4 IA GP IMM8 - - IN SIZE_8
e5 IA GP IMM8 - - IN
e6 IA GP IMM8 - - OUT SIZE_8
e7 IA GP IMM8 - - OUT
e8 D IMM - - - CALL DEF64
e9 D IMM - - - JMP DEF64
#ea JMPf TODO, ONLY32
@@ -269,7 +269,7 @@ f1 NP - - - - INT1
#f3 REP/REPZ prefix
f4 NP - - - - HLT
f5 NP - - - - CMC
f6/0 MI GP IMM - - TEST SIZE_8 IMM_8
f6/0 MI GP IMM - - TEST SIZE_8
f6/2 M GP - - - NOT SIZE_8 LOCK
f6/3 M GP - - - NEG SIZE_8 LOCK
f6/4 M GP - - - MUL SIZE_8
@@ -427,13 +427,13 @@ NP.0f37 NP - - - - GETSEC
0fa1 NP - - - - POP_FS DEF64 INSTR_WIDTH
0fa2 NP - - - - CPUID
0fa3 MR GP GP - - BT
0fa4 MRI GP GP IMM8 - SHLD IMM_8
0fa4 MRI GP GP IMM8 - SHLD
0fa5 MRC GP GP GP8 - SHLD
0fa8 NP - - - - PUSH_GS DEF64 INSTR_WIDTH
0fa9 NP - - - - POP_GS DEF64 INSTR_WIDTH
0faa NP - - - - RSM
0fab MR GP GP - - BTS LOCK
0fac MRI GP GP IMM8 - SHRD IMM_8
0fac MRI GP GP IMM8 - SHRD
0fad MRC GP GP GP8 - SHRD
0faf RM GP GP - - IMUL
0fb0 MR GP GP - - CMPXCHG SIZE_8 LOCK
@@ -446,10 +446,10 @@ NP.0f37 NP - - - - GETSEC
0fb7 RM GP GP16 - - MOVZX
RF3.0fb8 RM GP GP - - POPCNT
0fb9 RM GP GP - - UD1
0fba/4 MI GP IMM8 - - BT IMM_8
0fba/5 MI GP IMM8 - - BTS IMM_8 LOCK
0fba/6 MI GP IMM8 - - BTR IMM_8 LOCK
0fba/7 MI GP IMM8 - - BTC IMM_8 LOCK
0fba/4 MI GP IMM8 - - BT
0fba/5 MI GP IMM8 - - BTS LOCK
0fba/6 MI GP IMM8 - - BTR LOCK
0fba/7 MI GP IMM8 - - BTC LOCK
0fbb MR GP GP - - BTC LOCK
RNP.0fbc RM GP GP - - BSF
RF2.0fbc RM GP GP - - BSF
@@ -493,14 +493,14 @@ NP.0f6b RM MMX MMX - - MMX_PACKSSDW
NP.W0.0f6e RM MMX GP - - MMX_MOVD
NP.W1.0f6e RM MMX GP - - MMX_MOVQ
NP.0f6f RM MMX MMX - - MMX_MOVQ
NP.0f71/2 MI MMX IMM8 - - MMX_PSRLW IMM_8 NOMEM
NP.0f71/4 MI MMX IMM8 - - MMX_PSRAW IMM_8 NOMEM
NP.0f71/6 MI MMX IMM8 - - MMX_PSLLW IMM_8 NOMEM
NP.0f72/2 MI MMX IMM8 - - MMX_PSRLD IMM_8 NOMEM
NP.0f72/4 MI MMX IMM8 - - MMX_PSRAD IMM_8 NOMEM
NP.0f72/6 MI MMX IMM8 - - MMX_PSLLD IMM_8 NOMEM
NP.0f73/2 MI MMX IMM8 - - MMX_PSRLQ IMM_8 NOMEM
NP.0f73/6 MI MMX IMM8 - - MMX_PSLLQ IMM_8 NOMEM
NP.0f71/2 MI MMX IMM8 - - MMX_PSRLW NOMEM
NP.0f71/4 MI MMX IMM8 - - MMX_PSRAW NOMEM
NP.0f71/6 MI MMX IMM8 - - MMX_PSLLW NOMEM
NP.0f72/2 MI MMX IMM8 - - MMX_PSRLD NOMEM
NP.0f72/4 MI MMX IMM8 - - MMX_PSRAD NOMEM
NP.0f72/6 MI MMX IMM8 - - MMX_PSLLD NOMEM
NP.0f73/2 MI MMX IMM8 - - MMX_PSRLQ NOMEM
NP.0f73/6 MI MMX IMM8 - - MMX_PSLLQ NOMEM
NP.0f74 RM MMX MMX - - MMX_PCMPEQB
NP.0f75 RM MMX MMX - - MMX_PCMPEQW
NP.0f76 RM MMX MMX - - MMX_PCMPEQD
@@ -508,8 +508,8 @@ NP.0f77 NP - - - - MMX_EMMS
NP.W0.0f7e MR GP MMX - - MMX_MOVD
NP.W1.0f7e MR GP MMX - - MMX_MOVQ
NP.0f7f MR MMX MMX - - MMX_MOVQ
NP.0fc4 RMI MMX GP IMM8 - MMX_PINSRW IMM_8
NP.0fc5 RMI GP MMX IMM8 - MMX_PEXTRW IMM_8 NOMEM
NP.0fc4 RMI MMX GP IMM8 - MMX_PINSRW
NP.0fc5 RMI GP MMX IMM8 - MMX_PEXTRW NOMEM
NP.0fd1 RM MMX MMX - - MMX_PSRLW
NP.0fd2 RM MMX MMX - - MMX_PSRLD
NP.0fd3 RM MMX MMX - - MMX_PSRLQ
@@ -570,7 +570,7 @@ NP.0f380b RM MMX MMX - - MMX_PMULHRSW
NP.0f381c RM MMX MMX - - MMX_PABSB
NP.0f381d RM MMX MMX - - MMX_PABSW
NP.0f381e RM MMX MMX - - MMX_PABSD
NP.0f3a0f RMI MMX MMX IMM8 - MMX_PALIGNR IMM_8
NP.0f3a0f RMI MMX MMX IMM8 - MMX_PALIGNR
#
# SSE
@@ -681,19 +681,19 @@ F2.0f5f RM XMM64 XMM64 - - SSE_MAXSD
66.W1.0f6e RM XMM GP - - SSE_MOVQ
66.0f6f RM XMM XMM - - SSE_MOVDQA
F3.0f6f RM XMM XMM - - SSE_MOVDQU
66.0f70 RMI XMM XMM IMM8 - SSE_PSHUFD IMM_8
F3.0f70 RMI XMM XMM IMM8 - SSE_PSHUFHW IMM_8
F2.0f70 RMI XMM XMM IMM8 - SSE_PSHUFLW IMM_8
66.0f71/2 MI XMM IMM8 - - SSE_PSRLW IMM_8 NOMEM
66.0f71/4 MI XMM IMM8 - - SSE_PSRAW IMM_8 NOMEM
66.0f71/6 MI XMM IMM8 - - SSE_PSLLW IMM_8 NOMEM
66.0f72/2 MI XMM IMM8 - - SSE_PSRLD IMM_8 NOMEM
66.0f72/4 MI XMM IMM8 - - SSE_PSRAD IMM_8 NOMEM
66.0f72/6 MI XMM IMM8 - - SSE_PSLLD IMM_8 NOMEM
66.0f73/2 MI XMM IMM8 - - SSE_PSRLQ IMM_8 NOMEM
66.0f73/3 MI XMM IMM8 - - SSE_PSRLDQ IMM_8 NOMEM
66.0f73/6 MI XMM IMM8 - - SSE_PSLLQ IMM_8 NOMEM
66.0f73/7 MI XMM IMM8 - - SSE_PSLLDQ IMM_8 NOMEM
66.0f70 RMI XMM XMM IMM8 - SSE_PSHUFD
F3.0f70 RMI XMM XMM IMM8 - SSE_PSHUFHW
F2.0f70 RMI XMM XMM IMM8 - SSE_PSHUFLW
66.0f71/2 MI XMM IMM8 - - SSE_PSRLW NOMEM
66.0f71/4 MI XMM IMM8 - - SSE_PSRAW NOMEM
66.0f71/6 MI XMM IMM8 - - SSE_PSLLW NOMEM
66.0f72/2 MI XMM IMM8 - - SSE_PSRLD NOMEM
66.0f72/4 MI XMM IMM8 - - SSE_PSRAD NOMEM
66.0f72/6 MI XMM IMM8 - - SSE_PSLLD NOMEM
66.0f73/2 MI XMM IMM8 - - SSE_PSRLQ NOMEM
66.0f73/3 MI XMM IMM8 - - SSE_PSRLDQ NOMEM
66.0f73/6 MI XMM IMM8 - - SSE_PSLLQ NOMEM
66.0f73/7 MI XMM IMM8 - - SSE_PSLLDQ NOMEM
66.0f74 RM XMM XMM - - SSE_PCMPEQB
66.0f75 RM XMM XMM - - SSE_PCMPEQW
66.0f76 RM XMM XMM - - SSE_PCMPEQD
@@ -713,14 +713,14 @@ NP.0fae//3 M MEM32 - - - STMXCSR
NP.0fae//e8+ NP - - - - LFENCE
NP.0fae//f0+ NP - - - - MFENCE
NP.0fae//f8+ NP - - - - SFENCE
NP.0fc2 RMI XMM XMM IMM8 - SSE_CMPPS IMM_8
66.0fc2 RMI XMM XMM IMM8 - SSE_CMPPD IMM_8
F3.0fc2 RMI XMM XMM32 IMM8 - SSE_CMPSS IMM_8
F2.0fc2 RMI XMM XMM64 IMM8 - SSE_CMPSD IMM_8
66.0fc4 RMI XMM GP IMM8 - SSE_PINSRW IMM_8
66.0fc5 RMI GP XMM IMM8 - SSE_PEXTRW IMM_8 NOMEM
NP.0fc6 RMI XMM XMM IMM8 - SSE_SHUFPS IMM_8
66.0fc6 RMI XMM XMM IMM8 - SSE_SHUFPD IMM_8
NP.0fc2 RMI XMM XMM IMM8 - SSE_CMPPS
66.0fc2 RMI XMM XMM IMM8 - SSE_CMPPD
F3.0fc2 RMI XMM XMM32 IMM8 - SSE_CMPSS
F2.0fc2 RMI XMM XMM64 IMM8 - SSE_CMPSD
66.0fc4 RMI XMM GP IMM8 - SSE_PINSRW
66.0fc5 RMI GP XMM IMM8 - SSE_PEXTRW NOMEM
NP.0fc6 RMI XMM XMM IMM8 - SSE_SHUFPS
66.0fc6 RMI XMM XMM IMM8 - SSE_SHUFPD
66.0fd0 RM XMM XMM - - SSE_ADDSUBPD
F2.0fd0 RM XMM XMM - - SSE_ADDSUBPS
66.0fd1 RM XMM XMM - - SSE_PSRLW
@@ -822,44 +822,44 @@ F2.0ff0 RM XMM XMM - - SSE_LDDQU MUSTMEM
66.0f38f8 RM GP MEMZ - - MOVDIR64B MUSTMEM
NP.0f38f9 MR GP GP - - MOVDIRI MUSTMEM
#
66.0f3a08 RMI XMM XMM IMM8 - SSE_ROUNDPS IMM_8
66.0f3a09 RMI XMM XMM IMM8 - SSE_ROUNDPD IMM_8
66.0f3a0a RMI XMM32 XMM32 IMM8 - SSE_ROUNDSS IMM_8
66.0f3a0b RMI XMM64 XMM64 IMM8 - SSE_ROUNDSD IMM_8
66.0f3a0c RMI XMM XMM IMM8 - SSE_BLENDPS IMM_8
66.0f3a0d RMI XMM XMM IMM8 - SSE_BLENDPD IMM_8
66.0f3a0e RMI XMM XMM IMM8 - SSE_PBLENDW IMM_8
66.0f3a0f RMI XMM XMM IMM8 - SSE_PALIGNR IMM_8
66.0f3a14 MRI GP8 XMM IMM8 - SSE_PEXTRB IMM_8
66.0f3a15 MRI GP16 XMM IMM8 - SSE_PEXTRW IMM_8
66.W0.0f3a16 MRI GP XMM IMM8 - SSE_PEXTRD IMM_8
66.W1.0f3a16 MRI GP XMM IMM8 - SSE_PEXTRQ IMM_8
66.0f3a17 MRI GP32 XMM IMM8 - SSE_EXTRACTPS IMM_8
66.0f3a20 RMI XMM GP8 IMM8 - SSE_PINSRB IMM_8
66.0f3a21 RMI XMM XMM32 IMM8 - SSE_INSERTPS IMM_8
66.W0.0f3a22 RMI XMM GP IMM8 - SSE_PINSRD IMM_8
66.W1.0f3a22 RMI XMM GP IMM8 - SSE_PINSRQ IMM_8
66.0f3a40 RMI XMM XMM IMM8 - SSE_DPPS IMM_8
66.0f3a41 RMI XMM XMM IMM8 - SSE_DPPD IMM_8
66.0f3a42 RMI XMM XMM IMM8 - SSE_MPSADBW IMM_8
66.0f3a44 RMI XMM XMM IMM8 - SSE_PCLMULQDQ IMM_8
66.0f3a60 RMI XMM XMM IMM8 - SSE_PCMPESTRM IMM_8
66.0f3a61 RMI XMM XMM IMM8 - SSE_PCMPESTRI IMM_8
66.0f3a62 RMI XMM XMM IMM8 - SSE_PCMPISTRM IMM_8
66.0f3a63 RMI XMM XMM IMM8 - SSE_PCMPISTRI IMM_8
66.0f3a08 RMI XMM XMM IMM8 - SSE_ROUNDPS
66.0f3a09 RMI XMM XMM IMM8 - SSE_ROUNDPD
66.0f3a0a RMI XMM32 XMM32 IMM8 - SSE_ROUNDSS
66.0f3a0b RMI XMM64 XMM64 IMM8 - SSE_ROUNDSD
66.0f3a0c RMI XMM XMM IMM8 - SSE_BLENDPS
66.0f3a0d RMI XMM XMM IMM8 - SSE_BLENDPD
66.0f3a0e RMI XMM XMM IMM8 - SSE_PBLENDW
66.0f3a0f RMI XMM XMM IMM8 - SSE_PALIGNR
66.0f3a14 MRI GP8 XMM IMM8 - SSE_PEXTRB
66.0f3a15 MRI GP16 XMM IMM8 - SSE_PEXTRW
66.W0.0f3a16 MRI GP XMM IMM8 - SSE_PEXTRD
66.W1.0f3a16 MRI GP XMM IMM8 - SSE_PEXTRQ
66.0f3a17 MRI GP32 XMM IMM8 - SSE_EXTRACTPS
66.0f3a20 RMI XMM GP8 IMM8 - SSE_PINSRB
66.0f3a21 RMI XMM XMM32 IMM8 - SSE_INSERTPS
66.W0.0f3a22 RMI XMM GP IMM8 - SSE_PINSRD
66.W1.0f3a22 RMI XMM GP IMM8 - SSE_PINSRQ
66.0f3a40 RMI XMM XMM IMM8 - SSE_DPPS
66.0f3a41 RMI XMM XMM IMM8 - SSE_DPPD
66.0f3a42 RMI XMM XMM IMM8 - SSE_MPSADBW
66.0f3a44 RMI XMM XMM IMM8 - SSE_PCLMULQDQ
66.0f3a60 RMI XMM XMM IMM8 - SSE_PCMPESTRM
66.0f3a61 RMI XMM XMM IMM8 - SSE_PCMPESTRI
66.0f3a62 RMI XMM XMM IMM8 - SSE_PCMPISTRM
66.0f3a63 RMI XMM XMM IMM8 - SSE_PCMPISTRI
#
66.0f38db RM XMM XMM - - AESIMC
66.0f38dc RM XMM XMM - - AESENC
66.0f38dd RM XMM XMM - - AESENCLAST
66.0f38de RM XMM XMM - - AESDEC
66.0f38df RM XMM XMM - - AESDECLAST
66.0f3adf RMI XMM XMM IMM8 - AESKEYGENASSIST IMM_8
66.0f3adf RMI XMM XMM IMM8 - AESKEYGENASSIST
VEX.66.L0.0f38db RM XMM XMM - - VAESIMC
VEX.66.L0.0f38dc RVM XMM XMM XMM - VAESENC
VEX.66.L0.0f38dd RVM XMM XMM XMM - VAESENCLAST
VEX.66.L0.0f38de RVM XMM XMM XMM - VAESDEC
VEX.66.L0.0f38df RVM XMM XMM XMM - VAESDECLAST
VEX.66.L0.0f3adf RMI XMM XMM IMM8 - VAESKEYGENASSIST IMM_8
VEX.66.L0.0f3adf RMI XMM XMM IMM8 - VAESKEYGENASSIST
#
# AVX
VEX.NP.0f10 RM XMM XMM - - VMOVUPS
@@ -973,19 +973,19 @@ VEX.66.W1.L0.0f6e RM XMM32 GP - - VMOVD ONLY32
VEX.66.W1.L0.0f6e RM XMM64 GP - - VMOVQ ONLY64
VEX.66.0f6f RM XMM XMM - - VMOVDQA
VEX.F3.0f6f RM XMM XMM - - VMOVDQU
VEX.66.0f70 RMI XMM XMM IMM8 - VPSHUFD IMM_8
VEX.F3.0f70 RMI XMM XMM IMM8 - VPSHUFHW IMM_8
VEX.F2.0f70 RMI XMM XMM IMM8 - VPSHUFLW IMM_8
VEX.66.0f71/2 VMI XMM XMM IMM8 - VPSRLW IMM_8 NOMEM
VEX.66.0f71/4 VMI XMM XMM IMM8 - VPSRAW IMM_8 NOMEM
VEX.66.0f71/6 VMI XMM XMM IMM8 - VPSLLW IMM_8 NOMEM
VEX.66.0f72/2 VMI XMM XMM IMM8 - VPSRLD IMM_8 NOMEM
VEX.66.0f72/4 VMI XMM XMM IMM8 - VPSRAD IMM_8 NOMEM
VEX.66.0f72/6 VMI XMM XMM IMM8 - VPSLLD IMM_8 NOMEM
VEX.66.0f73/2 VMI XMM XMM IMM8 - VPSRLQ IMM_8 NOMEM
VEX.66.0f73/3 VMI XMM XMM IMM8 - VPSRLDQ IMM_8 NOMEM
VEX.66.0f73/6 VMI XMM XMM IMM8 - VPSLLQ IMM_8 NOMEM
VEX.66.0f73/7 VMI XMM XMM IMM8 - VPSLLDQ IMM_8 NOMEM
VEX.66.0f70 RMI XMM XMM IMM8 - VPSHUFD
VEX.F3.0f70 RMI XMM XMM IMM8 - VPSHUFHW
VEX.F2.0f70 RMI XMM XMM IMM8 - VPSHUFLW
VEX.66.0f71/2 VMI XMM XMM IMM8 - VPSRLW NOMEM
VEX.66.0f71/4 VMI XMM XMM IMM8 - VPSRAW NOMEM
VEX.66.0f71/6 VMI XMM XMM IMM8 - VPSLLW NOMEM
VEX.66.0f72/2 VMI XMM XMM IMM8 - VPSRLD NOMEM
VEX.66.0f72/4 VMI XMM XMM IMM8 - VPSRAD NOMEM
VEX.66.0f72/6 VMI XMM XMM IMM8 - VPSLLD NOMEM
VEX.66.0f73/2 VMI XMM XMM IMM8 - VPSRLQ NOMEM
VEX.66.0f73/3 VMI XMM XMM IMM8 - VPSRLDQ NOMEM
VEX.66.0f73/6 VMI XMM XMM IMM8 - VPSLLQ NOMEM
VEX.66.0f73/7 VMI XMM XMM IMM8 - VPSLLDQ NOMEM
VEX.66.0f74 RVM XMM XMM XMM - VPCMPEQB
VEX.66.0f75 RVM XMM XMM XMM - VPCMPEQW
VEX.66.0f76 RVM XMM XMM XMM - VPCMPEQD
@@ -1003,14 +1003,14 @@ VEX.66.0f7f MR XMM XMM - - VMOVDQA
VEX.F3.0f7f MR XMM XMM - - VMOVDQU
VEX.NP.0fae//2 M GP32 - - - VLDMXCSR
VEX.NP.0fae//3 M GP32 - - - VSTMXCSR
VEX.NP.0fc2 RVMI XMM XMM XMM IMM8 VCMPPS IMM_8
VEX.66.0fc2 RVMI XMM XMM XMM IMM8 VCMPPD IMM_8
VEX.F3.0fc2 RVMI XMM XMM XMM32 IMM8 VCMPSS IMM_8 VEXLIG
VEX.F2.0fc2 RVMI XMM XMM XMM64 IMM8 VCMPSD IMM_8 VEXLIG
VEX.66.W0.0fc4 RVMI XMM XMM GP IMM8 VPINSRW IMM_8
VEX.66.W0.L0.0fc5 RMI GP XMM IMM8 - VPEXTRW IMM_8
VEX.NP.0fc6 RVMI XMM XMM XMM IMM8 VSHUFPS IMM_8
VEX.66.0fc6 RVMI XMM XMM XMM IMM8 VSHUFPD IMM_8
VEX.NP.0fc2 RVMI XMM XMM XMM IMM8 VCMPPS
VEX.66.0fc2 RVMI XMM XMM XMM IMM8 VCMPPD
VEX.F3.0fc2 RVMI XMM XMM XMM32 IMM8 VCMPSS VEXLIG
VEX.F2.0fc2 RVMI XMM XMM XMM64 IMM8 VCMPSD VEXLIG
VEX.66.W0.0fc4 RVMI XMM XMM GP IMM8 VPINSRW
VEX.66.W0.L0.0fc5 RMI GP XMM IMM8 - VPEXTRW
VEX.NP.0fc6 RVMI XMM XMM XMM IMM8 VSHUFPS
VEX.66.0fc6 RVMI XMM XMM XMM IMM8 VSHUFPD
VEX.NP.0fd0 RVM XMM XMM XMM - VADDSUBPS
VEX.66.0fd0 RVM XMM XMM XMM - VADDSUBPD
VEX.66.0fd1 RVM XMM XMM XMM - VPSRLW
@@ -1204,43 +1204,43 @@ VEX.66.W0.0f38be RVM XMM XMM XMM - VFNMSUB231PS
VEX.66.W1.0f38be RVM XMM XMM XMM - VFNMSUB231PD
VEX.66.W0.0f38bf RVM XMM XMM XMM32 - VFNMSUB231SS VEXLIG
VEX.66.W1.0f38bf RVM XMM XMM XMM64 - VFNMSUB231SD VEXLIG
VEX.66.W1.L1.0f3a00 VMI XMM XMM IMM8 - VPERMQ IMM_8
VEX.66.W1.L1.0f3a01 VMI XMM XMM IMM8 - VPERMPD IMM_8
VEX.66.W0.0f3a02 RVMI XMM XMM XMM IMM8 VPBLENDD IMM_8
VEX.66.W0.0f3a04 RMI XMM XMM IMM8 - VPERMILPS IMM_8
VEX.66.W0.0f3a05 RMI XMM XMM IMM8 - VPERMILPD IMM_8
VEX.66.W0.L1.0f3a06 RVMI XMM XMM XMM IMM8 VPERM2F128 IMM_8
VEX.66.0f3a08 RVMI XMM XMM XMM IMM8 VROUNDPS IMM_8
VEX.66.0f3a09 RVMI XMM XMM XMM IMM8 VROUNDPD IMM_8
VEX.66.0f3a0a RVMI XMM XMM XMM32 IMM8 VROUNDSS IMM_8 VEXLIG
VEX.66.0f3a0b RVMI XMM XMM XMM64 IMM8 VROUNDSD IMM_8 VEXLIG
VEX.66.0f3a0c RVMI XMM XMM XMM IMM8 VBLENDPS IMM_8
VEX.66.0f3a0d RVMI XMM XMM XMM IMM8 VBLENDPD IMM_8
VEX.66.0f3a0e RVMI XMM XMM XMM IMM8 VPBLENDW IMM_8
VEX.66.0f3a0f RVMI XMM XMM XMM IMM8 VPALIGNR IMM_8
VEX.66.W0.L0.0f3a14 MRI GP8 XMM IMM8 - VPEXTRB IMM_8
VEX.66.W0.L0.0f3a15 MRI GP16 XMM IMM8 - VPEXTRW IMM_8
VEX.66.W0.L0.0f3a16 MRI GP XMM IMM8 - VPEXTRD IMM_8
VEX.66.W1.L0.0f3a16 MRI GP XMM IMM8 - VPEXTRQ IMM_8
VEX.66.L0.0f3a17 MRI GP32 XMM IMM8 - VEXTRACTPS IMM_8
VEX.66.W0.L1.0f3a18 RVMI XMM XMM XMM IMM8 VINSERTF128 IMM_8
VEX.66.W0.L1.0f3a19 MRI XMM XMM IMM8 - VEXTRACTF128 IMM_8
VEX.66.W0.L1.0f3a1d MRI XMM XMM IMM8 - VCVTPS2PH IMM_8
VEX.66.W0.L0.0f3a20 RMI XMM GP8 IMM8 - VPINSRB IMM_8
VEX.66.L0.0f3a21 RVMI XMM XMM XMM32 IMM8 VINSERTPS IMM_8
VEX.66.W0.L0.0f3a22 RMI XMM GP IMM8 - VPINSRD IMM_8
VEX.66.W1.L0.0f3a22 RMI XMM GP IMM8 - VPINSRQ IMM_8
VEX.66.W0.L1.0f3a38 RVMI XMM XMM XMM IMM8 VINSERTI128 IMM_8
VEX.66.W0.L1.0f3a39 MRI XMM XMM IMM8 - VEXTRACTI128 IMM_8
VEX.66.0f3a40 RVMI XMM XMM XMM IMM8 VDPPS IMM_8
VEX.66.0f3a41 RVMI XMM XMM XMM IMM8 VDPPD IMM_8
VEX.66.0f3a42 RVMI XMM XMM XMM IMM8 VMPSADBW IMM_8
VEX.66.0f3a44 RVMI XMM XMM XMM IMM8 VPCLMULQDQ IMM_8
VEX.66.W0.L1.0f3a46 RVMI XMM XMM XMM IMM8 VPERM2I128 IMM_8
VEX.66.0f3a60 RMI XMM XMM IMM8 - VPCMPESTRM IMM_8
VEX.66.0f3a61 RMI XMM XMM IMM8 - VPCMPESTRI IMM_8
VEX.66.0f3a62 RMI XMM XMM IMM8 - VPCMPISTRM IMM_8
VEX.66.0f3a63 RMI XMM XMM IMM8 - VPCMPISTRI IMM_8
VEX.66.W1.L1.0f3a00 VMI XMM XMM IMM8 - VPERMQ
VEX.66.W1.L1.0f3a01 VMI XMM XMM IMM8 - VPERMPD
VEX.66.W0.0f3a02 RVMI XMM XMM XMM IMM8 VPBLENDD
VEX.66.W0.0f3a04 RMI XMM XMM IMM8 - VPERMILPS
VEX.66.W0.0f3a05 RMI XMM XMM IMM8 - VPERMILPD
VEX.66.W0.L1.0f3a06 RVMI XMM XMM XMM IMM8 VPERM2F128
VEX.66.0f3a08 RVMI XMM XMM XMM IMM8 VROUNDPS
VEX.66.0f3a09 RVMI XMM XMM XMM IMM8 VROUNDPD
VEX.66.0f3a0a RVMI XMM XMM XMM32 IMM8 VROUNDSS VEXLIG
VEX.66.0f3a0b RVMI XMM XMM XMM64 IMM8 VROUNDSD VEXLIG
VEX.66.0f3a0c RVMI XMM XMM XMM IMM8 VBLENDPS
VEX.66.0f3a0d RVMI XMM XMM XMM IMM8 VBLENDPD
VEX.66.0f3a0e RVMI XMM XMM XMM IMM8 VPBLENDW
VEX.66.0f3a0f RVMI XMM XMM XMM IMM8 VPALIGNR
VEX.66.W0.L0.0f3a14 MRI GP8 XMM IMM8 - VPEXTRB
VEX.66.W0.L0.0f3a15 MRI GP16 XMM IMM8 - VPEXTRW
VEX.66.W0.L0.0f3a16 MRI GP XMM IMM8 - VPEXTRD
VEX.66.W1.L0.0f3a16 MRI GP XMM IMM8 - VPEXTRQ
VEX.66.L0.0f3a17 MRI GP32 XMM IMM8 - VEXTRACTPS
VEX.66.W0.L1.0f3a18 RVMI XMM XMM XMM IMM8 VINSERTF128
VEX.66.W0.L1.0f3a19 MRI XMM XMM IMM8 - VEXTRACTF128
VEX.66.W0.L1.0f3a1d MRI XMM XMM IMM8 - VCVTPS2PH
VEX.66.W0.L0.0f3a20 RMI XMM GP8 IMM8 - VPINSRB
VEX.66.L0.0f3a21 RVMI XMM XMM XMM32 IMM8 VINSERTPS
VEX.66.W0.L0.0f3a22 RMI XMM GP IMM8 - VPINSRD
VEX.66.W1.L0.0f3a22 RMI XMM GP IMM8 - VPINSRQ
VEX.66.W0.L1.0f3a38 RVMI XMM XMM XMM IMM8 VINSERTI128
VEX.66.W0.L1.0f3a39 MRI XMM XMM IMM8 - VEXTRACTI128
VEX.66.0f3a40 RVMI XMM XMM XMM IMM8 VDPPS
VEX.66.0f3a41 RVMI XMM XMM XMM IMM8 VDPPD
VEX.66.0f3a42 RVMI XMM XMM XMM IMM8 VMPSADBW
VEX.66.0f3a44 RVMI XMM XMM XMM IMM8 VPCLMULQDQ
VEX.66.W0.L1.0f3a46 RVMI XMM XMM XMM IMM8 VPERM2I128
VEX.66.0f3a60 RMI XMM XMM IMM8 - VPCMPESTRM
VEX.66.0f3a61 RMI XMM XMM IMM8 - VPCMPESTRI
VEX.66.0f3a62 RMI XMM XMM IMM8 - VPCMPISTRM
VEX.66.0f3a63 RMI XMM XMM IMM8 - VPCMPISTRI
#
# BMI1
VEX.NP.L0.0f38f2 RVM GP GP GP - ANDN
@@ -1249,7 +1249,7 @@ VEX.NP.L0.0f38f3/2 VM GP GP - - BLSMSK
VEX.NP.L0.0f38f3/3 VM GP GP - - BLSI
VEX.NP.L0.0f38f7 RMV GP GP GP - BEXTR
# BMI2
VEX.F2.L0.0f3af0 RMI GP GP IMM8 - RORX IMM_8
VEX.F2.L0.0f3af0 RMI GP GP IMM8 - RORX
VEX.NP.L0.0f38f5 RMV GP GP GP - BZHI
VEX.F2.L0.0f38f5 RVM GP GP GP - PDEP
VEX.F3.L0.0f38f5 RVM GP GP GP - PEXT
@@ -1436,8 +1436,8 @@ F3.0fae//e0+ O GP - - - PTWRITE
# GFNI
66.0f38cf RM XMM XMM - - GF2P8MULB
66.0f3ace RMI XMM XMM IMM8 - GF2P8AFFINEQB IMM_8
66.0f3acf RMI XMM XMM IMM8 - GF2P8AFFINEINVQB IMM_8
66.0f3ace RMI XMM XMM IMM8 - GF2P8AFFINEQB
66.0f3acf RMI XMM XMM IMM8 - GF2P8AFFINEINVQB
# ENQCMD
F2.0f38f8 RM GP MEMZ - - ENQCMD
@@ -1474,7 +1474,7 @@ NP.0f38ca RM XMM XMM - - SHA1MSG2
NP.0f38cb RMA XMM XMM XMM - SHA256RNDS2
NP.0f38cc RM XMM XMM - - SHA256MSG1
NP.0f38cd RM XMM XMM - - SHA256MSG2
NP.0f3acc RMI XMM XMM IMM8 - SHA1RNDS4 IMM_8
NP.0f3acc RMI XMM XMM IMM8 - SHA1RNDS4
NP.0f1a RM BND MEMZ - - BNDLDX MUSTMEM
66.0f1a RM BND BND - - BNDMOV DEF64

View File

@@ -170,11 +170,16 @@ class InstrDesc(NamedTuple):
if "DEF64" in self.flags: flags.sized64 = 1
if "SIZE_8" in self.flags: flags.size8 = 1
if "INSTR_WIDTH" in self.flags: flags.instr_width = 1
if "IMM_8" in self.flags: flags.imm_control = {4: 5, 6: 7}[flags.imm_control]
if "LOCK" in self.flags: flags.lock = 1
if "VSIB" in self.flags: flags.vsib = 1
if "MUSTMEM" in self.flags: setattr(flags, "op%d_regty"%(flags.modrm_idx^3), 0xf)
if flags.imm_control >= 4:
imm_op = next(op for op in self.operands if op.kind == OpKind.K_IMM)
if ("IMM_8" in self.flags or imm_op.size == 1 or
(imm_op.size == OpKind.SZ_OP and flags.size8)):
flags.imm_control |= 1
enc = flags._encode(6)
enc = tuple(int.from_bytes(enc[i:i+2], "little") for i in range(0, 6, 2))
# First 2 bytes are the mnemonic, last 6 bytes are the encoding.

View File

@@ -130,6 +130,18 @@ main(int argc, char** argv)
// [reg+s*reg+disp32]
TEST64("\x42\x01\x84\x25\x01\x00\x00\x00", "[ADD mem4:r5+1*r12+0x1 reg4:r0]");
TEST("\x04\x01", "[ADD reg1:r0 imm1:0x1]");
TEST("\x66\x68\xff\xad", "[PUSH imm2:0xadff]");
TEST32("\x68\xff\xad\x90\xbc", "[PUSH imm4:0xbc90adff]");
TEST64("\x68\xff\xad\x90\xbc", "[PUSH imm8:0xffffffffbc90adff]");
TEST("\x66\x6a\xff", "[PUSH imm2:0xffff]");
TEST32("\x6a\xff", "[PUSH imm4:0xffffffff]");
TEST64("\x6a\xff", "[PUSH imm8:0xffffffffffffffff]");
TEST("\xb0\xf0", "[MOVABS reg1:r0 imm1:0xf0]");
TEST("\xb8\xf0\xf0\xab\xff", "[MOVABS reg4:r0 imm4:0xffabf0f0]");
TEST64("\x48\xb8\xf0\xf0\xab\xff\x00\x12\x12\xcd", "[MOVABS reg8:r0 imm8:0xcd121200ffabf0f0]");
TEST64("\xcd\x80", "[INT imm1:0x80]");
TEST("\x66\xc8\x00\x00\x00", "[ENTER_2 imm4:0x0]");
TEST("\x66\xc8\x00\x0f\x00", "[ENTER_2 imm4:0xf00]");
TEST("\x66\xc8\x00\x00\x01", "[ENTER_2 imm4:0x10000]");