From 5bc545cd977323455c70a8cb82e41e2231678a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C4=81vius?= Date: Fri, 28 Aug 2026 16:23:17 -0400 Subject: [PATCH] x86: the decoder's choice of mnemonic is declared, not emergent Two defects, one shape: something the decoder must decide was never stated, so it fell out of where an entry landed in an unstably sorted table. CANONICITY. Several mnemonics name one encoding -- SHL and SAL are both /4, JE and JZ are both 0x74. Decoding a representative of each and diffing against llvm-mc: 74 patterns, 22 agreed, 52 did not (0F 84 -> JZ where llvm-mc says JE, A4 -> MOVS vs MOVSB, DB E2 -> FCLEX vs FNCLEX). aliases.odin now declares 57 {alias, canonical} rows, each canonical name MEASURED from llvm-mc rather than picked, and gen.odin drops an aliased entry as it collects decode entries -- so the name never reaches the tables. The drop is conditional on the canonical name covering the byte-identical encoding, which is what lets MOV be the alias at the A0-A3/B8 moffs forms while staying the only name for 88/89. Aliases stay fully encodable; only decoding narrows. 119 of 1350 legacy entries dropped, 74 of 74 now agree. This also fixes the four SAL/SHL failures left by the previous commit, at their root rather than by extending a hand-written list. ADDRESS SIZE. 0xE3's mnemonic is chosen by which counter register it tests -- the 67h axis -- and REX.W does not affect address size at all. Modelling JRCXZ as force_rex_w made its encoding 48 E3 cb where llvm-mc emits a bare E3 cb, gave JECXZ the bare encoding that is really JRCXZ in long mode, and left three indistinguishable entries. Encoding_Flags gains addr_size (2 of 6 spare bits); the matcher refuses a form the mode cannot express, the encoder emits 67h when it differs from the default, the decoder selects on it before the operand-size pass. All ten cases match llvm-mc, refusals included. The tests keep no second copy of the alias table: mnemonics_eq compares canonical_mnemonic, and run_alias_table_test asserts the stronger property the generator guarantees -- zero encodings spelled by two surviving mnemonics. It caught the E3 ambiguity on its own. Also fixed: gen.odin's write_flags enumerates Encoding_Flags by hand and silently dropped addr_size from the generated tables -- the flag read back as its zero value and the instruction was quietly mis-modelled. 271 passed. Bites: dropping {.SAL, .SHL} returns the prime_sieve failure and the guard names every shift-group opcode; restoring force_rex_w decodes E3 00 as JCXZ and encodes JRCXZ to three bytes. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Riok9vMpkLmo78wsVKJHhz --- core/rexcode/isa/x86/aliases.odin | 130 ++ core/rexcode/isa/x86/decoder.odin | 15 + core/rexcode/isa/x86/encoder.odin | 31 +- core/rexcode/isa/x86/encoding_types.odin | 49 +- core/rexcode/isa/x86/tablegen/gen.odin | 76 + .../x86/tablegen/generated/decode_tables.odin | 1459 ++++++++--------- .../x86/tablegen/generated/encode_tables.odin | 6 +- .../isa/x86/tablegen/instruction_table.odin | 12 +- .../isa/x86/tables/x86.encode_forms.bin | Bin 39648 -> 39648 bytes .../isa/x86/tables/x86.encode_recipes.bin | Bin 29736 -> 29736 bytes core/rexcode/isa/x86/tables/x86.evex.bin | Bin 8420 -> 8420 bytes core/rexcode/isa/x86/tables/x86.idx_0f.bin | Bin 4096 -> 4096 bytes core/rexcode/isa/x86/tables/x86.idx_0f38.bin | Bin 4096 -> 4096 bytes core/rexcode/isa/x86/tables/x86.idx_0f3a.bin | Bin 4096 -> 4096 bytes .../rexcode/isa/x86/tables/x86.idx_legacy.bin | Bin 4096 -> 4096 bytes core/rexcode/isa/x86/tables/x86.legacy.bin | Bin 27000 -> 24620 bytes core/rexcode/isa/x86/tables/x86.vex.bin | Bin 14140 -> 14140 bytes core/rexcode/isa/x86/tests/test.odin | 218 ++- 18 files changed, 1171 insertions(+), 825 deletions(-) create mode 100644 core/rexcode/isa/x86/aliases.odin diff --git a/core/rexcode/isa/x86/aliases.odin b/core/rexcode/isa/x86/aliases.odin new file mode 100644 index 000000000..42c8077a4 --- /dev/null +++ b/core/rexcode/isa/x86/aliases.odin @@ -0,0 +1,130 @@ +// rexcode · Brendan Punsky (dotbmp@github), original author + +package rexcode_x86 + +// ============================================================================= +// MNEMONIC ALIASES — which of several names for one encoding a disassembler prints +// ============================================================================= +// +// Some x86 instructions have several legal mnemonics for ONE encoding. SHL and +// SAL are both ModRM.reg=4 in the shift group; JE and JZ are both 0x74; there +// are 57 such pairs. A decoder has nothing to tell them apart with — the bytes +// are identical — so it must simply pick a name, and that choice has to be +// DECLARED. Left undeclared it falls out of wherever the entry happened to land +// in the (unstably sorted) decode table: correct, arbitrary, and free to move on +// any table regeneration. It did move once, and four tests that had always +// passed began reporting `SAL != expected SHL`. +// +// The canonical name here is the one **llvm-mc prints**, measured rather than +// chosen: llvm-mc is the ground truth every verifier in this library diffs +// against, so agreeing with it is what makes a disassembly comparable. Before +// this table, 52 of the 74 aliased encodings decoded to a name llvm-mc does not +// use (`0F 84` → JZ where it says JE, `A4` → MOVS where it says MOVSB, `DB E2` → +// FCLEX where it says FNCLEX). +// +// An alias stays fully ENCODABLE — `inst_r_r(.SAL, …)` emits the same bytes it +// always did. Only the decode direction is narrowed, and only where the +// canonical name covers the byte-identical encoding: that condition is what lets +// MOV be the alias at the `A0`-`A3`/`B8` moffs forms while remaining the only +// name for `88`/`89`. `tablegen/gen.odin` applies it when it collects decode +// entries, so an aliased mnemonic never reaches the decode tables at all. +// +// Adding an instruction whose mnemonic aliases another one's encoding requires a +// row here; `run_alias_table_test` in tests/ recomputes the ambiguity from the +// built tables and fails by name if one is missing, so it cannot be forgotten. + +Mnemonic_Alias :: struct { + alias: Mnemonic, // never produced by the decoder + canonical: Mnemonic, // produced instead, at the byte-identical encoding +} + +@(rodata) +MNEMONIC_ALIASES := [?]Mnemonic_Alias{ + // -- Jcc, both the short 0x7x and near 0x0F 8x forms -------------------- + {.JNAE, .JB}, {.JC, .JB}, + {.JNB, .JAE}, {.JNC, .JAE}, + {.JZ, .JE}, + {.JNZ, .JNE}, + {.JNA, .JBE}, + {.JNBE, .JA}, + {.JPE, .JP}, + {.JPO, .JNP}, + {.JNGE, .JL}, + {.JNL, .JGE}, + {.JNG, .JLE}, + {.JNLE, .JG}, + + // -- CMOVcc (0x0F 4x) --------------------------------------------------- + {.CMOVNAE, .CMOVB}, {.CMOVC, .CMOVB}, + {.CMOVNB, .CMOVAE}, {.CMOVNC, .CMOVAE}, + {.CMOVZ, .CMOVE}, + {.CMOVNZ, .CMOVNE}, + {.CMOVNA, .CMOVBE}, + {.CMOVNBE, .CMOVA}, + {.CMOVPE, .CMOVP}, + {.CMOVPO, .CMOVNP}, + {.CMOVNGE, .CMOVL}, + {.CMOVNL, .CMOVGE}, + {.CMOVNG, .CMOVLE}, + {.CMOVNLE, .CMOVG}, + + // -- SETcc (0x0F 9x) ---------------------------------------------------- + {.SETNAE, .SETB}, {.SETC, .SETB}, + {.SETNB, .SETAE}, {.SETNC, .SETAE}, + {.SETZ, .SETE}, + {.SETNZ, .SETNE}, + {.SETNA, .SETBE}, + {.SETNBE, .SETA}, + {.SETPE, .SETP}, + {.SETPO, .SETNP}, + {.SETNGE, .SETL}, + {.SETNL, .SETGE}, + {.SETNG, .SETLE}, + {.SETNLE, .SETG}, + + // -- Shift group: SAL and SHL are both /4, the same encoding ------------ + {.SAL, .SHL}, + + // -- String ops: the bare name against the explicitly byte-sized one ---- + {.CMPS, .CMPSB}, + {.LODS, .LODSB}, + {.MOVS, .MOVSB}, + {.SCAS, .SCASB}, + {.STOS, .STOSB}, + + // -- x87: the assembler's wait-prefixed spelling of a no-wait opcode ---- + // (FSTENV is really `9B D9 /6`; the table gives it the bare `D9 /6`, which + // is FNSTENV. Modelling the 9B prefix is a separate question — until then + // the bare encoding decodes as the no-wait name, which is what it is.) + {.FCLEX, .FNCLEX}, + {.FINIT, .FNINIT}, + {.FSAVE, .FNSAVE}, + {.FSTCW, .FNSTCW}, + {.FSTENV, .FNSTENV}, + {.FSTSW, .FNSTSW}, + + // -- Odds -------------------------------------------------------------- + {.FWAIT, .WAIT}, + {.XLAT, .XLATB}, + // MOV aliases MOVABS only at the moffs (`A0`-`A3`) and imm64 (`B8+r`) + // forms; the coverage rule leaves every other MOV encoding untouched. + {.MOV, .MOVABS}, +} + +// The name a disassembler prints for `m`'s encoding — `m` itself unless it is a +// declared alias. Useful to an assembler front-end that accepts either spelling +// and wants to compare against decoder output. +canonical_mnemonic :: proc "contextless" (m: Mnemonic) -> Mnemonic { + for entry in MNEMONIC_ALIASES { + if entry.alias == m { return entry.canonical } + } + return m +} + +// Is `m` a name the decoder never produces? +is_mnemonic_alias :: proc "contextless" (m: Mnemonic) -> bool { + for entry in MNEMONIC_ALIASES { + if entry.alias == m { return true } + } + return false +} diff --git a/core/rexcode/isa/x86/decoder.odin b/core/rexcode/isa/x86/decoder.odin index e883944ab..69127337f 100644 --- a/core/rexcode/isa/x86/decoder.odin +++ b/core/rexcode/isa/x86/decoder.odin @@ -565,6 +565,21 @@ decode_opcode :: proc(state: ^Decoder_State) -> (entry: ^Decode_Entry, vex_entry } if !has_modrm_byte { + // ADDRESS-size variants first: a form declaring one is picked by which + // address size is in effect (mode default vs 67h), an axis the operand- + // size scan below cannot see -- it reads REX.W and 66h, and neither + // affects address size. 0xE3 is the case: JRCXZ/JECXZ/JCXZ are one + // opcode telling RCX/ECX/CX apart, and nothing else in the bytes says + // which. Checked before the operand-size pass so a REX.W-prefixed E3 + // (legal, and ignored by the CPU for address size) still reads as JRCXZ. + addr_want := effective_addr_size(state.mode, state.prefix_67) + for i in 0.. FS, // 0F A8/A9 -> GS), so a form only matches when the user's segment agrees -- // otherwise `push gs` would take the first {SREG} form (FS) and mis-encode. diff --git a/core/rexcode/isa/x86/encoding_types.odin b/core/rexcode/isa/x86/encoding_types.odin index d4958d284..c756f65c7 100644 --- a/core/rexcode/isa/x86/encoding_types.odin +++ b/core/rexcode/isa/x86/encoding_types.odin @@ -241,6 +241,48 @@ VEX_L :: enum u8 { L2, // L = 2 (512-bit, EVEX only) } +/* + The ADDRESS size a form requires -- a different axis from operand size (66h / + REX.W), selected by 67h against the mode's default: 64-bit in long mode and + 32-bit under 67h; 32-bit in protected mode and 16-bit under 67h. + + Almost every instruction is DEFAULT (it works at whatever address size is in + effect). It matters where address size picks the MNEMONIC: 0xE3 is JRCXZ, + JECXZ or JCXZ purely by which counter register it tests, and nothing else in + the encoding says which. Modelling that as REX.W (which does not affect + address size at all) made `48 E3 cb` the encoding of JRCXZ, where the correct + one is a bare `E3 cb`, and left the decoder unable to tell the three apart. +*/ +Addr_Size :: enum u8 { + DEFAULT, // whatever the mode/prefix selects; the form does not care + A16, // 16-bit addressing (CX) + A32, // 32-bit addressing (ECX) + A64, // 64-bit addressing (RCX); long mode only +} + +// The address size in effect for `mode` with/without a 67h override. +effective_addr_size :: #force_inline proc "contextless" (mode: Mode, prefix_67: bool) -> Addr_Size { + if mode == ._64 { + return prefix_67 ? .A32 : .A64 + } + return prefix_67 ? .A16 : .A32 +} + +// Does reaching `want` in `mode` require a 67h prefix, and is it reachable at all? +addr_size_prefix :: #force_inline proc "contextless" (want: Addr_Size, mode: Mode) -> (prefix_67: bool, ok: bool) { + if want == .DEFAULT { + return false, true + } + if want == effective_addr_size(mode, false) { + return false, true + } + if want == effective_addr_size(mode, true) { + return true, true + } + // e.g. JCXZ (A16) in long mode: 67h there gives 32-bit, never 16-bit. + return false, false +} + // ----------------------------------------------------------------------------- // SECTION: 6.5 Encoding Flags // ----------------------------------------------------------------------------- @@ -259,6 +301,7 @@ Encoding_Flags :: bit_field u32 { rep_ok: bool | 1, // REP prefix valid modrm_reg_ext: bool | 1, // ModR/M reg field is opcode extension (use ext field) mode_32_only: bool | 1, // only valid in Mode._32 (e.g. short-form INC/DEC at 0x40-0x4F) + addr_size: Addr_Size | 2, // required ADDRESS size (67h axis); selects JCXZ/JECXZ/JRCXZ explicit_count: u8 | 3, // 0..<4 non-implicit operands has_implicit: bool | 1, // any implicit operand @@ -302,8 +345,9 @@ encoding_flags :: #force_inline proc "contextless" ( no_rex: bool = false, lock_ok: bool = false, rep_ok: bool = false, - modrm_reg_ext: bool = false, - mode_32_only: bool = false, + modrm_reg_ext: bool = false, + mode_32_only: bool = false, + addr_size: Addr_Size = .DEFAULT, ) -> Encoding_Flags { return Encoding_Flags{ esc = esc, @@ -319,6 +363,7 @@ encoding_flags :: #force_inline proc "contextless" ( rep_ok = rep_ok, modrm_reg_ext = modrm_reg_ext, mode_32_only = mode_32_only, + addr_size = addr_size, } } diff --git a/core/rexcode/isa/x86/tablegen/gen.odin b/core/rexcode/isa/x86/tablegen/gen.odin index 41346c4ff..7b8b47275 100644 --- a/core/rexcode/isa/x86/tablegen/gen.odin +++ b/core/rexcode/isa/x86/tablegen/gen.odin @@ -267,6 +267,9 @@ emit_decode_tables :: proc() -> (n_legacy, n_vex, n_evex: int) { } } } + drop_aliased(&legacy) + drop_aliased(&vex) + drop_aliased(&evex) slice.sort_by(legacy[:], entry_less) slice.sort_by(vex[:], entry_less) slice.sort_by(evex[:], entry_less) @@ -290,6 +293,73 @@ emit_decode_tables :: proc() -> (n_legacy, n_vex, n_evex: int) { return len(legacy), len(vex), len(evex) } +/* + Several mnemonics can name ONE encoding (SHL and SAL are both /4 in the shift + group; JE and JZ are both 0x74). The decoder reads bytes, so it cannot tell + them apart and must simply print one name -- which means the choice has to be + declared, or it falls out of wherever the entry lands in the sort below. + + lib.MNEMONIC_ALIASES declares it. An alias entry is dropped here, before the + tables are written, so the name never reaches the decoder at all; it stays + fully encodable, since ENCODE_FORMS is built from the same table separately. + + The drop is CONDITIONAL on the canonical name covering the byte-identical + encoding. That is what keeps the rule safe for a mnemonic that is an alias at + one opcode and the only name at another: MOV aliases MOVABS at the `A0`-`A3` + moffs and `B8+r` imm64 forms, and dropping it unconditionally would leave + `88`/`89` -- ordinary register MOV -- with no decode entry at all. +*/ +drop_aliased :: proc(entries: ^[dynamic]Collected_Entry) { + Key :: struct { + esc: lib.Escape, + prefix: u8, + opcode: u8, + ext: u8, + ops: [4]lib.Operand_Type, + enc: [4]lib.Operand_Encoding, + flags: lib.Encoding_Flags, + vex_w: lib.VEX_W, + vex_l: lib.VEX_L, + } + key_of :: proc(e: Collected_Entry) -> Key { + return Key{e.esc, e.prefix, e.opcode, e.ext, e.ops, e.enc, e.flags, e.vex_w, e.vex_l} + } + /* Which mnemonics each indistinguishable encoding is spelled by. */ + names := make(map[Key][dynamic]lib.Mnemonic) + defer { + for _, list in names { delete(list) } + delete(names) + } + for e in entries { + key := key_of(e) + list, present := &names[key] + if !present { + names[key] = make([dynamic]lib.Mnemonic) + list = &names[key] + } + append(list, e.mnemonic) + } + + kept := 0 + for e in entries { + drop := false + for entry in lib.MNEMONIC_ALIASES { + if entry.alias != e.mnemonic { continue } + for spelling in names[key_of(e)] { + if spelling == entry.canonical { + drop = true + break + } + } + if drop { break } + } + if drop { continue } + entries[kept] = e + kept += 1 + } + resize(entries, kept) +} + entry_less :: proc(a, b: Collected_Entry) -> bool { if a.esc != b.esc { return int(a.esc) < int(b.esc) } if a.prefix != b.prefix { return a.prefix < b.prefix } @@ -470,6 +540,12 @@ write_flags :: proc(sb: ^strings.Builder, enc: union{lib.Encoding, Collected_Ent if flags.rep_ok { append(&parts, "rep_ok=true") } if flags.modrm_reg_ext { append(&parts, "modrm_reg_ext=true") } if flags.mode_32_only { append(&parts, "mode_32_only=true") } + if flags.addr_size != .DEFAULT { append(&parts, fmt.tprintf("addr_size=.%v", flags.addr_size)) } + /* EVERY Encoding_Flags field must be listed above. This enumerates the + struct by hand, so a field added there and forgotten here is silently + dropped from the generated tables -- the flag reads back as its zero value + and the instruction is quietly mis-modelled, with nothing to see in the + diff but its absence. `addr_size` was added and did exactly that. */ switch e in enc { case lib.Encoding: diff --git a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin index 7dec7ce02..9e62a84bb 100644 --- a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin @@ -144,27 +144,27 @@ SIB_TABLE := [256]lib.SIB_Info{ } @(rodata) -LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ +LEGACY_DECODE_ENTRIES := [1231]lib.Decode_Entry{ {.NONE, 0, 0x00, 0xFF, .ADD, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x01, 0xFF, .ADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x01, 0xFF, .ADD, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x01, 0xFF, .ADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x01, 0xFF, .ADD, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x02, 0xFF, .ADD, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x03, 0xFF, .ADD, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x03, 0xFF, .ADD, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x03, 0xFF, .ADD, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x04, 0xFF, .ADD, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x05, 0xFF, .ADD, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x05, 0xFF, .ADD, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x05, 0xFF, .ADD, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x05, 0xFF, .ADD, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x08, 0xFF, .OR, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x09, 0xFF, .OR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x09, 0xFF, .OR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x09, 0xFF, .OR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x09, 0xFF, .OR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0A, 0xFF, .OR, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x0B, 0xFF, .OR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0B, 0xFF, .OR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0B, 0xFF, .OR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x0B, 0xFF, .OR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0C, 0xFF, .OR, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x0D, 0xFF, .OR, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x0D, 0xFF, .OR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, @@ -182,115 +182,101 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0x15, 0xFF, .ADC, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x15, 0xFF, .ADC, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x18, 0xFF, .SBB, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x19, 0xFF, .SBB, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x19, 0xFF, .SBB, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x19, 0xFF, .SBB, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x19, 0xFF, .SBB, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1A, 0xFF, .SBB, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x1B, 0xFF, .SBB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1B, 0xFF, .SBB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x1B, 0xFF, .SBB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1B, 0xFF, .SBB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1C, 0xFF, .SBB, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x1D, 0xFF, .SBB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x1D, 0xFF, .SBB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x1D, 0xFF, .SBB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x1D, 0xFF, .SBB, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x20, 0xFF, .AND, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x21, 0xFF, .AND, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x21, 0xFF, .AND, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x21, 0xFF, .AND, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x21, 0xFF, .AND, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x22, 0xFF, .AND, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x23, 0xFF, .AND, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x23, 0xFF, .AND, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x23, 0xFF, .AND, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x23, 0xFF, .AND, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x24, 0xFF, .AND, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x25, 0xFF, .AND, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x25, 0xFF, .AND, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x25, 0xFF, .AND, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x25, 0xFF, .AND, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x28, 0xFF, .SUB, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x29, 0xFF, .SUB, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x29, 0xFF, .SUB, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x29, 0xFF, .SUB, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2A, 0xFF, .SUB, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2B, 0xFF, .SUB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x2B, 0xFF, .SUB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2B, 0xFF, .SUB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x2B, 0xFF, .SUB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2C, 0xFF, .SUB, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x2D, 0xFF, .SUB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x2D, 0xFF, .SUB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x2D, 0xFF, .SUB, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x30, 0xFF, .XOR, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x31, 0xFF, .XOR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x31, 0xFF, .XOR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x31, 0xFF, .XOR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x31, 0xFF, .XOR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x31, 0xFF, .XOR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x32, 0xFF, .XOR, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x33, 0xFF, .XOR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x33, 0xFF, .XOR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x33, 0xFF, .XOR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x34, 0xFF, .XOR, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x35, 0xFF, .XOR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x35, 0xFF, .XOR, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x35, 0xFF, .XOR, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x35, 0xFF, .XOR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x38, 0xFF, .CMP, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x39, 0xFF, .CMP, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x39, 0xFF, .CMP, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x39, 0xFF, .CMP, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x39, 0xFF, .CMP, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3A, 0xFF, .CMP, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x3B, 0xFF, .CMP, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3B, 0xFF, .CMP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3B, 0xFF, .CMP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x3B, 0xFF, .CMP, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3C, 0xFF, .CMP, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x3D, 0xFF, .CMP, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x3D, 0xFF, .CMP, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x3D, 0xFF, .CMP, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x3D, 0xFF, .CMP, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x40, 0xFF, .INC, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x40, 0xFF, .INC, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, + {.NONE, 0, 0x40, 0xFF, .INC, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x48, 0xFF, .DEC, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x48, 0xFF, .DEC, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, - {.NONE, 0, 0x50, 0xFF, .PUSH, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x50, 0xFF, .PUSH, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, - {.NONE, 0, 0x58, 0xFF, .POP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, + {.NONE, 0, 0x50, 0xFF, .PUSH, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x58, 0xFF, .POP, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x58, 0xFF, .POP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, {.NONE, 0, 0x62, 0xFF, .BOUND, {.R32, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {mode_32_only=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x62, 0xFF, .BOUND, {.R16, .M16_16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {mode_32_only=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x63, 0xFF, .MOVSXD, {.R64, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x63, 0xFF, .ARPL, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x68, 0xFF, .PUSH, {.IMM16, .NONE, .NONE, .NONE}, {.IW, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x68, 0xFF, .PUSH, {.IMM32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x68, 0xFF, .PUSH, {.IMM16, .NONE, .NONE, .NONE}, {.IW, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x69, 0xFF, .IMUL, {.R32, .RM32, .IMM32, .NONE}, {.REG, .MR, .ID, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x69, 0xFF, .IMUL, {.R16, .RM16, .IMM16, .NONE}, {.REG, .MR, .IW, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x69, 0xFF, .IMUL, {.R64, .RM64, .IMM32, .NONE}, {.REG, .MR, .ID, .NONE}, {force_rex_w=true, op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6A, 0xFF, .PUSH, {.IMM8SX, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R32, .RM32, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R16, .RM16, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R64, .RM64, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {force_rex_w=true, op_count=3, needs_modrm=true}}, - {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R32, .RM32, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x70, 0xFF, .JO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x71, 0xFF, .JNO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x72, 0xFF, .JNAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x72, 0xFF, .JC, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x72, 0xFF, .JB, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x73, 0xFF, .JAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x73, 0xFF, .JNB, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x73, 0xFF, .JNC, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x74, 0xFF, .JE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x74, 0xFF, .JZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x75, 0xFF, .JNZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x75, 0xFF, .JNE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x76, 0xFF, .JBE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x76, 0xFF, .JNA, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x77, 0xFF, .JNBE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x77, 0xFF, .JA, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x78, 0xFF, .JS, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x79, 0xFF, .JNS, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7A, 0xFF, .JPE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7A, 0xFF, .JP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7B, 0xFF, .JNP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7B, 0xFF, .JPO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7C, 0xFF, .JNGE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7C, 0xFF, .JL, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7D, 0xFF, .JNL, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7D, 0xFF, .JGE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7E, 0xFF, .JLE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7E, 0xFF, .JNG, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7F, 0xFF, .JNLE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7F, 0xFF, .JG, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x80, 0x00, .ADD, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x80, 0x01, .OR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -301,60 +287,60 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0x80, 0x06, .XOR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x80, 0x07, .CMP, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x00, .ADD, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x00, .ADD, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x00, .ADD, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x01, .OR, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x01, .OR, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x00, .ADD, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x01, .OR, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x01, .OR, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x01, .OR, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x02, .ADC, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x02, .ADC, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x02, .ADC, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x02, .ADC, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x03, .SBB, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x03, .SBB, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x03, .SBB, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x03, .SBB, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x03, .SBB, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x04, .AND, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x04, .AND, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x04, .AND, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x05, .SUB, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x05, .SUB, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x05, .SUB, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x05, .SUB, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x06, .XOR, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x06, .XOR, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x06, .XOR, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x06, .XOR, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x06, .XOR, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x07, .CMP, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x07, .CMP, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x07, .CMP, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x07, .CMP, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x00, .ADD, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x00, .ADD, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x00, .ADD, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x00, .ADD, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x00, .ADD, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x01, .OR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x01, .OR, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x01, .OR, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x01, .OR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x02, .ADC, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x02, .ADC, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x02, .ADC, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x03, .SBB, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x03, .SBB, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x02, .ADC, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x02, .ADC, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x03, .SBB, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x04, .AND, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x03, .SBB, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x03, .SBB, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x04, .AND, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x04, .AND, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x04, .AND, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x05, .SUB, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x05, .SUB, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x05, .SUB, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x05, .SUB, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x06, .XOR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x06, .XOR, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x06, .XOR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x06, .XOR, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x84, 0xFF, .TEST, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x85, 0xFF, .TEST, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x85, 0xFF, .TEST, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x85, 0xFF, .TEST, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x85, 0xFF, .TEST, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x86, 0xFF, .XCHG, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x88, 0xFF, .MOV, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x89, 0xFF, .MOV, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, @@ -369,71 +355,57 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0x8D, 0xFF, .LEA, {.R64, .M, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x8D, 0xFF, .LEA, {.R16, .M, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x8D, 0xFF, .LEA, {.R32, .M, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x8E, 0xFF, .MOV, {.SREG, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x8E, 0xFF, .MOV, {.SREG, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x8F, 0x00, .POP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0x8E, 0xFF, .MOV, {.SREG, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x8F, 0x00, .POP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {default_64=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0x8F, 0x00, .POP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.EAX_IMPL, .R32, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.AX_IMPL, .R16, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.RAX_IMPL, .R64, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x90, 0xFF, .NOP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0x98, 0xFF, .CWDE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x98, 0xFF, .CDQE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0x98, 0xFF, .CBW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0x98, 0xFF, .CWDE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0x99, 0xFF, .CQO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0x99, 0xFF, .CDQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x99, 0xFF, .CWD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0x99, 0xFF, .CQO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0x9B, 0xFF, .WAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0x9B, 0xFF, .FWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9C, 0xFF, .PUSHFQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {default_64=true}}, - {.NONE, 0, 0x9C, 0xFF, .PUSHFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9C, 0xFF, .PUSHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0x9D, 0xFF, .POPFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0x9C, 0xFF, .PUSHFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9D, 0xFF, .POPFQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {default_64=true}}, + {.NONE, 0, 0x9D, 0xFF, .POPFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9D, 0xFF, .POPF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0x9E, 0xFF, .SAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9F, 0xFF, .LAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xA0, 0xFF, .MOVABS, {.AL_IMPL, .MOFFS8, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA0, 0xFF, .MOV, {.AL_IMPL, .MOFFS8, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA1, 0xFF, .MOVABS, {.EAX_IMPL, .MOFFS32, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA1, 0xFF, .MOVABS, {.AX_IMPL, .MOFFS16, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA1, 0xFF, .MOVABS, {.RAX_IMPL, .MOFFS64, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0xA1, 0xFF, .MOV, {.EAX_IMPL, .MOFFS32, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA1, 0xFF, .MOV, {.AX_IMPL, .MOFFS16, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA1, 0xFF, .MOV, {.RAX_IMPL, .MOFFS64, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0xA2, 0xFF, .MOVABS, {.MOFFS8, .AL_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA2, 0xFF, .MOV, {.MOFFS8, .AL_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA3, 0xFF, .MOVABS, {.MOFFS16, .AX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA3, 0xFF, .MOVABS, {.MOFFS64, .RAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0xA3, 0xFF, .MOVABS, {.MOFFS32, .EAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS16, .AX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS32, .EAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS64, .RAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0xA4, 0xFF, .MOVS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA3, 0xFF, .MOVABS, {.MOFFS16, .AX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA4, 0xFF, .MOVSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xA5, 0xFF, .MOVSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xA5, 0xFF, .MOVSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xA5, 0xFF, .MOVSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA5, 0xFF, .MOVSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xA6, 0xFF, .CMPSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xA6, 0xFF, .CMPS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA7, 0xFF, .CMPSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, - {.NONE, 0, 0xA7, 0xFF, .CMPSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xA7, 0xFF, .CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA7, 0xFF, .CMPSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xA8, 0xFF, .TEST, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA9, 0xFF, .TEST, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA9, 0xFF, .TEST, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA9, 0xFF, .TEST, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0xAA, 0xFF, .STOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA9, 0xFF, .TEST, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xAA, 0xFF, .STOSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAB, 0xFF, .STOSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xAB, 0xFF, .STOSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAB, 0xFF, .STOSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xAB, 0xFF, .STOSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xAC, 0xFF, .LODSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAC, 0xFF, .LODS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAD, 0xFF, .LODSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xAD, 0xFF, .LODSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAD, 0xFF, .LODSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, - {.NONE, 0, 0xAE, 0xFF, .SCAS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAD, 0xFF, .LODSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xAE, 0xFF, .SCASB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAF, 0xFF, .SCASD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAF, 0xFF, .SCASW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, @@ -442,119 +414,105 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xB8, 0xFF, .MOVABS, {.R64, .IMM64, .NONE, .NONE}, {.OP_R, .IQ, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0xB8, 0xFF, .MOV, {.R32, .IMM32, .NONE, .NONE}, {.OP_R, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xB8, 0xFF, .MOV, {.R16, .IMM16, .NONE, .NONE}, {.OP_R, .IW, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xB8, 0xFF, .MOV, {.R64, .IMM64, .NONE, .NONE}, {.OP_R, .IQ, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0xC0, 0x00, .ROL, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x01, .ROR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x02, .RCL, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x03, .RCR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x04, .SHL, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC0, 0x04, .SAL, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x05, .SHR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x07, .SAR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x00, .ROL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x00, .ROL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x00, .ROL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x01, .ROR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x01, .ROR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x01, .ROR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x01, .ROR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x02, .RCL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x02, .RCL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x02, .RCL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x02, .RCL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x03, .RCR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x03, .RCR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x03, .RCR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x04, .SAL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x04, .SAL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x04, .SAL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x04, .SHL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x04, .SHL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x03, .RCR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x04, .SHL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x04, .SHL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x04, .SHL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x05, .SHR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x05, .SHR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x05, .SHR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x07, .SAR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x07, .SAR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x07, .SAR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x07, .SAR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC2, 0xFF, .RET, {.IMM16, .NONE, .NONE, .NONE}, {.IW, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xC3, 0xFF, .RET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xC6, 0x00, .MOV, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC7, 0x00, .MOV, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC7, 0x00, .MOV, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC7, 0x00, .MOV, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC7, 0x00, .MOV, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC8, 0xFF, .ENTER, {.IMM16, .IMM8, .NONE, .NONE}, {.IW, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xC9, 0xFF, .LEAVE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xCC, 0xFF, .INT3, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xCD, 0xFF, .INT, {.IMM8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xCE, 0xFF, .INTO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xCF, 0xFF, .IRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0xCF, 0xFF, .IRETD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0xCF, 0xFF, .IRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0xCF, 0xFF, .IRETQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0xD0, 0x00, .ROL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x01, .ROR, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x02, .RCL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x03, .RCR, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x04, .SHL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD0, 0x04, .SAL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x05, .SHR, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x07, .SAR, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x00, .ROL, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x00, .ROL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x00, .ROL, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x01, .ROR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x01, .ROR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x00, .ROL, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x01, .ROR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x01, .ROR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x01, .ROR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x02, .RCL, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x02, .RCL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x02, .RCL, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x03, .RCR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x03, .RCR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x02, .RCL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x03, .RCR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x04, .SAL, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x04, .SAL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x04, .SAL, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x04, .SHL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x03, .RCR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x03, .RCR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x04, .SHL, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x04, .SHL, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x04, .SHL, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x05, .SHR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x05, .SHR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x05, .SHR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x07, .SAR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD1, 0x07, .SAR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x05, .SHR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD1, 0x07, .SAR, {.RM32, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x07, .SAR, {.RM16, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD1, 0x07, .SAR, {.RM64, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x00, .ROL, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x01, .ROR, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x02, .RCL, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x03, .RCR, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD2, 0x04, .SAL, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x04, .SHL, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x05, .SHR, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD2, 0x07, .SAR, {.RM8, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x00, .ROL, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x00, .ROL, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x00, .ROL, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD3, 0x01, .ROR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x01, .ROR, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x01, .ROR, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x01, .ROR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x02, .RCL, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x02, .RCL, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x02, .RCL, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD3, 0x02, .RCL, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x03, .RCR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x03, .RCR, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x03, .RCR, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x04, .SAL, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x04, .SAL, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x04, .SAL, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x04, .SHL, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x04, .SHL, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x04, .SHL, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD3, 0x04, .SHL, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD3, 0x04, .SHL, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x05, .SHR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x05, .SHR, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x05, .SHR, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xD3, 0x07, .SAR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x07, .SAR, {.RM32, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD3, 0x07, .SAR, {.RM16, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xD3, 0x07, .SAR, {.RM64, .CL_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD7, 0xFF, .XLATB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xD7, 0xFF, .XLAT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xD8, 0x01, .FMUL, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD8, 0x02, .FCOM, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD8, 0x03, .FCOMP, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -578,8 +536,6 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xD9, 0x04, .FLDENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x05, .FLDCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x06, .FNSTENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xD9, 0x06, .FSTENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xD9, 0x07, .FSTCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x07, .FNSTCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0xC0, .FLD, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xD9, 0xC8, .FXCH, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -611,8 +567,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xD9, 0xFC, .FRNDINT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xD9, 0xFD, .FSCALE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xD9, 0xFE, .FSIN, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xD9, 0xFF, .FLD, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0xFF, .FCOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0xD9, 0xFF, .FLD, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDA, 0x01, .FIMUL, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDA, 0x02, .FICOM, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDA, 0x03, .FICOMP, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -635,10 +591,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xDB, 0xC8, .FCMOVNE, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xD0, .FCMOVNBE, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xD8, .FCMOVNU, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xDB, 0xE2, .FCLEX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE2, .FNCLEX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE3, .FNINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xDB, 0xE3, .FINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE8, .FUCOMI, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xF0, .FCOMI, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xFF, .FILD, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, @@ -661,8 +615,6 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xDD, 0x03, .FSTP, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x04, .FRSTOR, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x06, .FNSAVE, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xDD, 0x06, .FSAVE, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xDD, 0x07, .FSTSW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x07, .FNSTSW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0xC0, .FFREE, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDD, 0xD0, .FST, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -702,22 +654,21 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xDF, 0x07, .FISTP, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDF, 0xC0, .FFREEP, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDF, 0xE0, .FNSTSW, {.AX_IMPL, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0xDF, 0xE0, .FSTSW, {.AX_IMPL, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDF, 0xE8, .FUCOMIP, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDF, 0xF0, .FCOMIP, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDF, 0xFF, .FILD, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, {.NONE, 0, 0xE0, 0xFF, .LOOPNE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xE1, 0xFF, .LOOPE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xE2, 0xFF, .LOOP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0xE3, 0xFF, .JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {force_rex_w=true, op_count=1}}, - {.NONE, 0, 0xE3, 0xFF, .JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0xE3, 0xFF, .JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0xE3, 0xFF, .JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {addr_size=.A64, op_count=1}}, + {.NONE, 0, 0xE3, 0xFF, .JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {addr_size=.A16, op_count=1}}, + {.NONE, 0, 0xE3, 0xFF, .JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {addr_size=.A32, op_count=1}}, {.NONE, 0, 0xE4, 0xFF, .IN, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xE5, 0xFF, .IN, {.EAX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xE5, 0xFF, .IN, {.AX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {opsize_16=true, op_count=2}}, {.NONE, 0, 0xE6, 0xFF, .OUT, {.IMM8, .AL_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xE7, 0xFF, .OUT, {.IMM8, .AX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, {opsize_16=true, op_count=2}}, {.NONE, 0, 0xE7, 0xFF, .OUT, {.IMM8, .EAX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xE7, 0xFF, .OUT, {.IMM8, .AX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, {opsize_16=true, op_count=2}}, {.NONE, 0, 0xE8, 0xFF, .CALL, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xE9, 0xFF, .JMP, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xEB, 0xFF, .JMP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -737,18 +688,18 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xF6, 0x05, .IMUL, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF6, 0x06, .DIV, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF6, 0x07, .IDIV, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xF7, 0x00, .TEST, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x00, .TEST, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xF7, 0x00, .TEST, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x00, .TEST, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xF7, 0x02, .NOT, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xF7, 0x02, .NOT, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x02, .NOT, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xF7, 0x03, .NEG, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xF7, 0x02, .NOT, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xF7, 0x02, .NOT, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x03, .NEG, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x03, .NEG, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xF7, 0x04, .MUL, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xF7, 0x03, .NEG, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x04, .MUL, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x04, .MUL, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xF7, 0x04, .MUL, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x05, .IMUL, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x05, .IMUL, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xF7, 0x05, .IMUL, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -766,16 +717,16 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xFD, 0xFF, .STD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xFE, 0x00, .INC, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFE, 0x01, .DEC, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xFF, 0x00, .INC, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xFF, 0x00, .INC, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x00, .INC, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xFF, 0x00, .INC, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xFF, 0x00, .INC, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x01, .DEC, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x01, .DEC, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x01, .DEC, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x02, .CALL, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {default_64=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xFF, 0x03, .CALL, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x03, .CALL, {.M16_16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x03, .CALL, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xFF, 0x03, .CALL, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x04, .JMP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {default_64=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x05, .JMP, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xFF, 0x05, .JMP, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -784,11 +735,11 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {.NONE, 0, 0xFF, 0x06, .PUSH, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 2, 0x90, 0xFF, .PAUSE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {prefix=2}}, {._0F, 0, 0x00, 0x00, .SLDT, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x00, 0x00, .SLDT, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x00, .SLDT, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x00, 0x00, .SLDT, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x01, .STR, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x00, 0x01, .STR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x01, .STR, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x00, 0x01, .STR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x02, .LLDT, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x03, .LTR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x04, .VERR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -797,8 +748,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0x01, 0x00, .SGDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x01, .SIDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x01, .SIDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x01, 0x02, .LGDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x02, .LGDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x01, 0x02, .LGDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x03, .LIDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x03, .LIDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x04, .SMSW, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -842,8 +793,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0x01, 0xFE, .INVLPGB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xFF, .TLBSYNC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x02, 0xFF, .LAR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x02, 0xFF, .LAR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x02, 0xFF, .LAR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x02, 0xFF, .LAR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x03, 0xFF, .LSL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x03, 0xFF, .LSL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x03, 0xFF, .LSL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -857,22 +808,22 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0x0D, 0x01, .PREFETCHW, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x10, 0xFF, .MOVUPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x11, 0xFF, .MOVUPS, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x12, 0xFF, .MOVLPS, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x12, 0xFF, .MOVHLPS, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x12, 0xFF, .MOVLPS, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x13, 0xFF, .MOVLPS, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x14, 0xFF, .UNPCKLPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x15, 0xFF, .UNPCKHPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x16, 0xFF, .MOVHPS, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x16, 0xFF, .MOVLHPS, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x16, 0xFF, .MOVHPS, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x17, 0xFF, .MOVHPS, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x18, 0x00, .PREFETCHNTA, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x18, 0x01, .PREFETCHT0, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x18, 0x02, .PREFETCHT1, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x18, 0x03, .PREFETCHT2, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x1C, 0x00, .CLDEMOTE, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x1F, 0x00, .NOP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x1F, 0x00, .NOP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x1F, 0x00, .NOP, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x1F, 0x00, .NOP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x1F, 0x00, .NOP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x20, 0xFF, .MOV, {.R64, .CR, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x21, 0xFF, .MOV, {.R64, .DR, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x22, 0xFF, .MOV, {.CR, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -888,96 +839,54 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0x33, 0xFF, .RDPMC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x34, 0xFF, .SYSENTER, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x35, 0xFF, .SYSEXIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, - {._0F, 0, 0x40, 0xFF, .CMOVO, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x40, 0xFF, .CMOVO, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x40, 0xFF, .CMOVO, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x40, 0xFF, .CMOVO, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x41, 0xFF, .CMOVNO, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x41, 0xFF, .CMOVNO, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x41, 0xFF, .CMOVNO, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVNAE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVNAE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVNAE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVC, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVC, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x42, 0xFF, .CMOVB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .CMOVC, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNC, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNC, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNC, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVNB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x42, 0xFF, .CMOVB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x42, 0xFF, .CMOVB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x43, 0xFF, .CMOVAE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x43, 0xFF, .CMOVAE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x43, 0xFF, .CMOVAE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x43, 0xFF, .CMOVAE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x44, 0xFF, .CMOVZ, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x44, 0xFF, .CMOVZ, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x44, 0xFF, .CMOVE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x44, 0xFF, .CMOVE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x44, 0xFF, .CMOVE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x44, 0xFF, .CMOVE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x44, 0xFF, .CMOVZ, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x45, 0xFF, .CMOVNZ, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x45, 0xFF, .CMOVNZ, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x45, 0xFF, .CMOVNZ, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x45, 0xFF, .CMOVNE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x45, 0xFF, .CMOVNE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x45, 0xFF, .CMOVNE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x46, 0xFF, .CMOVNA, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x46, 0xFF, .CMOVNA, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x46, 0xFF, .CMOVNA, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x46, 0xFF, .CMOVBE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x46, 0xFF, .CMOVBE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x46, 0xFF, .CMOVBE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x47, 0xFF, .CMOVNBE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x47, 0xFF, .CMOVNBE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x47, 0xFF, .CMOVNBE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x47, 0xFF, .CMOVA, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x47, 0xFF, .CMOVA, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x47, 0xFF, .CMOVA, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x47, 0xFF, .CMOVA, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x48, 0xFF, .CMOVS, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x48, 0xFF, .CMOVS, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x48, 0xFF, .CMOVS, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x48, 0xFF, .CMOVS, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x49, 0xFF, .CMOVNS, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x49, 0xFF, .CMOVNS, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x49, 0xFF, .CMOVNS, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .CMOVPE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .CMOVPE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .CMOVPE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .CMOVP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .CMOVP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x49, 0xFF, .CMOVNS, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4A, 0xFF, .CMOVP, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4B, 0xFF, .CMOVPO, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4B, 0xFF, .CMOVPO, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4B, 0xFF, .CMOVPO, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4B, 0xFF, .CMOVNP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4B, 0xFF, .CMOVNP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4A, 0xFF, .CMOVP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4A, 0xFF, .CMOVP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4B, 0xFF, .CMOVNP, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4C, 0xFF, .CMOVNGE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4C, 0xFF, .CMOVNGE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4C, 0xFF, .CMOVNGE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4C, 0xFF, .CMOVL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4B, 0xFF, .CMOVNP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4B, 0xFF, .CMOVNP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4C, 0xFF, .CMOVL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4C, 0xFF, .CMOVL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4C, 0xFF, .CMOVL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4D, 0xFF, .CMOVNL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4D, 0xFF, .CMOVNL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4D, 0xFF, .CMOVNL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4D, 0xFF, .CMOVGE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4D, 0xFF, .CMOVGE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4D, 0xFF, .CMOVGE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4E, 0xFF, .CMOVNG, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4E, 0xFF, .CMOVNG, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4E, 0xFF, .CMOVNG, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4E, 0xFF, .CMOVLE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4E, 0xFF, .CMOVLE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4D, 0xFF, .CMOVGE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4E, 0xFF, .CMOVLE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4F, 0xFF, .CMOVNLE, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4F, 0xFF, .CMOVNLE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4F, 0xFF, .CMOVNLE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4E, 0xFF, .CMOVLE, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4E, 0xFF, .CMOVLE, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x50, 0xFF, .MOVMSKPS, {.R64, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x50, 0xFF, .MOVMSKPS, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x51, 0xFF, .SQRTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -1004,88 +913,60 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0x7F, 0xFF, .MOVQ, {.MM_M64, .MM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x80, 0xFF, .JO, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x81, 0xFF, .JNO, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x82, 0xFF, .JC, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x82, 0xFF, .JB, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x82, 0xFF, .JNAE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x83, 0xFF, .JNC, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x83, 0xFF, .JNB, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x83, 0xFF, .JAE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x84, 0xFF, .JZ, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x84, 0xFF, .JE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x85, 0xFF, .JNZ, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x85, 0xFF, .JNE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x86, 0xFF, .JBE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x86, 0xFF, .JNA, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x87, 0xFF, .JNBE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x87, 0xFF, .JA, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x88, 0xFF, .JS, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x89, 0xFF, .JNS, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8A, 0xFF, .JP, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8A, 0xFF, .JPE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8B, 0xFF, .JPO, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8B, 0xFF, .JNP, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8C, 0xFF, .JNGE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8C, 0xFF, .JL, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8D, 0xFF, .JNL, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8D, 0xFF, .JGE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8E, 0xFF, .JNG, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8E, 0xFF, .JLE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, - {._0F, 0, 0x8F, 0xFF, .JNLE, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x8F, 0xFF, .JG, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0x90, 0xFF, .SETO, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x91, 0xFF, .SETNO, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x92, 0xFF, .SETNAE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x92, 0xFF, .SETC, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x92, 0xFF, .SETB, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x93, 0xFF, .SETNC, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x93, 0xFF, .SETNB, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x93, 0xFF, .SETAE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x94, 0xFF, .SETZ, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x94, 0xFF, .SETE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x95, 0xFF, .SETNZ, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x95, 0xFF, .SETNE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x96, 0xFF, .SETNA, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x96, 0xFF, .SETBE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x97, 0xFF, .SETNBE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x97, 0xFF, .SETA, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x98, 0xFF, .SETS, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x99, 0xFF, .SETNS, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9A, 0xFF, .SETPE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9A, 0xFF, .SETP, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9B, 0xFF, .SETPO, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9B, 0xFF, .SETNP, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9C, 0xFF, .SETNGE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9C, 0xFF, .SETL, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9D, 0xFF, .SETNL, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9D, 0xFF, .SETGE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9E, 0xFF, .SETNG, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9E, 0xFF, .SETLE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x9F, 0xFF, .SETNLE, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0x9F, 0xFF, .SETG, {.RM8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1, needs_modrm=true}}, {._0F, 0, 0xA0, 0xFF, .PUSH, {.SREG, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xA1, 0xFF, .POP, {.SREG, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xA2, 0xFF, .CPUID, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0xA3, 0xFF, .BT, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xA3, 0xFF, .BT, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xA3, 0xFF, .BT, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xA3, 0xFF, .BT, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xA4, 0xFF, .SHLD, {.RM64, .R64, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, {._0F, 0, 0xA4, 0xFF, .SHLD, {.RM16, .R16, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xA4, 0xFF, .SHLD, {.RM32, .R32, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, + {._0F, 0, 0xA5, 0xFF, .SHLD, {.RM64, .R64, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, {._0F, 0, 0xA5, 0xFF, .SHLD, {.RM16, .R16, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xA5, 0xFF, .SHLD, {.RM32, .R32, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, - {._0F, 0, 0xA5, 0xFF, .SHLD, {.RM64, .R64, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, {._0F, 0, 0xA8, 0xFF, .PUSH, {.SREG, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xA9, 0xFF, .POP, {.SREG, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xAA, 0xFF, .RSM, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, - {._0F, 0, 0xAB, 0xFF, .BTS, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xAB, 0xFF, .BTS, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xAB, 0xFF, .BTS, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xAC, 0xFF, .SHRD, {.RM32, .R32, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, - {._0F, 0, 0xAC, 0xFF, .SHRD, {.RM16, .R16, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, + {._0F, 0, 0xAB, 0xFF, .BTS, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xAC, 0xFF, .SHRD, {.RM64, .R64, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, + {._0F, 0, 0xAC, 0xFF, .SHRD, {.RM16, .R16, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, + {._0F, 0, 0xAC, 0xFF, .SHRD, {.RM32, .R32, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, + {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM64, .R64, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM16, .R16, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM32, .R32, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, - {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM64, .R64, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, {._0F, 0, 0xAE, 0x00, .FXSAVE, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x00, .FXSAVE64, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x01, .FXRSTOR, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -1094,8 +975,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0xAE, 0x04, .XSAVE64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x05, .XRSTOR, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x05, .XRSTOR64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xAE, 0x06, .XSAVEOPT, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x06, .XSAVEOPT64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xAE, 0x06, .XSAVEOPT, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x07, .CLFLUSH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0xE8, .LFENCE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0xAE, 0xF0, .MFENCE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, @@ -1105,65 +986,65 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 0, 0xAF, 0xFF, .IMUL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB0, 0xFF, .CMPXCHG, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xB3, 0xFF, .BTR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB3, 0xFF, .BTR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB3, 0xFF, .BTR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xB6, 0xFF, .MOVZX, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xB6, 0xFF, .MOVZX, {.R16, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xB3, 0xFF, .BTR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB6, 0xFF, .MOVZX, {.R64, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xB6, 0xFF, .MOVZX, {.R16, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xB6, 0xFF, .MOVZX, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB7, 0xFF, .MOVZX, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB7, 0xFF, .MOVZX, {.R64, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB9, 0xFF, .UD1, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBA, 0x04, .BT, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x04, .BT, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x04, .BT, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBA, 0x04, .BT, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x05, .BTS, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x05, .BTS, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x05, .BTS, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBA, 0x06, .BTR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBA, 0x06, .BTR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x06, .BTR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBA, 0x06, .BTR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBA, 0x06, .BTR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x07, .BTC, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBA, 0x07, .BTC, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBA, 0x07, .BTC, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBB, 0xFF, .BTC, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBA, 0x07, .BTC, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBB, 0xFF, .BTC, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBB, 0xFF, .BTC, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBB, 0xFF, .BTC, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBC, 0xFF, .BSF, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBC, 0xFF, .BSF, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBC, 0xFF, .BSF, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBC, 0xFF, .BSF, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBD, 0xFF, .BSR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBD, 0xFF, .BSR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBD, 0xFF, .BSR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBD, 0xFF, .BSR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xBE, 0xFF, .MOVSX, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBE, 0xFF, .MOVSX, {.R16, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xBE, 0xFF, .MOVSX, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBE, 0xFF, .MOVSX, {.R64, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBF, 0xFF, .MOVSX, {.R64, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBF, 0xFF, .MOVSX, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC0, 0xFF, .XADD, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xC1, 0xFF, .XADD, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC1, 0xFF, .XADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC1, 0xFF, .XADD, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xC1, 0xFF, .XADD, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC2, 0xFF, .CMPPS, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xC6, 0xFF, .SHUFPS, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x01, .CMPXCHG8B, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x01, .CMPXCHG16B, {.M128, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x03, .XRSTORS64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x01, .CMPXCHG8B, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x03, .XRSTORS, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x04, .XSAVEC64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x03, .XRSTORS64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x04, .XSAVEC, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x05, .XSAVES, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x04, .XSAVEC64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x05, .XSAVES64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x05, .XSAVES, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .VMPTRLD, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .RDRAND, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .RDRAND, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .RDRAND, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .RDSEED, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x07, .RDSEED, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .RDSEED, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .VMPTRST, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x07, .RDSEED, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC8, 0xFF, .BSWAP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=1}}, {._0F, 0, 0xC8, 0xFF, .BSWAP, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xFF, 0xFF, .UD0, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -1209,8 +1090,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 1, 0x6B, 0xFF, .PACKSSDW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x6C, 0xFF, .PUNPCKLQDQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x6D, 0xFF, .PUNPCKHQDQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x6E, 0xFF, .MOVQ, {.XMM, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x6E, 0xFF, .MOVD, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x6E, 0xFF, .MOVQ, {.XMM, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x6F, 0xFF, .MOVDQA, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x70, 0xFF, .PSHUFD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x71, 0x02, .PSRLW, {.XMM, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -1226,8 +1107,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 1, 0x76, 0xFF, .PCMPEQD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7C, 0xFF, .HADDPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7D, 0xFF, .HSUBPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x7E, 0xFF, .MOVQ, {.R64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7E, 0xFF, .MOVD, {.RM32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x7E, 0xFF, .MOVQ, {.R64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7F, 0xFF, .MOVDQA, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0xAE, 0x06, .TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 1, 0xAE, 0x06, .CLWB, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -1235,8 +1116,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 1, 0xC2, 0xFF, .CMPPD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC4, 0xFF, .PINSRW, {.XMM, .M16, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC4, 0xFF, .PINSRW, {.XMM, .R32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xC5, 0xFF, .PEXTRW, {.R32, .XMM, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC5, 0xFF, .PEXTRW, {.R64, .XMM, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xC5, 0xFF, .PEXTRW, {.R32, .XMM, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC6, 0xFF, .SHUFPD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC7, 0x06, .VMCLEAR, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 1, 0xD0, 0xFF, .ADDSUBPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, @@ -1297,16 +1178,16 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 2, 0x11, 0xFF, .MOVSS, {.XMM_M32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x12, 0xFF, .MOVSLDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x16, 0xFF, .MOVSHDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0x1E, 0x01, .RDSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0x1E, 0x01, .RDSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0x1E, 0x01, .RDSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0x1E, 0xFA, .ENDBR64, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, {._0F, 2, 0x1E, 0xFB, .ENDBR32, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, - {._0F, 2, 0x2A, 0xFF, .CVTSI2SS, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2A, 0xFF, .CVTSI2SS, {.XMM, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x2A, 0xFF, .CVTSI2SS, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2C, 0xFF, .CVTTSS2SI, {.R64, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2C, 0xFF, .CVTTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0x2D, 0xFF, .CVTSS2SI, {.R64, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2D, 0xFF, .CVTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x2D, 0xFF, .CVTSS2SI, {.R64, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0x51, 0xFF, .SQRTSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x52, 0xFF, .RSQRTSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x53, 0xFF, .RCPSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, @@ -1326,25 +1207,25 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 2, 0xAE, 0x00, .RDFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x01, .RDGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x01, .RDGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 2, 0xAE, 0x02, .WRFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x02, .WRFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x02, .WRFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x03, .WRGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x03, .WRGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x04, .PTWRITE, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x04, .PTWRITE, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 2, 0xAE, 0x05, .INCSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x05, .INCSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x05, .INCSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x06, .UMONITOR, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x06, .CLRSSBSY, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0xBC, 0xFF, .TZCNT, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0xBC, 0xFF, .TZCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0xBC, 0xFF, .TZCNT, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 2, 0xBC, 0xFF, .TZCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, + {._0F, 2, 0xBC, 0xFF, .TZCNT, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, + {._0F, 2, 0xBD, 0xFF, .LZCNT, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0xBD, 0xFF, .LZCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0xBD, 0xFF, .LZCNT, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0xBD, 0xFF, .LZCNT, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0xC2, 0xFF, .CMPSS, {.XMM, .XMM_M32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=2, op_count=3, needs_modrm=true}}, {._0F, 2, 0xC7, 0x06, .VMXON, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xC7, 0x07, .RDPID, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -1354,8 +1235,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F, 3, 0x10, 0xFF, .MOVSD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x11, 0xFF, .MOVSD, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x12, 0xFF, .MOVDDUP, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, - {._0F, 3, 0x2A, 0xFF, .CVTSI2SD, {.XMM, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2A, 0xFF, .CVTSI2SD, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x2A, 0xFF, .CVTSI2SD, {.XMM, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2C, 0xFF, .CVTTSD2SI, {.R32, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2C, 0xFF, .CVTTSD2SI, {.R64, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2D, 0xFF, .CVTSD2SI, {.R32, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, @@ -1385,9 +1266,9 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R64, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R16, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R32, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, - {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF6, 0xFF, .WRSSD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF6, 0xFF, .WRSSQ, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF9, 0xFF, .MOVDIRI, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, @@ -1442,8 +1323,8 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F38, 1, 0x41, 0xFF, .PHMINPOSUW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x80, 0xFF, .INVEPT, {.R64, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x81, 0xFF, .INVVPID, {.R64, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x82, 0xFF, .INVPCID, {.R64, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x82, 0xFF, .INVPCID, {.R32, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x82, 0xFF, .INVPCID, {.R64, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xDB, 0xFF, .AESIMC, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xDC, 0xFF, .AESENC, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xDD, 0xFF, .AESENCLAST, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, @@ -1463,9 +1344,9 @@ LEGACY_DECODE_ENTRIES := [1350]lib.Decode_Entry{ {._0F38, 2, 0xFC, 0xFF, .AXOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF0, 0xFF, .CRC32, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF0, 0xFF, .CRC32, {.R64, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, + {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, + {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF8, 0xFF, .ENQCMD, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xFC, 0xFF, .AOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xFC, 0xFF, .AOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, @@ -2696,119 +2577,119 @@ DECODE_INDEX_LEGACY := [4][256]lib.Decode_Index{ 0x6B = { 114, 3}, 0x70 = { 117, 1}, 0x71 = { 118, 1}, - 0x72 = { 119, 3}, - 0x73 = { 122, 3}, - 0x74 = { 125, 2}, - 0x75 = { 127, 2}, - 0x76 = { 129, 2}, - 0x77 = { 131, 2}, - 0x78 = { 133, 1}, - 0x79 = { 134, 1}, - 0x7A = { 135, 2}, - 0x7B = { 137, 2}, - 0x7C = { 139, 2}, - 0x7D = { 141, 2}, - 0x7E = { 143, 2}, - 0x7F = { 145, 2}, - 0x80 = { 147, 8}, - 0x81 = { 155, 24}, - 0x83 = { 179, 24}, - 0x84 = { 203, 1}, - 0x85 = { 204, 3}, - 0x86 = { 207, 1}, - 0x87 = { 208, 3}, - 0x88 = { 211, 1}, - 0x89 = { 212, 3}, - 0x8A = { 215, 1}, - 0x8B = { 216, 3}, - 0x8C = { 219, 2}, - 0x8D = { 221, 3}, - 0x8E = { 224, 2}, - 0x8F = { 226, 2}, - 0x90 = { 228, 4}, - 0x98 = { 232, 3}, - 0x99 = { 235, 3}, - 0x9B = { 238, 2}, - 0x9C = { 240, 3}, - 0x9D = { 243, 3}, - 0x9E = { 246, 1}, - 0x9F = { 247, 1}, - 0xA0 = { 248, 2}, - 0xA1 = { 250, 6}, - 0xA2 = { 256, 2}, - 0xA3 = { 258, 6}, - 0xA4 = { 264, 2}, - 0xA5 = { 266, 3}, - 0xA6 = { 269, 2}, - 0xA7 = { 271, 3}, - 0xA8 = { 274, 1}, - 0xA9 = { 275, 3}, - 0xAA = { 278, 2}, - 0xAB = { 280, 3}, - 0xAC = { 283, 2}, - 0xAD = { 285, 3}, - 0xAE = { 288, 2}, - 0xAF = { 290, 3}, - 0xB0 = { 293, 1}, - 0xB8 = { 294, 4}, - 0xC0 = { 298, 8}, - 0xC1 = { 306, 24}, - 0xC2 = { 330, 1}, - 0xC3 = { 331, 1}, - 0xC6 = { 332, 1}, - 0xC7 = { 333, 3}, - 0xC8 = { 336, 1}, - 0xC9 = { 337, 1}, - 0xCC = { 338, 1}, - 0xCD = { 339, 1}, - 0xCE = { 340, 1}, - 0xCF = { 341, 3}, - 0xD0 = { 344, 8}, - 0xD1 = { 352, 24}, - 0xD2 = { 376, 8}, - 0xD3 = { 384, 24}, - 0xD7 = { 408, 2}, - 0xD8 = { 410, 18}, - 0xD9 = { 428, 40}, - 0xDA = { 468, 13}, - 0xDB = { 481, 16}, - 0xDC = { 497, 14}, - 0xDD = { 511, 16}, - 0xDE = { 527, 21}, - 0xDF = { 548, 13}, - 0xE0 = { 561, 1}, - 0xE1 = { 562, 1}, - 0xE2 = { 563, 1}, - 0xE3 = { 564, 3}, - 0xE4 = { 567, 1}, - 0xE5 = { 568, 2}, - 0xE6 = { 570, 1}, - 0xE7 = { 571, 2}, - 0xE8 = { 573, 1}, - 0xE9 = { 574, 1}, - 0xEB = { 575, 1}, - 0xEC = { 576, 1}, - 0xED = { 577, 2}, - 0xEE = { 579, 1}, - 0xEF = { 580, 2}, - 0xF0 = { 582, 1}, - 0xF4 = { 583, 1}, - 0xF5 = { 584, 1}, - 0xF6 = { 585, 7}, - 0xF7 = { 592, 21}, - 0xF8 = { 613, 1}, - 0xF9 = { 614, 1}, - 0xFA = { 615, 1}, - 0xFB = { 616, 1}, - 0xFC = { 617, 1}, - 0xFD = { 618, 1}, - 0xFE = { 619, 2}, - 0xFF = { 621, 16}, + 0x72 = { 119, 1}, + 0x73 = { 120, 1}, + 0x74 = { 121, 1}, + 0x75 = { 122, 1}, + 0x76 = { 123, 1}, + 0x77 = { 124, 1}, + 0x78 = { 125, 1}, + 0x79 = { 126, 1}, + 0x7A = { 127, 1}, + 0x7B = { 128, 1}, + 0x7C = { 129, 1}, + 0x7D = { 130, 1}, + 0x7E = { 131, 1}, + 0x7F = { 132, 1}, + 0x80 = { 133, 8}, + 0x81 = { 141, 24}, + 0x83 = { 165, 24}, + 0x84 = { 189, 1}, + 0x85 = { 190, 3}, + 0x86 = { 193, 1}, + 0x87 = { 194, 3}, + 0x88 = { 197, 1}, + 0x89 = { 198, 3}, + 0x8A = { 201, 1}, + 0x8B = { 202, 3}, + 0x8C = { 205, 2}, + 0x8D = { 207, 3}, + 0x8E = { 210, 2}, + 0x8F = { 212, 2}, + 0x90 = { 214, 4}, + 0x98 = { 218, 3}, + 0x99 = { 221, 3}, + 0x9B = { 224, 1}, + 0x9C = { 225, 3}, + 0x9D = { 228, 3}, + 0x9E = { 231, 1}, + 0x9F = { 232, 1}, + 0xA0 = { 233, 1}, + 0xA1 = { 234, 3}, + 0xA2 = { 237, 1}, + 0xA3 = { 238, 3}, + 0xA4 = { 241, 1}, + 0xA5 = { 242, 3}, + 0xA6 = { 245, 1}, + 0xA7 = { 246, 3}, + 0xA8 = { 249, 1}, + 0xA9 = { 250, 3}, + 0xAA = { 253, 1}, + 0xAB = { 254, 3}, + 0xAC = { 257, 1}, + 0xAD = { 258, 3}, + 0xAE = { 261, 1}, + 0xAF = { 262, 3}, + 0xB0 = { 265, 1}, + 0xB8 = { 266, 3}, + 0xC0 = { 269, 7}, + 0xC1 = { 276, 21}, + 0xC2 = { 297, 1}, + 0xC3 = { 298, 1}, + 0xC6 = { 299, 1}, + 0xC7 = { 300, 3}, + 0xC8 = { 303, 1}, + 0xC9 = { 304, 1}, + 0xCC = { 305, 1}, + 0xCD = { 306, 1}, + 0xCE = { 307, 1}, + 0xCF = { 308, 3}, + 0xD0 = { 311, 7}, + 0xD1 = { 318, 21}, + 0xD2 = { 339, 7}, + 0xD3 = { 346, 21}, + 0xD7 = { 367, 1}, + 0xD8 = { 368, 18}, + 0xD9 = { 386, 38}, + 0xDA = { 424, 13}, + 0xDB = { 437, 14}, + 0xDC = { 451, 14}, + 0xDD = { 465, 14}, + 0xDE = { 479, 21}, + 0xDF = { 500, 12}, + 0xE0 = { 512, 1}, + 0xE1 = { 513, 1}, + 0xE2 = { 514, 1}, + 0xE3 = { 515, 3}, + 0xE4 = { 518, 1}, + 0xE5 = { 519, 2}, + 0xE6 = { 521, 1}, + 0xE7 = { 522, 2}, + 0xE8 = { 524, 1}, + 0xE9 = { 525, 1}, + 0xEB = { 526, 1}, + 0xEC = { 527, 1}, + 0xED = { 528, 2}, + 0xEE = { 530, 1}, + 0xEF = { 531, 2}, + 0xF0 = { 533, 1}, + 0xF4 = { 534, 1}, + 0xF5 = { 535, 1}, + 0xF6 = { 536, 7}, + 0xF7 = { 543, 21}, + 0xF8 = { 564, 1}, + 0xF9 = { 565, 1}, + 0xFA = { 566, 1}, + 0xFB = { 567, 1}, + 0xFC = { 568, 1}, + 0xFD = { 569, 1}, + 0xFE = { 570, 2}, + 0xFF = { 572, 16}, }, { // prefix = 66 }, { // prefix = F3 - 0x90 = { 637, 1}, + 0x90 = { 588, 1}, }, { // prefix = F2 }, @@ -2817,434 +2698,434 @@ DECODE_INDEX_LEGACY := [4][256]lib.Decode_Index{ @(rodata) DECODE_INDEX_ESC_0F := [4][256]lib.Decode_Index{ { // prefix = none - 0x00 = { 638, 10}, - 0x01 = { 648, 48}, - 0x02 = { 696, 3}, - 0x03 = { 699, 3}, - 0x05 = { 702, 1}, - 0x06 = { 703, 1}, - 0x07 = { 704, 1}, - 0x08 = { 705, 1}, - 0x09 = { 706, 1}, - 0x0B = { 707, 1}, - 0x0D = { 708, 2}, - 0x10 = { 710, 1}, - 0x11 = { 711, 1}, - 0x12 = { 712, 2}, - 0x13 = { 714, 1}, - 0x14 = { 715, 1}, - 0x15 = { 716, 1}, - 0x16 = { 717, 2}, - 0x17 = { 719, 1}, - 0x18 = { 720, 4}, - 0x1C = { 724, 1}, - 0x1F = { 725, 3}, - 0x20 = { 728, 1}, - 0x21 = { 729, 1}, - 0x22 = { 730, 1}, - 0x23 = { 731, 1}, - 0x28 = { 732, 1}, - 0x29 = { 733, 1}, - 0x2B = { 734, 1}, - 0x2E = { 735, 1}, - 0x2F = { 736, 1}, - 0x30 = { 737, 1}, - 0x31 = { 738, 1}, - 0x32 = { 739, 1}, - 0x33 = { 740, 1}, - 0x34 = { 741, 1}, - 0x35 = { 742, 1}, - 0x40 = { 743, 3}, - 0x41 = { 746, 3}, - 0x42 = { 749, 9}, - 0x43 = { 758, 9}, - 0x44 = { 767, 6}, - 0x45 = { 773, 6}, - 0x46 = { 779, 6}, - 0x47 = { 785, 6}, - 0x48 = { 791, 3}, - 0x49 = { 794, 3}, - 0x4A = { 797, 6}, - 0x4B = { 803, 6}, - 0x4C = { 809, 6}, - 0x4D = { 815, 6}, - 0x4E = { 821, 6}, - 0x4F = { 827, 6}, - 0x50 = { 833, 2}, - 0x51 = { 835, 1}, - 0x52 = { 836, 1}, - 0x53 = { 837, 1}, - 0x54 = { 838, 1}, - 0x55 = { 839, 1}, - 0x56 = { 840, 1}, - 0x57 = { 841, 1}, - 0x58 = { 842, 1}, - 0x59 = { 843, 1}, - 0x5A = { 844, 1}, - 0x5B = { 845, 1}, - 0x5C = { 846, 1}, - 0x5D = { 847, 1}, - 0x5E = { 848, 1}, - 0x5F = { 849, 1}, - 0x6E = { 850, 1}, - 0x6F = { 851, 1}, - 0x70 = { 852, 1}, - 0x78 = { 853, 1}, - 0x79 = { 854, 1}, - 0x7E = { 855, 1}, - 0x7F = { 856, 1}, - 0x80 = { 857, 1}, - 0x81 = { 858, 1}, - 0x82 = { 859, 3}, - 0x83 = { 862, 3}, - 0x84 = { 865, 2}, - 0x85 = { 867, 2}, - 0x86 = { 869, 2}, - 0x87 = { 871, 2}, - 0x88 = { 873, 1}, - 0x89 = { 874, 1}, - 0x8A = { 875, 2}, - 0x8B = { 877, 2}, - 0x8C = { 879, 2}, - 0x8D = { 881, 2}, - 0x8E = { 883, 2}, - 0x8F = { 885, 2}, - 0x90 = { 887, 1}, - 0x91 = { 888, 1}, - 0x92 = { 889, 3}, - 0x93 = { 892, 3}, - 0x94 = { 895, 2}, - 0x95 = { 897, 2}, - 0x96 = { 899, 2}, - 0x97 = { 901, 2}, - 0x98 = { 903, 1}, - 0x99 = { 904, 1}, - 0x9A = { 905, 2}, - 0x9B = { 907, 2}, - 0x9C = { 909, 2}, - 0x9D = { 911, 2}, - 0x9E = { 913, 2}, - 0x9F = { 915, 2}, - 0xA0 = { 917, 1}, - 0xA1 = { 918, 1}, - 0xA2 = { 919, 1}, - 0xA3 = { 920, 3}, - 0xA4 = { 923, 3}, - 0xA5 = { 926, 3}, - 0xA8 = { 929, 1}, - 0xA9 = { 930, 1}, - 0xAA = { 931, 1}, - 0xAB = { 932, 3}, - 0xAC = { 935, 3}, - 0xAD = { 938, 3}, - 0xAE = { 941, 14}, - 0xAF = { 955, 3}, - 0xB0 = { 958, 1}, - 0xB1 = { 959, 3}, - 0xB3 = { 962, 3}, - 0xB6 = { 965, 3}, - 0xB7 = { 968, 2}, - 0xB9 = { 970, 1}, - 0xBA = { 971, 12}, - 0xBB = { 983, 3}, - 0xBC = { 986, 3}, - 0xBD = { 989, 3}, - 0xBE = { 992, 3}, - 0xBF = { 995, 2}, - 0xC0 = { 997, 1}, - 0xC1 = { 998, 3}, - 0xC2 = {1001, 1}, - 0xC6 = {1002, 1}, - 0xC7 = {1003, 16}, - 0xC8 = {1019, 2}, - 0xFF = {1021, 1}, + 0x00 = { 589, 10}, + 0x01 = { 599, 48}, + 0x02 = { 647, 3}, + 0x03 = { 650, 3}, + 0x05 = { 653, 1}, + 0x06 = { 654, 1}, + 0x07 = { 655, 1}, + 0x08 = { 656, 1}, + 0x09 = { 657, 1}, + 0x0B = { 658, 1}, + 0x0D = { 659, 2}, + 0x10 = { 661, 1}, + 0x11 = { 662, 1}, + 0x12 = { 663, 2}, + 0x13 = { 665, 1}, + 0x14 = { 666, 1}, + 0x15 = { 667, 1}, + 0x16 = { 668, 2}, + 0x17 = { 670, 1}, + 0x18 = { 671, 4}, + 0x1C = { 675, 1}, + 0x1F = { 676, 3}, + 0x20 = { 679, 1}, + 0x21 = { 680, 1}, + 0x22 = { 681, 1}, + 0x23 = { 682, 1}, + 0x28 = { 683, 1}, + 0x29 = { 684, 1}, + 0x2B = { 685, 1}, + 0x2E = { 686, 1}, + 0x2F = { 687, 1}, + 0x30 = { 688, 1}, + 0x31 = { 689, 1}, + 0x32 = { 690, 1}, + 0x33 = { 691, 1}, + 0x34 = { 692, 1}, + 0x35 = { 693, 1}, + 0x40 = { 694, 3}, + 0x41 = { 697, 3}, + 0x42 = { 700, 3}, + 0x43 = { 703, 3}, + 0x44 = { 706, 3}, + 0x45 = { 709, 3}, + 0x46 = { 712, 3}, + 0x47 = { 715, 3}, + 0x48 = { 718, 3}, + 0x49 = { 721, 3}, + 0x4A = { 724, 3}, + 0x4B = { 727, 3}, + 0x4C = { 730, 3}, + 0x4D = { 733, 3}, + 0x4E = { 736, 3}, + 0x4F = { 739, 3}, + 0x50 = { 742, 2}, + 0x51 = { 744, 1}, + 0x52 = { 745, 1}, + 0x53 = { 746, 1}, + 0x54 = { 747, 1}, + 0x55 = { 748, 1}, + 0x56 = { 749, 1}, + 0x57 = { 750, 1}, + 0x58 = { 751, 1}, + 0x59 = { 752, 1}, + 0x5A = { 753, 1}, + 0x5B = { 754, 1}, + 0x5C = { 755, 1}, + 0x5D = { 756, 1}, + 0x5E = { 757, 1}, + 0x5F = { 758, 1}, + 0x6E = { 759, 1}, + 0x6F = { 760, 1}, + 0x70 = { 761, 1}, + 0x78 = { 762, 1}, + 0x79 = { 763, 1}, + 0x7E = { 764, 1}, + 0x7F = { 765, 1}, + 0x80 = { 766, 1}, + 0x81 = { 767, 1}, + 0x82 = { 768, 1}, + 0x83 = { 769, 1}, + 0x84 = { 770, 1}, + 0x85 = { 771, 1}, + 0x86 = { 772, 1}, + 0x87 = { 773, 1}, + 0x88 = { 774, 1}, + 0x89 = { 775, 1}, + 0x8A = { 776, 1}, + 0x8B = { 777, 1}, + 0x8C = { 778, 1}, + 0x8D = { 779, 1}, + 0x8E = { 780, 1}, + 0x8F = { 781, 1}, + 0x90 = { 782, 1}, + 0x91 = { 783, 1}, + 0x92 = { 784, 1}, + 0x93 = { 785, 1}, + 0x94 = { 786, 1}, + 0x95 = { 787, 1}, + 0x96 = { 788, 1}, + 0x97 = { 789, 1}, + 0x98 = { 790, 1}, + 0x99 = { 791, 1}, + 0x9A = { 792, 1}, + 0x9B = { 793, 1}, + 0x9C = { 794, 1}, + 0x9D = { 795, 1}, + 0x9E = { 796, 1}, + 0x9F = { 797, 1}, + 0xA0 = { 798, 1}, + 0xA1 = { 799, 1}, + 0xA2 = { 800, 1}, + 0xA3 = { 801, 3}, + 0xA4 = { 804, 3}, + 0xA5 = { 807, 3}, + 0xA8 = { 810, 1}, + 0xA9 = { 811, 1}, + 0xAA = { 812, 1}, + 0xAB = { 813, 3}, + 0xAC = { 816, 3}, + 0xAD = { 819, 3}, + 0xAE = { 822, 14}, + 0xAF = { 836, 3}, + 0xB0 = { 839, 1}, + 0xB1 = { 840, 3}, + 0xB3 = { 843, 3}, + 0xB6 = { 846, 3}, + 0xB7 = { 849, 2}, + 0xB9 = { 851, 1}, + 0xBA = { 852, 12}, + 0xBB = { 864, 3}, + 0xBC = { 867, 3}, + 0xBD = { 870, 3}, + 0xBE = { 873, 3}, + 0xBF = { 876, 2}, + 0xC0 = { 878, 1}, + 0xC1 = { 879, 3}, + 0xC2 = { 882, 1}, + 0xC6 = { 883, 1}, + 0xC7 = { 884, 16}, + 0xC8 = { 900, 2}, + 0xFF = { 902, 1}, }, { // prefix = 66 - 0x10 = {1022, 1}, - 0x11 = {1023, 1}, - 0x12 = {1024, 1}, - 0x13 = {1025, 1}, - 0x14 = {1026, 1}, - 0x15 = {1027, 1}, - 0x16 = {1028, 1}, - 0x17 = {1029, 1}, - 0x28 = {1030, 1}, - 0x29 = {1031, 1}, - 0x2B = {1032, 1}, - 0x2E = {1033, 1}, - 0x2F = {1034, 1}, - 0x50 = {1035, 2}, - 0x51 = {1037, 1}, - 0x54 = {1038, 1}, - 0x55 = {1039, 1}, - 0x56 = {1040, 1}, - 0x57 = {1041, 1}, - 0x58 = {1042, 1}, - 0x59 = {1043, 1}, - 0x5A = {1044, 1}, - 0x5B = {1045, 1}, - 0x5C = {1046, 1}, - 0x5D = {1047, 1}, - 0x5E = {1048, 1}, - 0x5F = {1049, 1}, - 0x60 = {1050, 1}, - 0x61 = {1051, 1}, - 0x62 = {1052, 1}, - 0x63 = {1053, 1}, - 0x64 = {1054, 1}, - 0x65 = {1055, 1}, - 0x66 = {1056, 1}, - 0x67 = {1057, 1}, - 0x68 = {1058, 1}, - 0x69 = {1059, 1}, - 0x6A = {1060, 1}, - 0x6B = {1061, 1}, - 0x6C = {1062, 1}, - 0x6D = {1063, 1}, - 0x6E = {1064, 2}, - 0x6F = {1066, 1}, - 0x70 = {1067, 1}, - 0x71 = {1068, 3}, - 0x72 = {1071, 3}, - 0x73 = {1074, 2}, - 0x74 = {1076, 1}, - 0x75 = {1077, 1}, - 0x76 = {1078, 1}, - 0x7C = {1079, 1}, - 0x7D = {1080, 1}, - 0x7E = {1081, 2}, - 0x7F = {1083, 1}, - 0xAE = {1084, 3}, - 0xC2 = {1087, 1}, - 0xC4 = {1088, 2}, - 0xC5 = {1090, 2}, - 0xC6 = {1092, 1}, - 0xC7 = {1093, 1}, - 0xD0 = {1094, 1}, - 0xD1 = {1095, 1}, - 0xD2 = {1096, 1}, - 0xD3 = {1097, 1}, - 0xD4 = {1098, 1}, - 0xD5 = {1099, 1}, - 0xD6 = {1100, 1}, - 0xD7 = {1101, 2}, - 0xD8 = {1103, 1}, - 0xD9 = {1104, 1}, - 0xDA = {1105, 1}, - 0xDB = {1106, 1}, - 0xDC = {1107, 1}, - 0xDD = {1108, 1}, - 0xDE = {1109, 1}, - 0xDF = {1110, 1}, - 0xE0 = {1111, 1}, - 0xE1 = {1112, 1}, - 0xE2 = {1113, 1}, - 0xE3 = {1114, 1}, - 0xE4 = {1115, 1}, - 0xE5 = {1116, 1}, - 0xE6 = {1117, 1}, - 0xE7 = {1118, 1}, - 0xE8 = {1119, 1}, - 0xE9 = {1120, 1}, - 0xEA = {1121, 1}, - 0xEB = {1122, 1}, - 0xEC = {1123, 1}, - 0xED = {1124, 1}, - 0xEE = {1125, 1}, - 0xEF = {1126, 1}, - 0xF1 = {1127, 1}, - 0xF2 = {1128, 1}, - 0xF3 = {1129, 1}, - 0xF4 = {1130, 1}, - 0xF5 = {1131, 1}, - 0xF6 = {1132, 1}, - 0xF7 = {1133, 1}, - 0xF8 = {1134, 1}, - 0xF9 = {1135, 1}, - 0xFA = {1136, 1}, - 0xFB = {1137, 1}, - 0xFC = {1138, 1}, - 0xFD = {1139, 1}, - 0xFE = {1140, 1}, + 0x10 = { 903, 1}, + 0x11 = { 904, 1}, + 0x12 = { 905, 1}, + 0x13 = { 906, 1}, + 0x14 = { 907, 1}, + 0x15 = { 908, 1}, + 0x16 = { 909, 1}, + 0x17 = { 910, 1}, + 0x28 = { 911, 1}, + 0x29 = { 912, 1}, + 0x2B = { 913, 1}, + 0x2E = { 914, 1}, + 0x2F = { 915, 1}, + 0x50 = { 916, 2}, + 0x51 = { 918, 1}, + 0x54 = { 919, 1}, + 0x55 = { 920, 1}, + 0x56 = { 921, 1}, + 0x57 = { 922, 1}, + 0x58 = { 923, 1}, + 0x59 = { 924, 1}, + 0x5A = { 925, 1}, + 0x5B = { 926, 1}, + 0x5C = { 927, 1}, + 0x5D = { 928, 1}, + 0x5E = { 929, 1}, + 0x5F = { 930, 1}, + 0x60 = { 931, 1}, + 0x61 = { 932, 1}, + 0x62 = { 933, 1}, + 0x63 = { 934, 1}, + 0x64 = { 935, 1}, + 0x65 = { 936, 1}, + 0x66 = { 937, 1}, + 0x67 = { 938, 1}, + 0x68 = { 939, 1}, + 0x69 = { 940, 1}, + 0x6A = { 941, 1}, + 0x6B = { 942, 1}, + 0x6C = { 943, 1}, + 0x6D = { 944, 1}, + 0x6E = { 945, 2}, + 0x6F = { 947, 1}, + 0x70 = { 948, 1}, + 0x71 = { 949, 3}, + 0x72 = { 952, 3}, + 0x73 = { 955, 2}, + 0x74 = { 957, 1}, + 0x75 = { 958, 1}, + 0x76 = { 959, 1}, + 0x7C = { 960, 1}, + 0x7D = { 961, 1}, + 0x7E = { 962, 2}, + 0x7F = { 964, 1}, + 0xAE = { 965, 3}, + 0xC2 = { 968, 1}, + 0xC4 = { 969, 2}, + 0xC5 = { 971, 2}, + 0xC6 = { 973, 1}, + 0xC7 = { 974, 1}, + 0xD0 = { 975, 1}, + 0xD1 = { 976, 1}, + 0xD2 = { 977, 1}, + 0xD3 = { 978, 1}, + 0xD4 = { 979, 1}, + 0xD5 = { 980, 1}, + 0xD6 = { 981, 1}, + 0xD7 = { 982, 2}, + 0xD8 = { 984, 1}, + 0xD9 = { 985, 1}, + 0xDA = { 986, 1}, + 0xDB = { 987, 1}, + 0xDC = { 988, 1}, + 0xDD = { 989, 1}, + 0xDE = { 990, 1}, + 0xDF = { 991, 1}, + 0xE0 = { 992, 1}, + 0xE1 = { 993, 1}, + 0xE2 = { 994, 1}, + 0xE3 = { 995, 1}, + 0xE4 = { 996, 1}, + 0xE5 = { 997, 1}, + 0xE6 = { 998, 1}, + 0xE7 = { 999, 1}, + 0xE8 = {1000, 1}, + 0xE9 = {1001, 1}, + 0xEA = {1002, 1}, + 0xEB = {1003, 1}, + 0xEC = {1004, 1}, + 0xED = {1005, 1}, + 0xEE = {1006, 1}, + 0xEF = {1007, 1}, + 0xF1 = {1008, 1}, + 0xF2 = {1009, 1}, + 0xF3 = {1010, 1}, + 0xF4 = {1011, 1}, + 0xF5 = {1012, 1}, + 0xF6 = {1013, 1}, + 0xF7 = {1014, 1}, + 0xF8 = {1015, 1}, + 0xF9 = {1016, 1}, + 0xFA = {1017, 1}, + 0xFB = {1018, 1}, + 0xFC = {1019, 1}, + 0xFD = {1020, 1}, + 0xFE = {1021, 1}, }, { // prefix = F3 - 0x01 = {1141, 6}, - 0x09 = {1147, 1}, - 0x10 = {1148, 1}, - 0x11 = {1149, 1}, - 0x12 = {1150, 1}, - 0x16 = {1151, 1}, - 0x1E = {1152, 4}, - 0x2A = {1156, 2}, - 0x2C = {1158, 2}, - 0x2D = {1160, 2}, - 0x51 = {1162, 1}, - 0x52 = {1163, 1}, - 0x53 = {1164, 1}, - 0x58 = {1165, 1}, - 0x59 = {1166, 1}, - 0x5A = {1167, 1}, - 0x5B = {1168, 1}, - 0x5C = {1169, 1}, - 0x5D = {1170, 1}, - 0x5E = {1171, 1}, - 0x5F = {1172, 1}, - 0x6F = {1173, 1}, - 0x70 = {1174, 1}, - 0x7E = {1175, 1}, - 0x7F = {1176, 1}, - 0xAE = {1177, 14}, - 0xB8 = {1191, 3}, - 0xBC = {1194, 3}, - 0xBD = {1197, 3}, - 0xC2 = {1200, 1}, - 0xC7 = {1201, 2}, - 0xE6 = {1203, 1}, + 0x01 = {1022, 6}, + 0x09 = {1028, 1}, + 0x10 = {1029, 1}, + 0x11 = {1030, 1}, + 0x12 = {1031, 1}, + 0x16 = {1032, 1}, + 0x1E = {1033, 4}, + 0x2A = {1037, 2}, + 0x2C = {1039, 2}, + 0x2D = {1041, 2}, + 0x51 = {1043, 1}, + 0x52 = {1044, 1}, + 0x53 = {1045, 1}, + 0x58 = {1046, 1}, + 0x59 = {1047, 1}, + 0x5A = {1048, 1}, + 0x5B = {1049, 1}, + 0x5C = {1050, 1}, + 0x5D = {1051, 1}, + 0x5E = {1052, 1}, + 0x5F = {1053, 1}, + 0x6F = {1054, 1}, + 0x70 = {1055, 1}, + 0x7E = {1056, 1}, + 0x7F = {1057, 1}, + 0xAE = {1058, 14}, + 0xB8 = {1072, 3}, + 0xBC = {1075, 3}, + 0xBD = {1078, 3}, + 0xC2 = {1081, 1}, + 0xC7 = {1082, 2}, + 0xE6 = {1084, 1}, }, { // prefix = F2 - 0x01 = {1204, 2}, - 0x10 = {1206, 1}, - 0x11 = {1207, 1}, - 0x12 = {1208, 1}, - 0x2A = {1209, 2}, - 0x2C = {1211, 2}, - 0x2D = {1213, 2}, - 0x51 = {1215, 1}, - 0x58 = {1216, 1}, - 0x59 = {1217, 1}, - 0x5A = {1218, 1}, - 0x5C = {1219, 1}, - 0x5D = {1220, 1}, - 0x5E = {1221, 1}, - 0x5F = {1222, 1}, - 0x70 = {1223, 1}, - 0x7C = {1224, 1}, - 0x7D = {1225, 1}, - 0xAE = {1226, 1}, - 0xC2 = {1227, 1}, - 0xD0 = {1228, 1}, - 0xE6 = {1229, 1}, - 0xF0 = {1230, 1}, + 0x01 = {1085, 2}, + 0x10 = {1087, 1}, + 0x11 = {1088, 1}, + 0x12 = {1089, 1}, + 0x2A = {1090, 2}, + 0x2C = {1092, 2}, + 0x2D = {1094, 2}, + 0x51 = {1096, 1}, + 0x58 = {1097, 1}, + 0x59 = {1098, 1}, + 0x5A = {1099, 1}, + 0x5C = {1100, 1}, + 0x5D = {1101, 1}, + 0x5E = {1102, 1}, + 0x5F = {1103, 1}, + 0x70 = {1104, 1}, + 0x7C = {1105, 1}, + 0x7D = {1106, 1}, + 0xAE = {1107, 1}, + 0xC2 = {1108, 1}, + 0xD0 = {1109, 1}, + 0xE6 = {1110, 1}, + 0xF0 = {1111, 1}, }, } @(rodata) DECODE_INDEX_ESC_0F38 := [4][256]lib.Decode_Index{ { // prefix = none - 0xC8 = {1231, 1}, - 0xC9 = {1232, 1}, - 0xCA = {1233, 1}, - 0xCB = {1234, 1}, - 0xCC = {1235, 1}, - 0xCD = {1236, 1}, - 0xF0 = {1237, 3}, - 0xF1 = {1240, 3}, - 0xF6 = {1243, 2}, - 0xF9 = {1245, 2}, - 0xFC = {1247, 2}, + 0xC8 = {1112, 1}, + 0xC9 = {1113, 1}, + 0xCA = {1114, 1}, + 0xCB = {1115, 1}, + 0xCC = {1116, 1}, + 0xCD = {1117, 1}, + 0xF0 = {1118, 3}, + 0xF1 = {1121, 3}, + 0xF6 = {1124, 2}, + 0xF9 = {1126, 2}, + 0xFC = {1128, 2}, }, { // prefix = 66 - 0x00 = {1249, 1}, - 0x01 = {1250, 1}, - 0x02 = {1251, 1}, - 0x03 = {1252, 1}, - 0x04 = {1253, 1}, - 0x05 = {1254, 1}, - 0x06 = {1255, 1}, - 0x07 = {1256, 1}, - 0x08 = {1257, 1}, - 0x09 = {1258, 1}, - 0x0A = {1259, 1}, - 0x0B = {1260, 1}, - 0x10 = {1261, 1}, - 0x14 = {1262, 1}, - 0x15 = {1263, 1}, - 0x17 = {1264, 1}, - 0x1C = {1265, 1}, - 0x1D = {1266, 1}, - 0x1E = {1267, 1}, - 0x20 = {1268, 1}, - 0x21 = {1269, 1}, - 0x22 = {1270, 1}, - 0x23 = {1271, 1}, - 0x24 = {1272, 1}, - 0x25 = {1273, 1}, - 0x28 = {1274, 1}, - 0x29 = {1275, 1}, - 0x2A = {1276, 1}, - 0x2B = {1277, 1}, - 0x30 = {1278, 1}, - 0x31 = {1279, 1}, - 0x32 = {1280, 1}, - 0x33 = {1281, 1}, - 0x34 = {1282, 1}, - 0x35 = {1283, 1}, - 0x37 = {1284, 1}, - 0x38 = {1285, 1}, - 0x39 = {1286, 1}, - 0x3A = {1287, 1}, - 0x3B = {1288, 1}, - 0x3C = {1289, 1}, - 0x3D = {1290, 1}, - 0x3E = {1291, 1}, - 0x3F = {1292, 1}, - 0x40 = {1293, 1}, - 0x41 = {1294, 1}, - 0x80 = {1295, 1}, - 0x81 = {1296, 1}, - 0x82 = {1297, 2}, - 0xDB = {1299, 1}, - 0xDC = {1300, 1}, - 0xDD = {1301, 1}, - 0xDE = {1302, 1}, - 0xDF = {1303, 1}, - 0xF5 = {1304, 2}, - 0xF6 = {1306, 2}, - 0xF8 = {1308, 1}, - 0xFC = {1309, 2}, + 0x00 = {1130, 1}, + 0x01 = {1131, 1}, + 0x02 = {1132, 1}, + 0x03 = {1133, 1}, + 0x04 = {1134, 1}, + 0x05 = {1135, 1}, + 0x06 = {1136, 1}, + 0x07 = {1137, 1}, + 0x08 = {1138, 1}, + 0x09 = {1139, 1}, + 0x0A = {1140, 1}, + 0x0B = {1141, 1}, + 0x10 = {1142, 1}, + 0x14 = {1143, 1}, + 0x15 = {1144, 1}, + 0x17 = {1145, 1}, + 0x1C = {1146, 1}, + 0x1D = {1147, 1}, + 0x1E = {1148, 1}, + 0x20 = {1149, 1}, + 0x21 = {1150, 1}, + 0x22 = {1151, 1}, + 0x23 = {1152, 1}, + 0x24 = {1153, 1}, + 0x25 = {1154, 1}, + 0x28 = {1155, 1}, + 0x29 = {1156, 1}, + 0x2A = {1157, 1}, + 0x2B = {1158, 1}, + 0x30 = {1159, 1}, + 0x31 = {1160, 1}, + 0x32 = {1161, 1}, + 0x33 = {1162, 1}, + 0x34 = {1163, 1}, + 0x35 = {1164, 1}, + 0x37 = {1165, 1}, + 0x38 = {1166, 1}, + 0x39 = {1167, 1}, + 0x3A = {1168, 1}, + 0x3B = {1169, 1}, + 0x3C = {1170, 1}, + 0x3D = {1171, 1}, + 0x3E = {1172, 1}, + 0x3F = {1173, 1}, + 0x40 = {1174, 1}, + 0x41 = {1175, 1}, + 0x80 = {1176, 1}, + 0x81 = {1177, 1}, + 0x82 = {1178, 2}, + 0xDB = {1180, 1}, + 0xDC = {1181, 1}, + 0xDD = {1182, 1}, + 0xDE = {1183, 1}, + 0xDF = {1184, 1}, + 0xF5 = {1185, 2}, + 0xF6 = {1187, 2}, + 0xF8 = {1189, 1}, + 0xFC = {1190, 2}, }, { // prefix = F3 - 0xF6 = {1311, 2}, - 0xF8 = {1313, 1}, - 0xFC = {1314, 2}, + 0xF6 = {1192, 2}, + 0xF8 = {1194, 1}, + 0xFC = {1195, 2}, }, { // prefix = F2 - 0xF0 = {1316, 2}, - 0xF1 = {1318, 3}, - 0xF8 = {1321, 1}, - 0xFC = {1322, 2}, + 0xF0 = {1197, 2}, + 0xF1 = {1199, 3}, + 0xF8 = {1202, 1}, + 0xFC = {1203, 2}, }, } @(rodata) DECODE_INDEX_ESC_0F3A := [4][256]lib.Decode_Index{ { // prefix = none - 0xCC = {1324, 1}, + 0xCC = {1205, 1}, }, { // prefix = 66 - 0x08 = {1325, 1}, - 0x09 = {1326, 1}, - 0x0A = {1327, 1}, - 0x0B = {1328, 1}, - 0x0C = {1329, 1}, - 0x0D = {1330, 1}, - 0x0E = {1331, 1}, - 0x0F = {1332, 1}, - 0x14 = {1333, 1}, - 0x16 = {1334, 2}, - 0x17 = {1336, 1}, - 0x20 = {1337, 1}, - 0x21 = {1338, 1}, - 0x22 = {1339, 2}, - 0x40 = {1341, 1}, - 0x41 = {1342, 1}, - 0x42 = {1343, 1}, - 0x44 = {1344, 1}, - 0x60 = {1345, 1}, - 0x61 = {1346, 1}, - 0x62 = {1347, 1}, - 0x63 = {1348, 1}, - 0xDF = {1349, 1}, + 0x08 = {1206, 1}, + 0x09 = {1207, 1}, + 0x0A = {1208, 1}, + 0x0B = {1209, 1}, + 0x0C = {1210, 1}, + 0x0D = {1211, 1}, + 0x0E = {1212, 1}, + 0x0F = {1213, 1}, + 0x14 = {1214, 1}, + 0x16 = {1215, 2}, + 0x17 = {1217, 1}, + 0x20 = {1218, 1}, + 0x21 = {1219, 1}, + 0x22 = {1220, 2}, + 0x40 = {1222, 1}, + 0x41 = {1223, 1}, + 0x42 = {1224, 1}, + 0x44 = {1225, 1}, + 0x60 = {1226, 1}, + 0x61 = {1227, 1}, + 0x62 = {1228, 1}, + 0x63 = {1229, 1}, + 0xDF = {1230, 1}, }, { // prefix = F3 }, diff --git a/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin b/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin index 3eb58e95a..a459d52cb 100644 --- a/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin @@ -585,11 +585,11 @@ ENCODE_FORMS := [2478]lib.Encoding{ {.JS, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0x78, 0, {explicit_count=1}}, {.JS, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, 0x88, 0, {esc=._0F, explicit_count=1}}, // .JCXZ - {.JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {explicit_count=1}}, + {.JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A16, explicit_count=1}}, // .JECXZ - {.JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {explicit_count=1}}, + {.JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A32, explicit_count=1}}, // .JRCXZ - {.JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {force_rex_w=true, explicit_count=1}}, + {.JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A64, explicit_count=1}}, // .LOOP {.LOOP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE2, 0, {explicit_count=1}}, // .LOOPE diff --git a/core/rexcode/isa/x86/tablegen/instruction_table.odin b/core/rexcode/isa/x86/tablegen/instruction_table.odin index 11e897138..e586a3f65 100644 --- a/core/rexcode/isa/x86/tablegen/instruction_table.odin +++ b/core/rexcode/isa/x86/tablegen/instruction_table.odin @@ -733,14 +733,20 @@ INSTRUCTION_TABLE := [Mnemonic][]Form{ {{.JS, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0x78, 0, {}}, {flags_rd={.SF}, side_effects={.CONTROL}}}, {{.JS, {.REL32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, 0x88, 0, {esc=._0F}}, {flags_rd={.SF}, side_effects={.CONTROL}}}, }, + /* 0xE3 is ONE opcode whose mnemonic is chosen by ADDRESS size -- which + counter register it tests -- not by operand size. So the three are told + apart by `addr_size` (67h against the mode default), never by REX.W, which + does not affect address size at all: JRCXZ is a bare `E3 cb` in long mode + and JECXZ is `67 E3 cb`; in protected mode JECXZ is bare and JCXZ takes + the prefix, while JCXZ is unreachable in long mode and JRCXZ outside it. */ .JCXZ = { - {{.JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, + {{.JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A16}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, }, .JECXZ = { - {{.JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, + {{.JECXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A32}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, }, .JRCXZ = { - {{.JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {force_rex_w=true}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, + {{.JRCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE3, 0, {addr_size=.A64}}, {implicit_rd={.RCX}, side_effects={.CONTROL}}}, }, .LOOP = { {{.LOOP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, 0xE2, 0, {}}, {implicit_wr={.RCX}, implicit_rd={.RCX}, side_effects={.CONTROL}}}, diff --git a/core/rexcode/isa/x86/tables/x86.encode_forms.bin b/core/rexcode/isa/x86/tables/x86.encode_forms.bin index a71e55be91b5c96de8a94254ec4bb1d13e17b881..3e03ddfdb190c282e9584d3c5166908d354ce89b 100644 GIT binary patch literal 39648 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 literal 39648 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 E0L>_?t^fc4 diff --git a/core/rexcode/isa/x86/tables/x86.encode_recipes.bin b/core/rexcode/isa/x86/tables/x86.encode_recipes.bin index 4b55c24fce345d809775db458aece60252914dda..fbbba14d1e3756f13d95e0571fe427232ae2319c 100644 GIT binary patch delta 16 YcmZ4Sf^o$Q#trS_j0~GQ#23T>06&KYzyJUM delta 16 YcmZ4Sf^o$Q#trS_j2xRg#23T>06(_|$N&HU diff --git a/core/rexcode/isa/x86/tables/x86.evex.bin b/core/rexcode/isa/x86/tables/x86.evex.bin index ff07490c14f1094f95867aab251346af49493078..a6d378ecbc451e8a957471d393a1af6e71c9a240 100644 GIT binary patch literal 8420 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 literal 8420 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 diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f.bin b/core/rexcode/isa/x86/tables/x86.idx_0f.bin index ddcbc62e10ea8a2e0aa95ee8c4dd2139d75cca9f..8448503028e3869bff3594ba01b1bceb7b3f16a9 100644 GIT binary patch literal 4096 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 BDp>#k diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin b/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin index 8805f356aa21d044142baa8bb0870ca2982edade..f3d489d59b3cb389e16c836954f3dd0d9ea7ee86 100644 GIT binary patch literal 4096 zcmZP=1*0J_8UjRzz*ZJUqSX!uh1*yd8Md=9GVEYsWZ22V$gqorkzqFrBf}mRMuxpu z!eSp(Y(EPV!$Bw;UpO3MVPrVW!pLxhg$bWBn#mnwVPrVY!pLv}>eiD`nr0TF8GMR` zk>NB8Bf}XMMuxL=wj0eUqg*p^kx(p`L+}p@D&sp^<@+ zp^1T!p_ze^p@o5wp_PGyp_f5|0R)yZNHFYWU}V_Gz|3%vfsx@512e->21bTs49pBC z85kK(F)%ZnWnf}B&%n%ZiGhjX3Ih|vH3k-tRtAR2o=oD2w-}fi?lLfgMIJCPGCX8p zW_ZHD%LdcBg0DuMut}m%nWZC7#ZF%Ff)8)U}X5jz|8QKfsx@G12e-<21bTo z49pCF85kMs126-k?1`{Sm22&p^<@!p_ze+p_PG=p^br&p`C$=p_74$p__q; zp_hS)p`U??VIl()!(;{yhS>}f3?Q(XL4x5l10%y324;ry42%pH7?>F@GcYn-VPIys z&cMiUgMpdhHUksGT?S@`2MkOMj~JL3o-nY0v@$SE_GA)Ie8IrX@S1@cEb@+liQxkS zGs9;FW`=JJj11oy7#V&rFfsgMU}IolWMW`qWMkl9WMbfAWM<%HWMbfFWM&XzWMmL# zWM&X!WMYtDWM+_NWMYtIWM)ucWMWWaWM)vEe2__=S&flpG9!y@y%r+}gAt&F!9zi7&0+37%?$2 z7&9?4m@qLjm@_dlSTHd$STQj&STiv(*fKFP*fBvIX3xaP;K0Pl;K;9 WOpF4X8CmSvm>C#qH#>6eX9WNWbUnxb diff --git a/core/rexcode/isa/x86/tables/x86.legacy.bin b/core/rexcode/isa/x86/tables/x86.legacy.bin index d0b0f1c6b404758bc1499a6d9e86aef8b06e087f..39a3c27931a0a46943489065105cb22d9512b57f 100644 GIT binary patch literal 24620 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 diff --git a/core/rexcode/isa/x86/tables/x86.vex.bin b/core/rexcode/isa/x86/tables/x86.vex.bin index 9508af84cb4e0d4f70f664e9ac330c770ca9f180..b5f0346d4ec6d50769ff740018eec45c4b04e58e 100644 GIT binary patch literal 14140 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 xi$T(J@_zNHgt7#Nvg>IDBYFsd?X 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 bool { - if a == b { return true } - aliases := [][2]x86.Mnemonic{ - // MOV/MOVABS - {.MOV, .MOVABS}, - // CMOVcc aliases - {.CMOVE, .CMOVZ}, {.CMOVNE, .CMOVNZ}, - {.CMOVG, .CMOVNLE}, {.CMOVGE, .CMOVNL}, - {.CMOVL, .CMOVNGE}, {.CMOVLE, .CMOVNG}, - {.CMOVA, .CMOVNBE}, {.CMOVAE, .CMOVNB}, {.CMOVAE, .CMOVNC}, - {.CMOVB, .CMOVNAE}, {.CMOVB, .CMOVC}, {.CMOVBE, .CMOVNA}, - // SETcc aliases - {.SETE, .SETZ}, {.SETNE, .SETNZ}, - {.SETG, .SETNLE}, {.SETGE, .SETNL}, - {.SETL, .SETNGE}, {.SETLE, .SETNG}, - {.SETA, .SETNBE}, {.SETAE, .SETNB}, {.SETAE, .SETNC}, - {.SETB, .SETNAE}, {.SETB, .SETC}, {.SETBE, .SETNA}, - // Jcc aliases - {.JE, .JZ}, {.JNE, .JNZ}, - {.JB, .JC}, {.JAE, .JNC}, - {.JG, .JNLE}, {.JGE, .JNL}, - {.JL, .JNGE}, {.JLE, .JNG}, - {.JA, .JNBE}, {.JAE, .JNB}, - {.JB, .JNAE}, {.JBE, .JNA}, + return a == b || x86.canonical_mnemonic(a) == x86.canonical_mnemonic(b) +} + +/* + No encoding may be spelled by two mnemonics that both survive into the decode + tables -- because the decoder would then have to choose between them with + nothing to choose on, which is the defect x86.MNEMONIC_ALIASES exists to + remove. Two entries are indistinguishable exactly when they agree on every + field the decoder can read, so the property is computable from the tables + themselves, and this recomputes it. + + It is what makes the declaration maintainable: an instruction added with a + mnemonic that aliases another's encoding fails here BY NAME, with the row to + write, instead of silently decoding as whichever spelling the sort happened + to put first. +*/ +run_alias_table_test :: proc() { + Group_Key :: struct { + esc: x86.Escape, + prefix: u8, + opcode: u8, + ext: u8, + ops: [4]x86.Operand_Type, + enc: [4]x86.Operand_Encoding, + flags: x86.Encoding_Flags, } - for alias in aliases { - if (a == alias[0] && b == alias[1]) || (a == alias[1] && b == alias[0]) { return true } + groups := make(map[Group_Key][dynamic]x86.Mnemonic) + defer { + for _, list in groups { delete(list) } + delete(groups) + } + for e in x86.LEGACY_DECODE_ENTRIES { + key := Group_Key{e.esc, e.prefix, e.opcode, e.ext, e.ops, e.enc, e.flags} + list, present := &groups[key] + if !present { + groups[key] = make([dynamic]x86.Mnemonic) + list = &groups[key] + } + known := false + for m in list { + if m == e.mnemonic { + known = true + break + } + } + if !known { append(list, e.mnemonic) } + } + + ambiguous := 0 + for key, list in groups { + if len(list) < 2 { continue } + ambiguous += 1 + if ambiguous <= 10 { + fmt.printf(" %sFAIL%s esc=%v prefix=%d opcode=%02X ext=%02X is spelled by", + RED, RESET, key.esc, key.prefix, key.opcode, key.ext) + for m in list { fmt.printf(" %v", m) } + fmt.printf(",\n and the decoder has nothing to choose between them. Declare one in\n") + fmt.printf(" x86.MNEMONIC_ALIASES (isa/x86/aliases.odin), then regenerate:\n") + fmt.printf(" odin run core/rexcode/isa/x86/tablegen && odin run core/rexcode/isa/x86/tablegen/generated\n") + } + } + if ambiguous > 10 { + fmt.printf(" ... and %d further ambiguous encoding(s).\n", ambiguous - 10) + } + if ambiguous > 0 { + g_stats.failed += 1 + return + } + g_stats.passed += 1 + g_stats.cases_validated += 1 +} + +/* + 0xE3 is one opcode whose MNEMONIC is chosen by address size -- which counter + register it tests -- and address size is the 67h axis, not REX.W. Modelling + JRCXZ as `force_rex_w` made its encoding `48 E3 cb` (llvm-mc emits a bare + `E3 cb`, and REX.W does not affect address size at all), gave JECXZ the bare + encoding that is really JRCXZ in long mode, and left the decoder with three + indistinguishable entries to guess between. + + Both directions and both modes are asserted here, refusals included: JCXZ is + unreachable in long mode (67h selects 32-bit there, never 16-bit) and JRCXZ + outside it. Every expectation below was measured against llvm-mc. +*/ +run_addr_size_tests :: proc() { + Decode_Case :: struct { + bytes: []u8, + mode: x86.Mode, + want: x86.Mnemonic, + note: string, + } + decodes := []Decode_Case{ + {{0xE3, 0x00}, ._64, .JRCXZ, "long mode default address size is 64-bit"}, + {{0x67, 0xE3, 0x00}, ._64, .JECXZ, "67h drops long mode to 32-bit"}, + {{0x48, 0xE3, 0x00}, ._64, .JRCXZ, "REX.W is ignored for address size"}, + {{0xE3, 0x00}, ._32, .JECXZ, "protected mode default is 32-bit"}, + {{0x67, 0xE3, 0x00}, ._32, .JCXZ, "67h drops protected mode to 16-bit"}, + } + for c in decodes { + insts := make([dynamic]x86.Instruction) + info := make([dynamic]x86.Instruction_Info) + labels := make([dynamic]x86.Label_Definition) + errors := make([dynamic]x86.Error) + defer { + delete(insts); delete(info); delete(labels); delete(errors) + } + _, ok := x86.decode(c.bytes, nil, &insts, &info, &labels, &errors, c.mode) + if !ok || len(insts) == 0 { + g_stats.failed += 1 + fmt.printf(" %sFAIL%s %v decode failed in %v (%s)\n", RED, RESET, c.bytes, c.mode, c.note) + continue + } + if insts[0].mnemonic != c.want { + g_stats.failed += 1 + fmt.printf(" %sFAIL%s %v in %v decoded %v, expected %v -- %s\n", + RED, RESET, c.bytes, c.mode, insts[0].mnemonic, c.want, c.note) + continue + } + g_stats.passed += 1 + g_stats.cases_validated += 1 + } + + Encode_Case :: struct { + mnemonic: x86.Mnemonic, + mode: x86.Mode, + want: []u8, // empty = must be refused; this mode cannot express it + } + encodes := []Encode_Case{ + {.JRCXZ, ._64, {0xE3, 0x00}}, + {.JECXZ, ._64, {0x67, 0xE3, 0x00}}, + {.JCXZ, ._64, {}}, + {.JECXZ, ._32, {0xE3, 0x00}}, + {.JCXZ, ._32, {0x67, 0xE3, 0x00}}, + {.JRCXZ, ._32, {}}, + } + for c in encodes { + insts := []x86.Instruction{x86.inst_rel_offset(c.mnemonic, 0, 1)} + code := make([]u8, 32) + relocs := make([dynamic]x86.Relocation) + errors := make([dynamic]x86.Error) + defer { + delete(code); delete(relocs); delete(errors) + } + count, ok := x86.encode(insts, nil, code, &relocs, &errors, true, 0, c.mode) + if len(c.want) == 0 { + if ok && count > 0 { + g_stats.failed += 1 + fmt.printf(" %sFAIL%s %v encoded to %02X in %v, but that mode cannot express its address size\n", + RED, RESET, c.mnemonic, code[:count], c.mode) + continue + } + g_stats.passed += 1 + g_stats.cases_validated += 1 + continue + } + if !ok || int(count) != len(c.want) { + g_stats.failed += 1 + fmt.printf(" %sFAIL%s %v in %v encoded %d byte(s), expected %d\n", + RED, RESET, c.mnemonic, c.mode, count, len(c.want)) + continue + } + same := true + for want, i in c.want { + if code[i] != want { same = false; break } + } + if !same { + g_stats.failed += 1 + fmt.printf(" %sFAIL%s %v in %v encoded % 02X, expected % 02X\n", + RED, RESET, c.mnemonic, c.mode, code[:count], c.want) + continue + } + g_stats.passed += 1 + g_stats.cases_validated += 1 } - return false } // ============================================================================= @@ -3630,6 +3790,12 @@ main :: proc() { log_header("TYPED BUILDER CONSISTENCY") run_typed_builder_tests() + log_header("MNEMONIC ALIAS TABLE") + run_alias_table_test() + + log_header("ADDRESS-SIZE SELECTED MNEMONICS") + run_addr_size_tests() + log_header("I386 (32-BIT MODE) TESTS") run_i386_tests()