diff --git a/core/rexcode/isa/x86/mnemonics.odin b/core/rexcode/isa/x86/mnemonics.odin index e5e6f31fc..c6b429ec6 100644 --- a/core/rexcode/isa/x86/mnemonics.odin +++ b/core/rexcode/isa/x86/mnemonics.odin @@ -1326,6 +1326,8 @@ Mnemonic :: enum u16 { WBNOINVD, SERIALIZE, PREFETCH, + IN, + OUT, // ------------------------------------------------------------------------- // SECTION: 4.29 WAITPKG Instructions diff --git a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin index 7b2a7b461..17569f005 100644 --- a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin @@ -144,79 +144,79 @@ SIB_TABLE := [256]lib.SIB_Info{ } @(rodata) -LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ +LEGACY_DECODE_ENTRIES := [1338]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, {.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, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, 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, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {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, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .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, 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, {.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, 0x09, 0xFF, .OR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {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, {.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, 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, 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}}, {.NONE, 0, 0x0D, 0xFF, .OR, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x0D, 0xFF, .OR, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x10, 0xFF, .ADC, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x11, 0xFF, .ADC, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x11, 0xFF, .ADC, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x11, 0xFF, .ADC, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x11, 0xFF, .ADC, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x12, 0xFF, .ADC, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x13, 0xFF, .ADC, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x13, 0xFF, .ADC, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x13, 0xFF, .ADC, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x13, 0xFF, .ADC, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x14, 0xFF, .ADC, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.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, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {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, {.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, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {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, {.R32, .RM32, .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, {.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, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x1D, 0xFF, .SBB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {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, {.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, {.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, 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, 0x24, 0xFF, .AND, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {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, 0x25, 0xFF, .AND, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {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, {.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, {.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, {.R32, .RM32, .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, 0x2C, 0xFF, .SUB, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .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, 0x2D, 0xFF, .SUB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .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, {.RM16, .R16, .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}}, @@ -234,23 +234,23 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.NONE, 0, 0x39, 0xFF, .CMP, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {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, 0x3A, 0xFF, .CMP, {.R8, .RM8, .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, {.R32, .RM32, .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, 0x3C, 0xFF, .CMP, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .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, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .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, 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, 0x58, 0xFF, .POP, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {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, 0x58, 0xFF, .POP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, {.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, 0x62, 0xFF, .BOUND, {.R32, .M32, .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}}, @@ -260,38 +260,38 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.NONE, 0, 0x69, 0xFF, .IMUL, {.R32, .RM32, .IMM32, .NONE}, {.REG, .MR, .ID, .NONE}, {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, {.R16, .RM16, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {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, 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, .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, 0x72, 0xFF, .JNAE, {.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, 0x72, 0xFF, .JC, {.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, .JAE, {.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, 0x73, 0xFF, .JAE, {.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, .JNE, {.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, 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, .JA, {.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, .JP, {.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, 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, .JL, {.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, .JGE, {.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, 0x7E, 0xFF, .JNG, {.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, 0x7F, 0xFF, .JNLE, {.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, .JG, {.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, 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}}, {.NONE, 0, 0x80, 0x02, .ADC, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -303,8 +303,8 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, {.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, {.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, {.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}}, @@ -313,8 +313,8 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, 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, 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, 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}}, @@ -322,23 +322,23 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, 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, {.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, {.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, 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, {.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, {.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, 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, 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, {.RM16, .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, {.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, {.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, {.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}}, @@ -349,9 +349,9 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, {.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, 0x85, 0xFF, .TEST, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, 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}}, @@ -373,23 +373,23 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, 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, 0x90, 0xFF, .NOP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.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, .CBW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0x98, 0xFF, .CDQE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0x98, 0xFF, .CWDE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0x98, 0xFF, .CBW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0x99, 0xFF, .CWD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=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, .FWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9B, 0xFF, .WAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0x9C, 0xFF, .PUSHFD, {.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, .PUSHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, + {.NONE, 0, 0x9C, 0xFF, .PUSHFD, {.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, 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, 0x9D, 0xFF, .POPFD, {.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, 0x9E, 0xFF, .SAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9F, 0xFF, .LAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, @@ -409,35 +409,35 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, 0xA4, 0xFF, .MOVSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xA5, 0xFF, .MOVSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA4, 0xFF, .MOVS, {.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, 0xA6, 0xFF, .CMPS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA6, 0xFF, .CMPSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xA7, 0xFF, .CMPSD, {.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, .CMPSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, + {.NONE, 0, 0xA7, 0xFF, .CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {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, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .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, .STOSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAA, 0xFF, .STOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAB, 0xFF, .STOSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.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, .STOSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, + {.NONE, 0, 0xAB, 0xFF, .STOSD, {.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, 0xAC, 0xFF, .LODSB, {.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, .LODSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=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, .SCASB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAE, 0xFF, .SCAS, {.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, .SCASQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xAF, 0xFF, .SCASW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, - {.NONE, 0, 0xAF, 0xFF, .SCASD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xB0, 0xFF, .MOV, {.R8, .IMM8, .NONE, .NONE}, {.OP_R, .IB, .NONE, .NONE}, {op_count=2}}, {.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}}, @@ -450,8 +450,8 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, 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, {.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, 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, 0x00, .ROL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {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, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -459,9 +459,9 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, {.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, {.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, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {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, 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, {.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, 0x04, .SHL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -482,9 +482,9 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, .IRETD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xCF, 0xFF, .IRETQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.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, 0xCF, 0xFF, .IRETD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.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}}, @@ -567,8 +567,8 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.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, .FSTENV, {.M, .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, 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, 0x07, .FSTCW, {.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}}, {.NONE, 0, 0xD9, 0xC9, .FXCH, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, @@ -599,8 +599,8 @@ LEGACY_DECODE_ENTRIES := [1326]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, .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, 0xD9, 0xFF, .FCOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.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}}, @@ -700,9 +700,21 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.NONE, 0, 0xE3, 0xFF, .JCXZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xE3, 0xFF, .JECXZ, {.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, 0xE4, 0xFF, .IN, {.AL_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, 0xE5, 0xFF, .IN, {.EAX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {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, 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}}, + {.NONE, 0, 0xEC, 0xFF, .IN, {.AL_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xED, 0xFF, .IN, {.EAX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xED, 0xFF, .IN, {.AX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {opsize_16=true, op_count=2}}, + {.NONE, 0, 0xEE, 0xFF, .OUT, {.DX_IMPL, .AL_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xEF, 0xFF, .OUT, {.DX_IMPL, .EAX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xEF, 0xFF, .OUT, {.DX_IMPL, .AX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, {opsize_16=true, op_count=2}}, {.NONE, 0, 0xF0, 0xFF, .LOCK, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xF4, 0xFF, .HLT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xF5, 0xFF, .CMC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, @@ -763,20 +775,20 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._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, {.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, {.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, {.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, 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}}, {._0F, 0, 0x00, 0x05, .VERW, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._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, 0x00, .SGDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._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_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, 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, 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, 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_32, .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, 0x04, .SMSW, {.RM16, .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}}, {._0F, 0, 0x01, 0x04, .SMSW, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -817,12 +829,12 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._0F, 0, 0x01, 0xFD, .RDPRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._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, {.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, 0x02, 0xFF, .LAR, {.R16, .RM16, .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}}, + {._0F, 0, 0x03, 0xFF, .LSL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x05, 0xFF, .SYSCALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x06, 0xFF, .CLTS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x07, 0xFF, .SYSRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, @@ -838,17 +850,17 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._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, {.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, {.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, 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}}, @@ -1062,16 +1074,16 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._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, {.RM16, .R16, .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, .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, 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}}, {._0F, 0, 0xAE, 0x01, .FXRSTOR64, {.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, 0x04, .XSAVE, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._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, 0x04, .XSAVE, {.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, 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, 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, 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, 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}}, @@ -1119,29 +1131,29 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._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, {.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, {.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, .XRSTORS, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, 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, .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, 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, 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, .XSAVES, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, 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, 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, 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, {.R16, .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, 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, 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, .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, 0xC8, 0xFF, .BSWAP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=1}}, + {._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, 0xC8, 0xFF, .BSWAP, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, + {._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, 0xFF, 0xFF, .UD0, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 1, 0x10, 0xFF, .MOVUPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x11, 0xFF, .MOVUPD, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, @@ -1298,14 +1310,14 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._0F, 2, 0x70, 0xFF, .PSHUFHW, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=2, op_count=3, needs_modrm=true}}, {._0F, 2, 0x7E, 0xFF, .MOVQ, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x7F, 0xFF, .MOVDQU, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._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, 0x00, .RDFSBASE, {.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, 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, {.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, {.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, 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, .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}}, @@ -1358,18 +1370,18 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._0F38, 0, 0xCB, 0xFF, .SHA256RNDS2, {.XMM, .XMM_M128, .XMM0_IMPL, .NONE}, {.REG, .MR, .IMPL, .NONE}, {esc=._0F38, op_count=3, needs_modrm=true}}, {._0F38, 0, 0xCC, 0xFF, .SHA256MSG1, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xCD, 0xFF, .SHA256MSG2, {.XMM, .XMM_M128, .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, 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, {.R32, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, 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, 0xF1, 0xFF, .MOVBE, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, 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, {.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, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, 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, {.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}}, - {._0F38, 0, 0xFC, 0xFF, .AADD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xFC, 0xFF, .AADD, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xFC, 0xFF, .AADD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x00, 0xFF, .PSHUFB, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x01, 0xFF, .PHADDW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x02, 0xFF, .PHADDD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, @@ -1435,8 +1447,8 @@ LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {._0F38, 2, 0xF6, 0xFF, .ADOX, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 2, 0xF6, 0xFF, .ADOX, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, {._0F38, 2, 0xF8, 0xFF, .ENQCMDS, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, - {._0F38, 2, 0xFC, 0xFF, .AXOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, {._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, 2, 0xFC, 0xFF, .AXOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=2, 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, 0xF0, 0xFF, .CRC32, {.R32, .RM8, .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}}, @@ -2756,27 +2768,35 @@ DECODE_INDEX_LEGACY := [4][256]lib.Decode_Index{ 0xE1 = { 550, 1}, 0xE2 = { 551, 1}, 0xE3 = { 552, 3}, - 0xE8 = { 555, 1}, - 0xE9 = { 556, 1}, - 0xEB = { 557, 1}, - 0xF0 = { 558, 1}, - 0xF4 = { 559, 1}, - 0xF5 = { 560, 1}, - 0xF6 = { 561, 7}, - 0xF7 = { 568, 21}, - 0xF8 = { 589, 1}, - 0xF9 = { 590, 1}, - 0xFA = { 591, 1}, - 0xFB = { 592, 1}, - 0xFC = { 593, 1}, - 0xFD = { 594, 1}, - 0xFE = { 595, 2}, - 0xFF = { 597, 16}, + 0xE4 = { 555, 1}, + 0xE5 = { 556, 2}, + 0xE6 = { 558, 1}, + 0xE7 = { 559, 2}, + 0xE8 = { 561, 1}, + 0xE9 = { 562, 1}, + 0xEB = { 563, 1}, + 0xEC = { 564, 1}, + 0xED = { 565, 2}, + 0xEE = { 567, 1}, + 0xEF = { 568, 2}, + 0xF0 = { 570, 1}, + 0xF4 = { 571, 1}, + 0xF5 = { 572, 1}, + 0xF6 = { 573, 7}, + 0xF7 = { 580, 21}, + 0xF8 = { 601, 1}, + 0xF9 = { 602, 1}, + 0xFA = { 603, 1}, + 0xFB = { 604, 1}, + 0xFC = { 605, 1}, + 0xFD = { 606, 1}, + 0xFE = { 607, 2}, + 0xFF = { 609, 16}, }, { // prefix = 66 }, { // prefix = F3 - 0x90 = { 613, 1}, + 0x90 = { 625, 1}, }, { // prefix = F2 }, @@ -2785,434 +2805,434 @@ DECODE_INDEX_LEGACY := [4][256]lib.Decode_Index{ @(rodata) DECODE_INDEX_ESC_0F := [4][256]lib.Decode_Index{ { // prefix = none - 0x00 = { 614, 10}, - 0x01 = { 624, 48}, - 0x02 = { 672, 3}, - 0x03 = { 675, 3}, - 0x05 = { 678, 1}, - 0x06 = { 679, 1}, - 0x07 = { 680, 1}, - 0x08 = { 681, 1}, - 0x09 = { 682, 1}, - 0x0B = { 683, 1}, - 0x0D = { 684, 2}, - 0x10 = { 686, 1}, - 0x11 = { 687, 1}, - 0x12 = { 688, 2}, - 0x13 = { 690, 1}, - 0x14 = { 691, 1}, - 0x15 = { 692, 1}, - 0x16 = { 693, 2}, - 0x17 = { 695, 1}, - 0x18 = { 696, 4}, - 0x1C = { 700, 1}, - 0x1F = { 701, 3}, - 0x20 = { 704, 1}, - 0x21 = { 705, 1}, - 0x22 = { 706, 1}, - 0x23 = { 707, 1}, - 0x28 = { 708, 1}, - 0x29 = { 709, 1}, - 0x2B = { 710, 1}, - 0x2E = { 711, 1}, - 0x2F = { 712, 1}, - 0x30 = { 713, 1}, - 0x31 = { 714, 1}, - 0x32 = { 715, 1}, - 0x33 = { 716, 1}, - 0x34 = { 717, 1}, - 0x35 = { 718, 1}, - 0x40 = { 719, 3}, - 0x41 = { 722, 3}, - 0x42 = { 725, 9}, - 0x43 = { 734, 9}, - 0x44 = { 743, 6}, - 0x45 = { 749, 6}, - 0x46 = { 755, 6}, - 0x47 = { 761, 6}, - 0x48 = { 767, 3}, - 0x49 = { 770, 3}, - 0x4A = { 773, 6}, - 0x4B = { 779, 6}, - 0x4C = { 785, 6}, - 0x4D = { 791, 6}, - 0x4E = { 797, 6}, - 0x4F = { 803, 6}, - 0x50 = { 809, 2}, - 0x51 = { 811, 1}, - 0x52 = { 812, 1}, - 0x53 = { 813, 1}, - 0x54 = { 814, 1}, - 0x55 = { 815, 1}, - 0x56 = { 816, 1}, - 0x57 = { 817, 1}, - 0x58 = { 818, 1}, - 0x59 = { 819, 1}, - 0x5A = { 820, 1}, - 0x5B = { 821, 1}, - 0x5C = { 822, 1}, - 0x5D = { 823, 1}, - 0x5E = { 824, 1}, - 0x5F = { 825, 1}, - 0x6E = { 826, 1}, - 0x6F = { 827, 1}, - 0x70 = { 828, 1}, - 0x78 = { 829, 1}, - 0x79 = { 830, 1}, - 0x7E = { 831, 1}, - 0x7F = { 832, 1}, - 0x80 = { 833, 1}, - 0x81 = { 834, 1}, - 0x82 = { 835, 3}, - 0x83 = { 838, 3}, - 0x84 = { 841, 2}, - 0x85 = { 843, 2}, - 0x86 = { 845, 2}, - 0x87 = { 847, 2}, - 0x88 = { 849, 1}, - 0x89 = { 850, 1}, - 0x8A = { 851, 2}, - 0x8B = { 853, 2}, - 0x8C = { 855, 2}, - 0x8D = { 857, 2}, - 0x8E = { 859, 2}, - 0x8F = { 861, 2}, - 0x90 = { 863, 1}, - 0x91 = { 864, 1}, - 0x92 = { 865, 3}, - 0x93 = { 868, 3}, - 0x94 = { 871, 2}, - 0x95 = { 873, 2}, - 0x96 = { 875, 2}, - 0x97 = { 877, 2}, - 0x98 = { 879, 1}, - 0x99 = { 880, 1}, - 0x9A = { 881, 2}, - 0x9B = { 883, 2}, - 0x9C = { 885, 2}, - 0x9D = { 887, 2}, - 0x9E = { 889, 2}, - 0x9F = { 891, 2}, - 0xA0 = { 893, 1}, - 0xA1 = { 894, 1}, - 0xA2 = { 895, 1}, - 0xA3 = { 896, 3}, - 0xA4 = { 899, 3}, - 0xA5 = { 902, 3}, - 0xA8 = { 905, 1}, - 0xA9 = { 906, 1}, - 0xAA = { 907, 1}, - 0xAB = { 908, 3}, - 0xAC = { 911, 3}, - 0xAD = { 914, 3}, - 0xAE = { 917, 14}, - 0xAF = { 931, 3}, - 0xB0 = { 934, 1}, - 0xB1 = { 935, 3}, - 0xB3 = { 938, 3}, - 0xB6 = { 941, 3}, - 0xB7 = { 944, 2}, - 0xB9 = { 946, 1}, - 0xBA = { 947, 12}, - 0xBB = { 959, 3}, - 0xBC = { 962, 3}, - 0xBD = { 965, 3}, - 0xBE = { 968, 3}, - 0xBF = { 971, 2}, - 0xC0 = { 973, 1}, - 0xC1 = { 974, 3}, - 0xC2 = { 977, 1}, - 0xC6 = { 978, 1}, - 0xC7 = { 979, 16}, - 0xC8 = { 995, 2}, - 0xFF = { 997, 1}, + 0x00 = { 626, 10}, + 0x01 = { 636, 48}, + 0x02 = { 684, 3}, + 0x03 = { 687, 3}, + 0x05 = { 690, 1}, + 0x06 = { 691, 1}, + 0x07 = { 692, 1}, + 0x08 = { 693, 1}, + 0x09 = { 694, 1}, + 0x0B = { 695, 1}, + 0x0D = { 696, 2}, + 0x10 = { 698, 1}, + 0x11 = { 699, 1}, + 0x12 = { 700, 2}, + 0x13 = { 702, 1}, + 0x14 = { 703, 1}, + 0x15 = { 704, 1}, + 0x16 = { 705, 2}, + 0x17 = { 707, 1}, + 0x18 = { 708, 4}, + 0x1C = { 712, 1}, + 0x1F = { 713, 3}, + 0x20 = { 716, 1}, + 0x21 = { 717, 1}, + 0x22 = { 718, 1}, + 0x23 = { 719, 1}, + 0x28 = { 720, 1}, + 0x29 = { 721, 1}, + 0x2B = { 722, 1}, + 0x2E = { 723, 1}, + 0x2F = { 724, 1}, + 0x30 = { 725, 1}, + 0x31 = { 726, 1}, + 0x32 = { 727, 1}, + 0x33 = { 728, 1}, + 0x34 = { 729, 1}, + 0x35 = { 730, 1}, + 0x40 = { 731, 3}, + 0x41 = { 734, 3}, + 0x42 = { 737, 9}, + 0x43 = { 746, 9}, + 0x44 = { 755, 6}, + 0x45 = { 761, 6}, + 0x46 = { 767, 6}, + 0x47 = { 773, 6}, + 0x48 = { 779, 3}, + 0x49 = { 782, 3}, + 0x4A = { 785, 6}, + 0x4B = { 791, 6}, + 0x4C = { 797, 6}, + 0x4D = { 803, 6}, + 0x4E = { 809, 6}, + 0x4F = { 815, 6}, + 0x50 = { 821, 2}, + 0x51 = { 823, 1}, + 0x52 = { 824, 1}, + 0x53 = { 825, 1}, + 0x54 = { 826, 1}, + 0x55 = { 827, 1}, + 0x56 = { 828, 1}, + 0x57 = { 829, 1}, + 0x58 = { 830, 1}, + 0x59 = { 831, 1}, + 0x5A = { 832, 1}, + 0x5B = { 833, 1}, + 0x5C = { 834, 1}, + 0x5D = { 835, 1}, + 0x5E = { 836, 1}, + 0x5F = { 837, 1}, + 0x6E = { 838, 1}, + 0x6F = { 839, 1}, + 0x70 = { 840, 1}, + 0x78 = { 841, 1}, + 0x79 = { 842, 1}, + 0x7E = { 843, 1}, + 0x7F = { 844, 1}, + 0x80 = { 845, 1}, + 0x81 = { 846, 1}, + 0x82 = { 847, 3}, + 0x83 = { 850, 3}, + 0x84 = { 853, 2}, + 0x85 = { 855, 2}, + 0x86 = { 857, 2}, + 0x87 = { 859, 2}, + 0x88 = { 861, 1}, + 0x89 = { 862, 1}, + 0x8A = { 863, 2}, + 0x8B = { 865, 2}, + 0x8C = { 867, 2}, + 0x8D = { 869, 2}, + 0x8E = { 871, 2}, + 0x8F = { 873, 2}, + 0x90 = { 875, 1}, + 0x91 = { 876, 1}, + 0x92 = { 877, 3}, + 0x93 = { 880, 3}, + 0x94 = { 883, 2}, + 0x95 = { 885, 2}, + 0x96 = { 887, 2}, + 0x97 = { 889, 2}, + 0x98 = { 891, 1}, + 0x99 = { 892, 1}, + 0x9A = { 893, 2}, + 0x9B = { 895, 2}, + 0x9C = { 897, 2}, + 0x9D = { 899, 2}, + 0x9E = { 901, 2}, + 0x9F = { 903, 2}, + 0xA0 = { 905, 1}, + 0xA1 = { 906, 1}, + 0xA2 = { 907, 1}, + 0xA3 = { 908, 3}, + 0xA4 = { 911, 3}, + 0xA5 = { 914, 3}, + 0xA8 = { 917, 1}, + 0xA9 = { 918, 1}, + 0xAA = { 919, 1}, + 0xAB = { 920, 3}, + 0xAC = { 923, 3}, + 0xAD = { 926, 3}, + 0xAE = { 929, 14}, + 0xAF = { 943, 3}, + 0xB0 = { 946, 1}, + 0xB1 = { 947, 3}, + 0xB3 = { 950, 3}, + 0xB6 = { 953, 3}, + 0xB7 = { 956, 2}, + 0xB9 = { 958, 1}, + 0xBA = { 959, 12}, + 0xBB = { 971, 3}, + 0xBC = { 974, 3}, + 0xBD = { 977, 3}, + 0xBE = { 980, 3}, + 0xBF = { 983, 2}, + 0xC0 = { 985, 1}, + 0xC1 = { 986, 3}, + 0xC2 = { 989, 1}, + 0xC6 = { 990, 1}, + 0xC7 = { 991, 16}, + 0xC8 = {1007, 2}, + 0xFF = {1009, 1}, }, { // prefix = 66 - 0x10 = { 998, 1}, - 0x11 = { 999, 1}, - 0x12 = {1000, 1}, - 0x13 = {1001, 1}, - 0x14 = {1002, 1}, - 0x15 = {1003, 1}, - 0x16 = {1004, 1}, - 0x17 = {1005, 1}, - 0x28 = {1006, 1}, - 0x29 = {1007, 1}, - 0x2B = {1008, 1}, - 0x2E = {1009, 1}, - 0x2F = {1010, 1}, - 0x50 = {1011, 2}, - 0x51 = {1013, 1}, - 0x54 = {1014, 1}, - 0x55 = {1015, 1}, - 0x56 = {1016, 1}, - 0x57 = {1017, 1}, - 0x58 = {1018, 1}, - 0x59 = {1019, 1}, - 0x5A = {1020, 1}, - 0x5B = {1021, 1}, - 0x5C = {1022, 1}, - 0x5D = {1023, 1}, - 0x5E = {1024, 1}, - 0x5F = {1025, 1}, - 0x60 = {1026, 1}, - 0x61 = {1027, 1}, - 0x62 = {1028, 1}, - 0x63 = {1029, 1}, - 0x64 = {1030, 1}, - 0x65 = {1031, 1}, - 0x66 = {1032, 1}, - 0x67 = {1033, 1}, - 0x68 = {1034, 1}, - 0x69 = {1035, 1}, - 0x6A = {1036, 1}, - 0x6B = {1037, 1}, - 0x6C = {1038, 1}, - 0x6D = {1039, 1}, - 0x6E = {1040, 2}, - 0x6F = {1042, 1}, - 0x70 = {1043, 1}, - 0x71 = {1044, 3}, - 0x72 = {1047, 3}, - 0x73 = {1050, 2}, - 0x74 = {1052, 1}, - 0x75 = {1053, 1}, - 0x76 = {1054, 1}, - 0x7C = {1055, 1}, - 0x7D = {1056, 1}, - 0x7E = {1057, 2}, - 0x7F = {1059, 1}, - 0xAE = {1060, 3}, - 0xC2 = {1063, 1}, - 0xC4 = {1064, 2}, - 0xC5 = {1066, 2}, - 0xC6 = {1068, 1}, - 0xC7 = {1069, 1}, - 0xD0 = {1070, 1}, - 0xD1 = {1071, 1}, - 0xD2 = {1072, 1}, - 0xD3 = {1073, 1}, - 0xD4 = {1074, 1}, - 0xD5 = {1075, 1}, - 0xD6 = {1076, 1}, - 0xD7 = {1077, 2}, - 0xD8 = {1079, 1}, - 0xD9 = {1080, 1}, - 0xDA = {1081, 1}, - 0xDB = {1082, 1}, - 0xDC = {1083, 1}, - 0xDD = {1084, 1}, - 0xDE = {1085, 1}, - 0xDF = {1086, 1}, - 0xE0 = {1087, 1}, - 0xE1 = {1088, 1}, - 0xE2 = {1089, 1}, - 0xE3 = {1090, 1}, - 0xE4 = {1091, 1}, - 0xE5 = {1092, 1}, - 0xE6 = {1093, 1}, - 0xE7 = {1094, 1}, - 0xE8 = {1095, 1}, - 0xE9 = {1096, 1}, - 0xEA = {1097, 1}, - 0xEB = {1098, 1}, - 0xEC = {1099, 1}, - 0xED = {1100, 1}, - 0xEE = {1101, 1}, - 0xEF = {1102, 1}, - 0xF1 = {1103, 1}, - 0xF2 = {1104, 1}, - 0xF3 = {1105, 1}, - 0xF4 = {1106, 1}, - 0xF5 = {1107, 1}, - 0xF6 = {1108, 1}, - 0xF7 = {1109, 1}, - 0xF8 = {1110, 1}, - 0xF9 = {1111, 1}, - 0xFA = {1112, 1}, - 0xFB = {1113, 1}, - 0xFC = {1114, 1}, - 0xFD = {1115, 1}, - 0xFE = {1116, 1}, + 0x10 = {1010, 1}, + 0x11 = {1011, 1}, + 0x12 = {1012, 1}, + 0x13 = {1013, 1}, + 0x14 = {1014, 1}, + 0x15 = {1015, 1}, + 0x16 = {1016, 1}, + 0x17 = {1017, 1}, + 0x28 = {1018, 1}, + 0x29 = {1019, 1}, + 0x2B = {1020, 1}, + 0x2E = {1021, 1}, + 0x2F = {1022, 1}, + 0x50 = {1023, 2}, + 0x51 = {1025, 1}, + 0x54 = {1026, 1}, + 0x55 = {1027, 1}, + 0x56 = {1028, 1}, + 0x57 = {1029, 1}, + 0x58 = {1030, 1}, + 0x59 = {1031, 1}, + 0x5A = {1032, 1}, + 0x5B = {1033, 1}, + 0x5C = {1034, 1}, + 0x5D = {1035, 1}, + 0x5E = {1036, 1}, + 0x5F = {1037, 1}, + 0x60 = {1038, 1}, + 0x61 = {1039, 1}, + 0x62 = {1040, 1}, + 0x63 = {1041, 1}, + 0x64 = {1042, 1}, + 0x65 = {1043, 1}, + 0x66 = {1044, 1}, + 0x67 = {1045, 1}, + 0x68 = {1046, 1}, + 0x69 = {1047, 1}, + 0x6A = {1048, 1}, + 0x6B = {1049, 1}, + 0x6C = {1050, 1}, + 0x6D = {1051, 1}, + 0x6E = {1052, 2}, + 0x6F = {1054, 1}, + 0x70 = {1055, 1}, + 0x71 = {1056, 3}, + 0x72 = {1059, 3}, + 0x73 = {1062, 2}, + 0x74 = {1064, 1}, + 0x75 = {1065, 1}, + 0x76 = {1066, 1}, + 0x7C = {1067, 1}, + 0x7D = {1068, 1}, + 0x7E = {1069, 2}, + 0x7F = {1071, 1}, + 0xAE = {1072, 3}, + 0xC2 = {1075, 1}, + 0xC4 = {1076, 2}, + 0xC5 = {1078, 2}, + 0xC6 = {1080, 1}, + 0xC7 = {1081, 1}, + 0xD0 = {1082, 1}, + 0xD1 = {1083, 1}, + 0xD2 = {1084, 1}, + 0xD3 = {1085, 1}, + 0xD4 = {1086, 1}, + 0xD5 = {1087, 1}, + 0xD6 = {1088, 1}, + 0xD7 = {1089, 2}, + 0xD8 = {1091, 1}, + 0xD9 = {1092, 1}, + 0xDA = {1093, 1}, + 0xDB = {1094, 1}, + 0xDC = {1095, 1}, + 0xDD = {1096, 1}, + 0xDE = {1097, 1}, + 0xDF = {1098, 1}, + 0xE0 = {1099, 1}, + 0xE1 = {1100, 1}, + 0xE2 = {1101, 1}, + 0xE3 = {1102, 1}, + 0xE4 = {1103, 1}, + 0xE5 = {1104, 1}, + 0xE6 = {1105, 1}, + 0xE7 = {1106, 1}, + 0xE8 = {1107, 1}, + 0xE9 = {1108, 1}, + 0xEA = {1109, 1}, + 0xEB = {1110, 1}, + 0xEC = {1111, 1}, + 0xED = {1112, 1}, + 0xEE = {1113, 1}, + 0xEF = {1114, 1}, + 0xF1 = {1115, 1}, + 0xF2 = {1116, 1}, + 0xF3 = {1117, 1}, + 0xF4 = {1118, 1}, + 0xF5 = {1119, 1}, + 0xF6 = {1120, 1}, + 0xF7 = {1121, 1}, + 0xF8 = {1122, 1}, + 0xF9 = {1123, 1}, + 0xFA = {1124, 1}, + 0xFB = {1125, 1}, + 0xFC = {1126, 1}, + 0xFD = {1127, 1}, + 0xFE = {1128, 1}, }, { // prefix = F3 - 0x01 = {1117, 6}, - 0x09 = {1123, 1}, - 0x10 = {1124, 1}, - 0x11 = {1125, 1}, - 0x12 = {1126, 1}, - 0x16 = {1127, 1}, - 0x1E = {1128, 4}, - 0x2A = {1132, 2}, - 0x2C = {1134, 2}, - 0x2D = {1136, 2}, - 0x51 = {1138, 1}, - 0x52 = {1139, 1}, - 0x53 = {1140, 1}, - 0x58 = {1141, 1}, - 0x59 = {1142, 1}, - 0x5A = {1143, 1}, - 0x5B = {1144, 1}, - 0x5C = {1145, 1}, - 0x5D = {1146, 1}, - 0x5E = {1147, 1}, - 0x5F = {1148, 1}, - 0x6F = {1149, 1}, - 0x70 = {1150, 1}, - 0x7E = {1151, 1}, - 0x7F = {1152, 1}, - 0xAE = {1153, 14}, - 0xB8 = {1167, 3}, - 0xBC = {1170, 3}, - 0xBD = {1173, 3}, - 0xC2 = {1176, 1}, - 0xC7 = {1177, 2}, - 0xE6 = {1179, 1}, + 0x01 = {1129, 6}, + 0x09 = {1135, 1}, + 0x10 = {1136, 1}, + 0x11 = {1137, 1}, + 0x12 = {1138, 1}, + 0x16 = {1139, 1}, + 0x1E = {1140, 4}, + 0x2A = {1144, 2}, + 0x2C = {1146, 2}, + 0x2D = {1148, 2}, + 0x51 = {1150, 1}, + 0x52 = {1151, 1}, + 0x53 = {1152, 1}, + 0x58 = {1153, 1}, + 0x59 = {1154, 1}, + 0x5A = {1155, 1}, + 0x5B = {1156, 1}, + 0x5C = {1157, 1}, + 0x5D = {1158, 1}, + 0x5E = {1159, 1}, + 0x5F = {1160, 1}, + 0x6F = {1161, 1}, + 0x70 = {1162, 1}, + 0x7E = {1163, 1}, + 0x7F = {1164, 1}, + 0xAE = {1165, 14}, + 0xB8 = {1179, 3}, + 0xBC = {1182, 3}, + 0xBD = {1185, 3}, + 0xC2 = {1188, 1}, + 0xC7 = {1189, 2}, + 0xE6 = {1191, 1}, }, { // prefix = F2 - 0x01 = {1180, 2}, - 0x10 = {1182, 1}, - 0x11 = {1183, 1}, - 0x12 = {1184, 1}, - 0x2A = {1185, 2}, - 0x2C = {1187, 2}, - 0x2D = {1189, 2}, - 0x51 = {1191, 1}, - 0x58 = {1192, 1}, - 0x59 = {1193, 1}, - 0x5A = {1194, 1}, - 0x5C = {1195, 1}, - 0x5D = {1196, 1}, - 0x5E = {1197, 1}, - 0x5F = {1198, 1}, - 0x70 = {1199, 1}, - 0x7C = {1200, 1}, - 0x7D = {1201, 1}, - 0xAE = {1202, 1}, - 0xC2 = {1203, 1}, - 0xD0 = {1204, 1}, - 0xE6 = {1205, 1}, - 0xF0 = {1206, 1}, + 0x01 = {1192, 2}, + 0x10 = {1194, 1}, + 0x11 = {1195, 1}, + 0x12 = {1196, 1}, + 0x2A = {1197, 2}, + 0x2C = {1199, 2}, + 0x2D = {1201, 2}, + 0x51 = {1203, 1}, + 0x58 = {1204, 1}, + 0x59 = {1205, 1}, + 0x5A = {1206, 1}, + 0x5C = {1207, 1}, + 0x5D = {1208, 1}, + 0x5E = {1209, 1}, + 0x5F = {1210, 1}, + 0x70 = {1211, 1}, + 0x7C = {1212, 1}, + 0x7D = {1213, 1}, + 0xAE = {1214, 1}, + 0xC2 = {1215, 1}, + 0xD0 = {1216, 1}, + 0xE6 = {1217, 1}, + 0xF0 = {1218, 1}, }, } @(rodata) DECODE_INDEX_ESC_0F38 := [4][256]lib.Decode_Index{ { // prefix = none - 0xC8 = {1207, 1}, - 0xC9 = {1208, 1}, - 0xCA = {1209, 1}, - 0xCB = {1210, 1}, - 0xCC = {1211, 1}, - 0xCD = {1212, 1}, - 0xF0 = {1213, 3}, - 0xF1 = {1216, 3}, - 0xF6 = {1219, 2}, - 0xF9 = {1221, 2}, - 0xFC = {1223, 2}, + 0xC8 = {1219, 1}, + 0xC9 = {1220, 1}, + 0xCA = {1221, 1}, + 0xCB = {1222, 1}, + 0xCC = {1223, 1}, + 0xCD = {1224, 1}, + 0xF0 = {1225, 3}, + 0xF1 = {1228, 3}, + 0xF6 = {1231, 2}, + 0xF9 = {1233, 2}, + 0xFC = {1235, 2}, }, { // prefix = 66 - 0x00 = {1225, 1}, - 0x01 = {1226, 1}, - 0x02 = {1227, 1}, - 0x03 = {1228, 1}, - 0x04 = {1229, 1}, - 0x05 = {1230, 1}, - 0x06 = {1231, 1}, - 0x07 = {1232, 1}, - 0x08 = {1233, 1}, - 0x09 = {1234, 1}, - 0x0A = {1235, 1}, - 0x0B = {1236, 1}, - 0x10 = {1237, 1}, - 0x14 = {1238, 1}, - 0x15 = {1239, 1}, - 0x17 = {1240, 1}, - 0x1C = {1241, 1}, - 0x1D = {1242, 1}, - 0x1E = {1243, 1}, - 0x20 = {1244, 1}, - 0x21 = {1245, 1}, - 0x22 = {1246, 1}, - 0x23 = {1247, 1}, - 0x24 = {1248, 1}, - 0x25 = {1249, 1}, - 0x28 = {1250, 1}, - 0x29 = {1251, 1}, - 0x2A = {1252, 1}, - 0x2B = {1253, 1}, - 0x30 = {1254, 1}, - 0x31 = {1255, 1}, - 0x32 = {1256, 1}, - 0x33 = {1257, 1}, - 0x34 = {1258, 1}, - 0x35 = {1259, 1}, - 0x37 = {1260, 1}, - 0x38 = {1261, 1}, - 0x39 = {1262, 1}, - 0x3A = {1263, 1}, - 0x3B = {1264, 1}, - 0x3C = {1265, 1}, - 0x3D = {1266, 1}, - 0x3E = {1267, 1}, - 0x3F = {1268, 1}, - 0x40 = {1269, 1}, - 0x41 = {1270, 1}, - 0x80 = {1271, 1}, - 0x81 = {1272, 1}, - 0x82 = {1273, 2}, - 0xDB = {1275, 1}, - 0xDC = {1276, 1}, - 0xDD = {1277, 1}, - 0xDE = {1278, 1}, - 0xDF = {1279, 1}, - 0xF5 = {1280, 2}, - 0xF6 = {1282, 2}, - 0xF8 = {1284, 1}, - 0xFC = {1285, 2}, + 0x00 = {1237, 1}, + 0x01 = {1238, 1}, + 0x02 = {1239, 1}, + 0x03 = {1240, 1}, + 0x04 = {1241, 1}, + 0x05 = {1242, 1}, + 0x06 = {1243, 1}, + 0x07 = {1244, 1}, + 0x08 = {1245, 1}, + 0x09 = {1246, 1}, + 0x0A = {1247, 1}, + 0x0B = {1248, 1}, + 0x10 = {1249, 1}, + 0x14 = {1250, 1}, + 0x15 = {1251, 1}, + 0x17 = {1252, 1}, + 0x1C = {1253, 1}, + 0x1D = {1254, 1}, + 0x1E = {1255, 1}, + 0x20 = {1256, 1}, + 0x21 = {1257, 1}, + 0x22 = {1258, 1}, + 0x23 = {1259, 1}, + 0x24 = {1260, 1}, + 0x25 = {1261, 1}, + 0x28 = {1262, 1}, + 0x29 = {1263, 1}, + 0x2A = {1264, 1}, + 0x2B = {1265, 1}, + 0x30 = {1266, 1}, + 0x31 = {1267, 1}, + 0x32 = {1268, 1}, + 0x33 = {1269, 1}, + 0x34 = {1270, 1}, + 0x35 = {1271, 1}, + 0x37 = {1272, 1}, + 0x38 = {1273, 1}, + 0x39 = {1274, 1}, + 0x3A = {1275, 1}, + 0x3B = {1276, 1}, + 0x3C = {1277, 1}, + 0x3D = {1278, 1}, + 0x3E = {1279, 1}, + 0x3F = {1280, 1}, + 0x40 = {1281, 1}, + 0x41 = {1282, 1}, + 0x80 = {1283, 1}, + 0x81 = {1284, 1}, + 0x82 = {1285, 2}, + 0xDB = {1287, 1}, + 0xDC = {1288, 1}, + 0xDD = {1289, 1}, + 0xDE = {1290, 1}, + 0xDF = {1291, 1}, + 0xF5 = {1292, 2}, + 0xF6 = {1294, 2}, + 0xF8 = {1296, 1}, + 0xFC = {1297, 2}, }, { // prefix = F3 - 0xF6 = {1287, 2}, - 0xF8 = {1289, 1}, - 0xFC = {1290, 2}, + 0xF6 = {1299, 2}, + 0xF8 = {1301, 1}, + 0xFC = {1302, 2}, }, { // prefix = F2 - 0xF0 = {1292, 2}, - 0xF1 = {1294, 3}, - 0xF8 = {1297, 1}, - 0xFC = {1298, 2}, + 0xF0 = {1304, 2}, + 0xF1 = {1306, 3}, + 0xF8 = {1309, 1}, + 0xFC = {1310, 2}, }, } @(rodata) DECODE_INDEX_ESC_0F3A := [4][256]lib.Decode_Index{ { // prefix = none - 0xCC = {1300, 1}, + 0xCC = {1312, 1}, }, { // prefix = 66 - 0x08 = {1301, 1}, - 0x09 = {1302, 1}, - 0x0A = {1303, 1}, - 0x0B = {1304, 1}, - 0x0C = {1305, 1}, - 0x0D = {1306, 1}, - 0x0E = {1307, 1}, - 0x0F = {1308, 1}, - 0x14 = {1309, 1}, - 0x16 = {1310, 2}, - 0x17 = {1312, 1}, - 0x20 = {1313, 1}, - 0x21 = {1314, 1}, - 0x22 = {1315, 2}, - 0x40 = {1317, 1}, - 0x41 = {1318, 1}, - 0x42 = {1319, 1}, - 0x44 = {1320, 1}, - 0x60 = {1321, 1}, - 0x61 = {1322, 1}, - 0x62 = {1323, 1}, - 0x63 = {1324, 1}, - 0xDF = {1325, 1}, + 0x08 = {1313, 1}, + 0x09 = {1314, 1}, + 0x0A = {1315, 1}, + 0x0B = {1316, 1}, + 0x0C = {1317, 1}, + 0x0D = {1318, 1}, + 0x0E = {1319, 1}, + 0x0F = {1320, 1}, + 0x14 = {1321, 1}, + 0x16 = {1322, 2}, + 0x17 = {1324, 1}, + 0x20 = {1325, 1}, + 0x21 = {1326, 1}, + 0x22 = {1327, 2}, + 0x40 = {1329, 1}, + 0x41 = {1330, 1}, + 0x42 = {1331, 1}, + 0x44 = {1332, 1}, + 0x60 = {1333, 1}, + 0x61 = {1334, 1}, + 0x62 = {1335, 1}, + 0x63 = {1336, 1}, + 0xDF = {1337, 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 44593c726..420f18e9d 100644 --- a/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin @@ -8,7 +8,7 @@ package rexcode_x86_generated import lib "../.." @(rodata) -ENCODE_FORMS := [2454]lib.Encoding{ +ENCODE_FORMS := [2466]lib.Encoding{ // .MOV {.MOV, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x88, 0, {explicit_count=2}}, {.MOV, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x89, 0, {explicit_count=2}}, @@ -3632,6 +3632,20 @@ ENCODE_FORMS := [2454]lib.Encoding{ {.SERIALIZE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 232, {esc=._0F}}, // .PREFETCH {.PREFETCH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0x0D, 0, {esc=._0F, modrm_reg_ext=true, explicit_count=1}}, + // .IN + {.IN, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE4, 0, {explicit_count=1, has_implicit=true}}, + {.IN, {.AX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE5, 0, {opsize_16=true, explicit_count=1, has_implicit=true}}, + {.IN, {.EAX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE5, 0, {explicit_count=1, has_implicit=true}}, + {.IN, {.AL_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEC, 0, {has_implicit=true}}, + {.IN, {.AX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xED, 0, {opsize_16=true, has_implicit=true}}, + {.IN, {.EAX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xED, 0, {has_implicit=true}}, + // .OUT + {.OUT, {.IMM8, .AL_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE6, 0, {explicit_count=1, has_implicit=true}}, + {.OUT, {.IMM8, .AX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE7, 0, {opsize_16=true, explicit_count=1, has_implicit=true}}, + {.OUT, {.IMM8, .EAX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE7, 0, {explicit_count=1, has_implicit=true}}, + {.OUT, {.DX_IMPL, .AL_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEE, 0, {has_implicit=true}}, + {.OUT, {.DX_IMPL, .AX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEF, 0, {opsize_16=true, has_implicit=true}}, + {.OUT, {.DX_IMPL, .EAX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEF, 0, {has_implicit=true}}, // .TPAUSE {.TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, prefix=1, modrm_reg_ext=true, explicit_count=1}}, // .UMONITOR @@ -3704,7 +3718,7 @@ ENCODE_FORMS := [2454]lib.Encoding{ } @(rodata) -CLOBBER_FORMS := [2454]lib.Clobber{ +CLOBBER_FORMS := [2466]lib.Clobber{ // .MOV {written={0}, read={1}, writes_mem=true, reads_mem=true}, {written={0}, read={1}, writes_mem=true, reads_mem=true}, @@ -7328,6 +7342,20 @@ CLOBBER_FORMS := [2454]lib.Clobber{ {side_effects={.SERIALIZING}}, // .PREFETCH {read={0}, reads_mem=true, side_effects={.HINT}}, + // .IN + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + {written={0}, read={1}, side_effects={.PRIVILEGED}}, + // .OUT + {read={0, 1}, side_effects={.PRIVILEGED}}, + {read={0, 1}, side_effects={.PRIVILEGED}}, + {read={0, 1}, side_effects={.PRIVILEGED}}, + {read={0, 1}, side_effects={.PRIVILEGED}}, + {read={0, 1}, side_effects={.PRIVILEGED}}, + {read={0, 1}, side_effects={.PRIVILEGED}}, // .TPAUSE {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}, // .UMONITOR @@ -8608,42 +8636,44 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{ .WBNOINVD = { 2414, 1}, .SERIALIZE = { 2415, 1}, .PREFETCH = { 2416, 1}, - .TPAUSE = { 2417, 1}, - .UMONITOR = { 2418, 1}, - .UMWAIT = { 2419, 1}, - .MOVDIRI = { 2420, 2}, - .MOVDIR64B = { 2422, 1}, - .ENQCMD = { 2423, 1}, - .ENQCMDS = { 2424, 1}, - .AADD = { 2425, 2}, - .AAND = { 2427, 2}, - .AOR = { 2429, 2}, - .AXOR = { 2431, 2}, - .XEND = { 2433, 1}, - .XTEST = { 2434, 1}, - .VMRUN = { 2435, 1}, - .VMMCALL = { 2436, 1}, - .VMLOAD = { 2437, 1}, - .VMSAVE = { 2438, 1}, - .STGI = { 2439, 1}, - .CLGI = { 2440, 1}, - .SKINIT = { 2441, 1}, - .INVLPGA = { 2442, 1}, - .INVLPGB = { 2443, 1}, - .TLBSYNC = { 2444, 1}, - .PVALIDATE = { 2445, 1}, - .RMPADJUST = { 2446, 1}, - .RMPUPDATE = { 2447, 1}, - .PSMASH = { 2448, 1}, - .CLZERO = { 2449, 1}, - .MONITORX = { 2450, 1}, - .MWAITX = { 2451, 1}, - .RDPRU = { 2452, 1}, - .MCOMMIT = { 2453, 1}, + .IN = { 2417, 6}, + .OUT = { 2423, 6}, + .TPAUSE = { 2429, 1}, + .UMONITOR = { 2430, 1}, + .UMWAIT = { 2431, 1}, + .MOVDIRI = { 2432, 2}, + .MOVDIR64B = { 2434, 1}, + .ENQCMD = { 2435, 1}, + .ENQCMDS = { 2436, 1}, + .AADD = { 2437, 2}, + .AAND = { 2439, 2}, + .AOR = { 2441, 2}, + .AXOR = { 2443, 2}, + .XEND = { 2445, 1}, + .XTEST = { 2446, 1}, + .VMRUN = { 2447, 1}, + .VMMCALL = { 2448, 1}, + .VMLOAD = { 2449, 1}, + .VMSAVE = { 2450, 1}, + .STGI = { 2451, 1}, + .CLGI = { 2452, 1}, + .SKINIT = { 2453, 1}, + .INVLPGA = { 2454, 1}, + .INVLPGB = { 2455, 1}, + .TLBSYNC = { 2456, 1}, + .PVALIDATE = { 2457, 1}, + .RMPADJUST = { 2458, 1}, + .RMPUPDATE = { 2459, 1}, + .PSMASH = { 2460, 1}, + .CLZERO = { 2461, 1}, + .MONITORX = { 2462, 1}, + .MWAITX = { 2463, 1}, + .RDPRU = { 2464, 1}, + .MCOMMIT = { 2465, 1}, } // Emit descriptor per form (derived from ENCODE_FORMS via lib.form_to_recipe). -ENCODE_RECIPES: [2454]lib.Form_Recipe +ENCODE_RECIPES: [2466]lib.Form_Recipe @(init) _fill_recipes :: proc "contextless" () { for i in 0 ..< len(ENCODE_FORMS) { ENCODE_RECIPES[i] = lib.form_to_recipe(&ENCODE_FORMS[i]) diff --git a/core/rexcode/isa/x86/tablegen/instruction_table.odin b/core/rexcode/isa/x86/tablegen/instruction_table.odin index aa9f8e5b9..20716bcc8 100644 --- a/core/rexcode/isa/x86/tablegen/instruction_table.odin +++ b/core/rexcode/isa/x86/tablegen/instruction_table.odin @@ -4911,6 +4911,22 @@ INSTRUCTION_TABLE := [Mnemonic][]Form{ .PREFETCH = { {{.PREFETCH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0x0D, 0, {esc=._0F, modrm_reg_ext=true}}, {read={0}, reads_mem=true, side_effects={.HINT}}}, }, + .IN = { + {{.IN, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE4, 0, {}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + {{.IN, {.AX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE5, 0, {opsize_16=true}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + {{.IN, {.EAX_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, 0xE5, 0, {}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + {{.IN, {.AL_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEC, 0, {}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + {{.IN, {.AX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xED, 0, {opsize_16=true}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + {{.IN, {.EAX_IMPL, .DX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xED, 0, {}}, {written={0}, read={1}, side_effects={.PRIVILEGED}}}, + }, + .OUT = { + {{.OUT, {.IMM8, .AL_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE6, 0, {}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + {{.OUT, {.IMM8, .AX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE7, 0, {opsize_16=true}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + {{.OUT, {.IMM8, .EAX_IMPL, .NONE, .NONE}, {.IB, .IMPL, .NONE, .NONE}, 0xE7, 0, {}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + {{.OUT, {.DX_IMPL, .AL_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEE, 0, {}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + {{.OUT, {.DX_IMPL, .AX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEF, 0, {opsize_16=true}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + {{.OUT, {.DX_IMPL, .EAX_IMPL, .NONE, .NONE}, {.IMPL, .IMPL, .NONE, .NONE}, 0xEF, 0, {}}, {read={0, 1}, side_effects={.PRIVILEGED}}}, + }, .TPAUSE = { {{.TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, prefix=PREFIX_66, modrm_reg_ext=true}}, {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}}, }, diff --git a/core/rexcode/isa/x86/tables/x86.clobber_forms.bin b/core/rexcode/isa/x86/tables/x86.clobber_forms.bin index 2672e9aeb..820ee9a2f 100644 Binary files a/core/rexcode/isa/x86/tables/x86.clobber_forms.bin and b/core/rexcode/isa/x86/tables/x86.clobber_forms.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_forms.bin b/core/rexcode/isa/x86/tables/x86.encode_forms.bin index 9ddb0e83a..e82cda790 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_forms.bin and b/core/rexcode/isa/x86/tables/x86.encode_forms.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_recipes.bin b/core/rexcode/isa/x86/tables/x86.encode_recipes.bin index 8c4a9dd32..4570cdbab 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_recipes.bin and b/core/rexcode/isa/x86/tables/x86.encode_recipes.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_runs.bin b/core/rexcode/isa/x86/tables/x86.encode_runs.bin index d7433a596..db2611695 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_runs.bin and b/core/rexcode/isa/x86/tables/x86.encode_runs.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f.bin b/core/rexcode/isa/x86/tables/x86.idx_0f.bin index 2a334704c..89d60fce9 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f38.bin b/core/rexcode/isa/x86/tables/x86.idx_0f38.bin index eb491c27c..38deebf7e 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f38.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f38.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin b/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin index 21f960324..55baf382e 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_legacy.bin b/core/rexcode/isa/x86/tables/x86.idx_legacy.bin index d4d829a3e..6449f9302 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_legacy.bin and b/core/rexcode/isa/x86/tables/x86.idx_legacy.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.legacy.bin b/core/rexcode/isa/x86/tables/x86.legacy.bin index 7e48d4add..ab7dacd83 100644 Binary files a/core/rexcode/isa/x86/tables/x86.legacy.bin and b/core/rexcode/isa/x86/tables/x86.legacy.bin differ diff --git a/src/asm_tables_amd64.cpp b/src/asm_tables_amd64.cpp index 0b7e0d583..06d583ad7 100644 --- a/src/asm_tables_amd64.cpp +++ b/src/asm_tables_amd64.cpp @@ -86,9 +86,9 @@ struct Asm_amd64 { M_WRSSD, M_WRSSQ, M_WRUSSD, M_WRUSSQ, M_SETSSBSY, M_CLRSSBSY, M_ENDBR64, M_ENDBR32, M_XSAVE, M_XSAVE64, M_XRSTOR, M_XRSTOR64, M_XSAVEOPT, M_XSAVEOPT64, M_XSAVEC, M_XSAVEC64, M_XSAVES, M_XSAVES64, M_XRSTORS, M_XRSTORS64, M_PREFETCHT0, M_PREFETCHT1, M_PREFETCHT2, M_PREFETCHNTA, M_PREFETCHW, M_CLFLUSHOPT, M_CLWB, M_CLDEMOTE, M_BSWAP, M_CMPXCHG, M_CMPXCHG8B, M_CMPXCHG16B, M_XADD, M_BOUND, M_ENTER, M_LEAVE, M_XLAT, M_XLATB, M_MOVBE, M_RDRAND, M_RDSEED, M_SWAPGS, M_MONITOR, M_MWAIT, M_CLAC, M_STAC, M_RDFSBASE, M_RDGSBASE, - M_WRFSBASE, M_WRGSBASE, M_PTWRITE, M_RDPID, M_WBNOINVD, M_SERIALIZE, M_PREFETCH, M_TPAUSE, M_UMONITOR, M_UMWAIT, M_MOVDIRI, M_MOVDIR64B, M_ENQCMD, M_ENQCMDS, M_AADD, M_AAND, - M_AOR, M_AXOR, M_XEND, M_XTEST, M_VMRUN, M_VMMCALL, M_VMLOAD, M_VMSAVE, M_STGI, M_CLGI, M_SKINIT, M_INVLPGA, M_INVLPGB, M_TLBSYNC, M_PVALIDATE, M_RMPADJUST, - M_RMPUPDATE, M_PSMASH, M_CLZERO, M_MONITORX, M_MWAITX, M_RDPRU, M_MCOMMIT, + M_WRFSBASE, M_WRGSBASE, M_PTWRITE, M_RDPID, M_WBNOINVD, M_SERIALIZE, M_PREFETCH, M_IN, M_OUT, M_TPAUSE, M_UMONITOR, M_UMWAIT, M_MOVDIRI, M_MOVDIR64B, M_ENQCMD, M_ENQCMDS, + M_AADD, M_AAND, M_AOR, M_AXOR, M_XEND, M_XTEST, M_VMRUN, M_VMMCALL, M_VMLOAD, M_VMSAVE, M_STGI, M_CLGI, M_SKINIT, M_INVLPGA, M_INVLPGB, M_TLBSYNC, + M_PVALIDATE, M_RMPADJUST, M_RMPUPDATE, M_PSMASH, M_CLZERO, M_MONITORX, M_MWAITX, M_RDPRU, M_MCOMMIT, MNEMONIC_COUNT }; @@ -439,9 +439,9 @@ struct Asm_amd64 { }; - static EncodeRun const raw_encode_runs [1239]; - static u8 const raw_encode_forms [39264]; - static u8 const raw_clobber_forms[39264]; + static EncodeRun const raw_encode_runs [1241]; + static u8 const raw_encode_forms [39456]; + static u8 const raw_clobber_forms[39456]; StringMap mnemonic_map; StringMap prefix_map; @@ -766,9 +766,9 @@ String const Asm_amd64::mnemonic_strings[Asm_amd64::MNEMONIC_COUNT] { str_lit("wrssd"), str_lit("wrssq"), str_lit("wrussd"), str_lit("wrussq"), str_lit("setssbsy"), str_lit("clrssbsy"), str_lit("endbr64"), str_lit("endbr32"), str_lit("xsave"), str_lit("xsave64"), str_lit("xrstor"), str_lit("xrstor64"), str_lit("xsaveopt"), str_lit("xsaveopt64"), str_lit("xsavec"), str_lit("xsavec64"), str_lit("xsaves"), str_lit("xsaves64"), str_lit("xrstors"), str_lit("xrstors64"), str_lit("prefetcht0"), str_lit("prefetcht1"), str_lit("prefetcht2"), str_lit("prefetchnta"), str_lit("prefetchw"), str_lit("clflushopt"), str_lit("clwb"), str_lit("cldemote"), str_lit("bswap"), str_lit("cmpxchg"), str_lit("cmpxchg8b"), str_lit("cmpxchg16b"), str_lit("xadd"), str_lit("bound"), str_lit("enter"), str_lit("leave"), str_lit("xlat"), str_lit("xlatb"), str_lit("movbe"), str_lit("rdrand"), str_lit("rdseed"), str_lit("swapgs"), str_lit("monitor"), str_lit("mwait"), str_lit("clac"), str_lit("stac"), str_lit("rdfsbase"), str_lit("rdgsbase"), - str_lit("wrfsbase"), str_lit("wrgsbase"), str_lit("ptwrite"), str_lit("rdpid"), str_lit("wbnoinvd"), str_lit("serialize"), str_lit("prefetch"), str_lit("tpause"), str_lit("umonitor"), str_lit("umwait"), str_lit("movdiri"), str_lit("movdir64b"), str_lit("enqcmd"), str_lit("enqcmds"), str_lit("aadd"), str_lit("aand"), - str_lit("aor"), str_lit("axor"), str_lit("xend"), str_lit("xtest"), str_lit("vmrun"), str_lit("vmmcall"), str_lit("vmload"), str_lit("vmsave"), str_lit("stgi"), str_lit("clgi"), str_lit("skinit"), str_lit("invlpga"), str_lit("invlpgb"), str_lit("tlbsync"), str_lit("pvalidate"), str_lit("rmpadjust"), - str_lit("rmpupdate"), str_lit("psmash"), str_lit("clzero"), str_lit("monitorx"), str_lit("mwaitx"), str_lit("rdpru"), str_lit("mcommit"), + str_lit("wrfsbase"), str_lit("wrgsbase"), str_lit("ptwrite"), str_lit("rdpid"), str_lit("wbnoinvd"), str_lit("serialize"), str_lit("prefetch"), str_lit("in"), str_lit("out"), str_lit("tpause"), str_lit("umonitor"), str_lit("umwait"), str_lit("movdiri"), str_lit("movdir64b"), str_lit("enqcmd"), str_lit("enqcmds"), + str_lit("aadd"), str_lit("aand"), str_lit("aor"), str_lit("axor"), str_lit("xend"), str_lit("xtest"), str_lit("vmrun"), str_lit("vmmcall"), str_lit("vmload"), str_lit("vmsave"), str_lit("stgi"), str_lit("clgi"), str_lit("skinit"), str_lit("invlpga"), str_lit("invlpgb"), str_lit("tlbsync"), + str_lit("pvalidate"), str_lit("rmpadjust"), str_lit("rmpupdate"), str_lit("psmash"), str_lit("clzero"), str_lit("monitorx"), str_lit("mwaitx"), str_lit("rdpru"), str_lit("mcommit"), }; String const Asm_amd64::prefix_strings[Asm_amd64::PREFIX_COUNT] { str_lit(""), str_lit("es"), str_lit("cs"), str_lit("ss"), str_lit("ds"), str_lit("rex"), str_lit("evex"), str_lit("fs"), str_lit("gs"), str_lit("vex"), str_lit("lock"), str_lit("repne"), str_lit("rep"), @@ -805,7 +805,7 @@ String const Asm_amd64::register_strings[Asm_amd64::REG_COUNT] { str_lit("bnd2"), str_lit("bnd3"), str_lit("mm0"), str_lit("mm1"), str_lit("mm2"), str_lit("mm3"), str_lit("mm4"), str_lit("mm5"), str_lit("mm6"), str_lit("mm7"), str_lit("st0"), str_lit("st1"), str_lit("st2"), str_lit("st3"), str_lit("st4"), str_lit("st5"), str_lit("st6"), str_lit("st7"), str_lit("rip"), }; -Asm_amd64::EncodeRun const Asm_amd64::raw_encode_runs[1239] = { +Asm_amd64::EncodeRun const Asm_amd64::raw_encode_runs[1241] = { { 0, 0}, { 0, 32}, { 32, 9}, { 41, 5}, { 46, 5}, { 51, 1}, { 52, 7}, { 59, 9}, { 68, 6}, { 74, 3}, { 77, 19}, { 96, 19}, { 115, 19}, { 134, 19}, { 153, 4}, { 157, 13}, { 170, 4}, { 174, 4}, { 178, 6}, { 184, 6}, { 190, 4}, { 194, 19}, { 213, 19}, { 232, 19}, { 251, 19}, { 270, 4}, { 274, 12}, { 286, 12}, { 298, 12}, { 310, 12}, { 322, 12}, { 334, 12}, { 346, 12}, { 358, 12}, { 370, 6}, { 376, 6}, { 382, 6}, { 388, 6}, { 394, 6}, { 400, 6}, { 406, 3}, { 409, 3}, { 412, 3}, { 415, 3}, { 418, 3}, { 421, 6}, { 427, 2}, { 429, 2}, @@ -881,11 +881,11 @@ Asm_amd64::EncodeRun const Asm_amd64::raw_encode_runs[1239] = { {2340, 1}, {2341, 1}, {2342, 1}, {2343, 1}, {2344, 1}, {2345, 1}, {2346, 1}, {2347, 1}, {2348, 1}, {2349, 1}, {2350, 1}, {2351, 1}, {2352, 1}, {2353, 1}, {2354, 1}, {2355, 1}, {2356, 1}, {2357, 1}, {2358, 1}, {2359, 1}, {2360, 1}, {2361, 1}, {2362, 1}, {2363, 1}, {2364, 1}, {2365, 1}, {2366, 1}, {2367, 1}, {2368, 2}, {2370, 4}, {2374, 1}, {2375, 1}, {2376, 4}, {2380, 2}, {2382, 1}, {2383, 1}, {2384, 1}, {2385, 1}, {2386, 6}, {2392, 3}, {2395, 3}, {2398, 1}, {2399, 1}, {2400, 1}, {2401, 1}, {2402, 1}, {2403, 2}, {2405, 2}, - {2407, 2}, {2409, 2}, {2411, 2}, {2413, 1}, {2414, 1}, {2415, 1}, {2416, 1}, {2417, 1}, {2418, 1}, {2419, 1}, {2420, 2}, {2422, 1}, {2423, 1}, {2424, 1}, {2425, 2}, {2427, 2}, - {2429, 2}, {2431, 2}, {2433, 1}, {2434, 1}, {2435, 1}, {2436, 1}, {2437, 1}, {2438, 1}, {2439, 1}, {2440, 1}, {2441, 1}, {2442, 1}, {2443, 1}, {2444, 1}, {2445, 1}, {2446, 1}, - {2447, 1}, {2448, 1}, {2449, 1}, {2450, 1}, {2451, 1}, {2452, 1}, {2453, 1}, + {2407, 2}, {2409, 2}, {2411, 2}, {2413, 1}, {2414, 1}, {2415, 1}, {2416, 1}, {2417, 6}, {2423, 6}, {2429, 1}, {2430, 1}, {2431, 1}, {2432, 2}, {2434, 1}, {2435, 1}, {2436, 1}, + {2437, 2}, {2439, 2}, {2441, 2}, {2443, 2}, {2445, 1}, {2446, 1}, {2447, 1}, {2448, 1}, {2449, 1}, {2450, 1}, {2451, 1}, {2452, 1}, {2453, 1}, {2454, 1}, {2455, 1}, {2456, 1}, + {2457, 1}, {2458, 1}, {2459, 1}, {2460, 1}, {2461, 1}, {2462, 1}, {2463, 1}, {2464, 1}, {2465, 1}, }; -u8 const Asm_amd64::raw_encode_forms[39264] = { +u8 const Asm_amd64::raw_encode_forms[39456] = { 0x01, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x08, 0x08, 0x00, 0x01, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x08, 0x08, 0x00, 0x01, 0x00, 0x01, 0x12, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x13, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x03, 0x14, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x15, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x08, 0x08, 0x00, @@ -1490,18 +1490,21 @@ u8 const Asm_amd64::raw_encode_forms[39264] = { 0xae, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x00, 0x09, 0x08, 0x05, 0x00, 0xaf, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x09, 0x00, 0x05, 0x00, 0xaf, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x09, 0x08, 0x05, 0x00, 0xb0, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x02, 0x09, 0x00, 0x05, 0x00, 0xb0, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x02, 0x09, 0x08, 0x05, 0x00, 0xb1, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x03, 0x09, 0x00, 0x05, 0x00, 0xb1, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x03, 0x09, 0x08, 0x05, 0x00, 0xb2, 0x04, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x09, 0x00, 0x05, 0x00, 0xb2, 0x04, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x09, 0x08, 0x05, 0x00, 0xb3, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x09, 0x00, 0x05, 0x00, 0xb4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe8, 0x01, 0x00, 0x00, 0x00, - 0xb6, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x05, 0x00, 0xb7, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x05, 0x00, 0x05, 0x00, 0xb8, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x09, 0x00, 0x05, 0x00, 0xb9, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x0d, 0x00, 0x05, 0x00, - 0xba, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x08, 0x00, 0xba, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x08, 0x08, 0x00, 0xbb, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbc, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0e, 0x00, 0x08, 0x00, - 0xbd, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0a, 0x00, 0x08, 0x00, 0xbe, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x00, 0x08, 0x00, 0xbe, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x08, 0x08, 0x00, 0xbf, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x00, 0x08, 0x00, - 0xbf, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x08, 0x08, 0x00, 0xc0, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xc0, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x08, 0x08, 0x00, 0xc1, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x00, 0x08, 0x00, - 0xc1, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x08, 0x08, 0x00, 0xc2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd5, 0x01, 0x00, 0x00, 0x00, 0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd6, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd8, 0x01, 0x00, 0x00, 0x00, - 0xc5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd9, 0x01, 0x00, 0x00, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xda, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdb, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, 0x01, 0x00, 0x00, 0x00, - 0xc9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdd, 0x01, 0x00, 0x00, 0x00, 0xca, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xde, 0x01, 0x00, 0x00, 0x00, 0xcb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdf, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x01, 0x00, 0x00, 0x00, - 0xcd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x00, 0xce, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x0d, 0x00, 0x00, 0x00, 0xcf, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x09, 0x00, 0x00, 0x00, 0xd0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x0d, 0x00, 0x00, 0x00, - 0xd1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x09, 0x00, 0x00, 0x00, 0xd2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x01, 0x00, 0x00, 0x00, 0xd3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfb, 0x01, 0x00, 0x00, 0x00, - 0xd5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x01, 0x00, 0x00, 0x00, 0xd6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x09, 0x00, 0x00, 0x00, + 0xb6, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x05, 0x00, 0xb7, 0x04, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0xb7, 0x04, 0x1a, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x10, 0x24, 0x00, 0xb7, 0x04, 0x1b, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x24, 0x00, + 0xb7, 0x04, 0x19, 0x1e, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x20, 0x00, 0xb7, 0x04, 0x1a, 0x1e, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xed, 0x00, 0x00, 0x10, 0x20, 0x00, 0xb7, 0x04, 0x1b, 0x1e, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0x20, 0x00, 0xb8, 0x04, 0x12, 0x19, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x24, 0x00, + 0xb8, 0x04, 0x12, 0x1a, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x10, 0x24, 0x00, 0xb8, 0x04, 0x12, 0x1b, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x24, 0x00, 0xb8, 0x04, 0x1e, 0x19, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x20, 0x00, 0xb8, 0x04, 0x1e, 0x1a, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xef, 0x00, 0x00, 0x10, 0x20, 0x00, + 0xb8, 0x04, 0x1e, 0x1b, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x20, 0x00, 0xb9, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x05, 0x00, 0x05, 0x00, 0xba, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x09, 0x00, 0x05, 0x00, 0xbb, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x0d, 0x00, 0x05, 0x00, + 0xbc, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x08, 0x00, 0xbc, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x08, 0x08, 0x00, 0xbd, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbe, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0e, 0x00, 0x08, 0x00, + 0xbf, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0a, 0x00, 0x08, 0x00, 0xc0, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x00, 0x08, 0x00, 0xc0, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x08, 0x08, 0x00, 0xc1, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xc1, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x08, 0x08, 0x00, 0xc2, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xc2, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x08, 0x08, 0x00, 0xc3, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x00, 0x08, 0x00, + 0xc3, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x08, 0x08, 0x00, 0xc4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd5, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd6, 0x01, 0x00, 0x00, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd8, 0x01, 0x00, 0x00, 0x00, + 0xc7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd9, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xda, 0x01, 0x00, 0x00, 0x00, 0xc9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdb, 0x01, 0x00, 0x00, 0x00, 0xca, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0xcb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdd, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xde, 0x01, 0x00, 0x00, 0x00, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdf, 0x01, 0x00, 0x00, 0x00, 0xce, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0xcf, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x0d, 0x00, 0x00, 0x00, 0xd1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x09, 0x00, 0x00, 0x00, 0xd2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x0d, 0x00, 0x00, 0x00, + 0xd3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x09, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x01, 0x00, 0x00, 0x00, 0xd5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x01, 0x00, 0x00, 0x00, 0xd6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfb, 0x01, 0x00, 0x00, 0x00, + 0xd7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x09, 0x00, 0x00, 0x00, }; -u8 const Asm_amd64::raw_clobber_forms[39264] = { +u8 const Asm_amd64::raw_clobber_forms[39456] = { 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2106,7 +2109,10 @@ u8 const Asm_amd64::raw_clobber_forms[39264] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, diff --git a/src/check_asm.cpp b/src/check_asm.cpp index 47309ad07..1b121f539 100644 --- a/src/check_asm.cpp +++ b/src/check_asm.cpp @@ -849,7 +849,9 @@ enum CheckMnemomicResult { template gb_internal CheckMnemomicResult check_mnemonic_name(AsmCtx *asm_ctx, AstAsmInstruction *instr, u16 *mnemonic_) { - String name = instr->name->Ident.token.string; + Token token = instr->name->Ident.token; + GB_ASSERT(token.kind == Ast_Ident || token_is_keyword(token.kind)); + String name = token.string; auto p = asm_ctx->prefix_lookup(name); if (p) { if (mnemonic_) *mnemonic_ = cast(u16)p; @@ -929,6 +931,10 @@ gb_internal void check_mnemonic(AsmCtx *asm_ctx, CheckerContext *ctx, Entity *tm min_count = gb_max(min_count, 0); max_count = gb_max(max_count, 0); + if (mnemonic == asm_ctx->M_IN) { + GB_PANIC("in %d %d", min_count, max_count); + } + // A prefix that none of this mnemonic's forms can take is unconditionally wrong, // independent of whether the operands match — catch it even on a match failure. if (previous_prefix > 0) {