diff --git a/src/app/test/genopcode.h b/src/app/test/genopcode.h index 4a95032..16c6b65 100644 --- a/src/app/test/genopcode.h +++ b/src/app/test/genopcode.h @@ -13,7 +13,7 @@ namespace asmgen { -enum { kGenOpCodeInstCount = 2640 }; +enum { kGenOpCodeInstCount = 2656 }; // Generate all instructions asmjit can emit. static void opcode(asmjit::X86Assembler& a) { @@ -1275,9 +1275,25 @@ static void opcode(asmjit::X86Assembler& a) { a.pcmpistrm(xmm0, ptr_gp0, 0); a.pcmpgtq(xmm0, xmm7); a.pcmpgtq(xmm0, ptr_gp0); + + // SSE4a. + a.nop(); + + a.extrq(xmm0, xmm1); + a.extrq(xmm0, 0x1, 0x2); + a.insertq(xmm0, xmm1); + a.insertq(xmm0, xmm1, 0x1, 0x2); + a.movntsd(ptr_gp0, xmm0); + a.movntss(ptr_gp0, xmm0); + + // POPCNT. + a.nop(); + a.popcnt(gp0, ptr_gp0); // AESNI. + a.nop(); + a.aesdec(xmm0, xmm7); a.aesdec(xmm0, ptr_gp0); a.aesdeclast(xmm0, xmm7); @@ -1292,10 +1308,24 @@ static void opcode(asmjit::X86Assembler& a) { a.aeskeygenassist(xmm0, ptr_gp0, 0); // PCLMULQDQ. + a.nop(); + a.pclmulqdq(xmm0, xmm7, 0); a.pclmulqdq(xmm0, ptr_gp0, 0); + // XSAVE. + a.nop(); + + a.xgetbv(); + a.xsetbv(); + + a.xsave(ptr_gp0); + a.xsaveopt(ptr_gp0); + a.xrstor(ptr_gp0); + // AVX. + a.nop(); + a.vaddpd(xmm0, xmm1, xmm2); a.vaddpd(xmm0, xmm1, ptr_gp0); a.vaddpd(ymm0, ymm1, ymm2); @@ -1946,6 +1976,8 @@ static void opcode(asmjit::X86Assembler& a) { a.vzeroupper(); // AVX+AESNI. + a.nop(); + a.vaesdec(xmm0, xmm1, xmm2); a.vaesdec(xmm0, xmm1, ptr_gp0); a.vaesdeclast(xmm0, xmm1, xmm2); @@ -1960,10 +1992,14 @@ static void opcode(asmjit::X86Assembler& a) { a.vaeskeygenassist(xmm0, ptr_gp0, 0); // AVX+PCLMULQDQ. + a.nop(); + a.vpclmulqdq(xmm0, xmm1, xmm2, 0); a.vpclmulqdq(xmm0, xmm1, ptr_gp0, 0); // AVX2. + a.nop(); + a.vbroadcasti128(ymm0, ptr_gp0); a.vbroadcastsd(ymm0, xmm1); a.vbroadcastss(xmm0, xmm1); @@ -2268,6 +2304,8 @@ static void opcode(asmjit::X86Assembler& a) { a.vpxor(ymm0, ymm1, ymm2); // FMA3. + a.nop(); + a.vfmadd132pd(xmm0, xmm1, ptr_gp0); a.vfmadd132pd(xmm0, xmm1, xmm2); a.vfmadd132pd(ymm0, ymm1, ptr_gp0); @@ -2462,6 +2500,8 @@ static void opcode(asmjit::X86Assembler& a) { a.vfnmsub231ss(xmm0, xmm1, xmm2); // FMA4. + a.nop(); + a.vfmaddpd(xmm0, xmm1, xmm2, xmm3); a.vfmaddpd(xmm0, xmm1, ptr_gp0, xmm3); a.vfmaddpd(xmm0, xmm1, xmm2, ptr_gp0); @@ -2560,6 +2600,8 @@ static void opcode(asmjit::X86Assembler& a) { a.vfnmsubss(xmm0, xmm1, xmm2, ptr_gp0); // XOP. + a.nop(); + a.vfrczpd(xmm0, xmm1); a.vfrczpd(xmm0, ptr_gp0); a.vfrczpd(ymm0, ymm1); @@ -2709,6 +2751,8 @@ static void opcode(asmjit::X86Assembler& a) { a.vpshlw(xmm0, xmm1, ptr_gp0); // BMI. + a.nop(); + a.andn(gp0, gp1, zcx); a.andn(gp0, gp1, ptr_gp1); a.bextr(gp0, gp1, zcx); @@ -2721,14 +2765,20 @@ static void opcode(asmjit::X86Assembler& a) { a.blsr(gp0, ptr_gp1); // LZCNT. + a.nop(); + a.lzcnt(gp0, gp1); a.lzcnt(gp0, ptr_gp1); // TZCNT. + a.nop(); + a.tzcnt(gp0, gp1); a.tzcnt(gp0, ptr_gp1); // BMI2. + a.nop(); + a.bzhi(gp0, gp1, zcx); a.bzhi(gp0, ptr_gp1, zcx); a.mulx(gp0, gp1, zcx); @@ -2747,9 +2797,13 @@ static void opcode(asmjit::X86Assembler& a) { a.shrx(gp0, ptr_gp1, zcx); // RDRAND. + a.nop(); + a.rdrand(gp0); // F16C. + a.nop(); + a.vcvtph2ps(xmm0, xmm1); a.vcvtph2ps(xmm0, ptr_gp1); a.vcvtph2ps(ymm0, xmm1); @@ -2758,6 +2812,9 @@ static void opcode(asmjit::X86Assembler& a) { a.vcvtps2ph(ptr_gp0, xmm1, 0); a.vcvtps2ph(xmm0, ymm1, 0); a.vcvtps2ph(ptr_gp0, ymm1, 0); + + // Mark the end of the stream. + a.nop(); } } // asmgen namespace diff --git a/src/asmjit/asmjit.h b/src/asmjit/asmjit.h index 5737ff8..9b143d4 100644 --- a/src/asmjit/asmjit.h +++ b/src/asmjit/asmjit.h @@ -235,15 +235,15 @@ //! `BaseMem` class. These functions are used to make operands that represents //! memory addresses: //! -//! - `asmjit::ptr()` -//! - `asmjit::byte_ptr()` -//! - `asmjit::word_ptr()` -//! - `asmjit::dword_ptr()` -//! - `asmjit::qword_ptr()` -//! - `asmjit::tword_ptr()` -//! - `asmjit::oword_ptr()` -//! - `asmjit::yword_ptr()` -//! - `asmjit::zword_ptr()` +//! - `asmjit::ptr()` - Address size not specified. +//! - `asmjit::byte_ptr()` - 1 byte. +//! - `asmjit::word_ptr()` - 2 bytes (Gpw size). +//! - `asmjit::dword_ptr()` - 4 bytes (Gpd size). +//! - `asmjit::qword_ptr()` - 8 bytes (Gpq/Mm size). +//! - `asmjit::tword_ptr()` - 10 bytes (FPU). +//! - `asmjit::oword_ptr()` - 16 bytes (Xmm size). +//! - `asmjit::yword_ptr()` - 32 bytes (Ymm size). +//! - `asmjit::zword_ptr()` - 64 bytes (Zmm size). //! //! Most useful function to make pointer should be `asmjit::ptr()`. It creates //! pointer to the target with unspecified size. Unspecified size works in all @@ -298,10 +298,10 @@ //! // Get `X86CpuInfo` global instance. //! const X86CpuInfo* cpuInfo = X86CpuInfo::getHost(); //! -//! if (cpuInfo->hasFeature(kX86CpuFeatureSse2)) { +//! if (cpuInfo->hasFeature(kX86CpuFeatureSSE2)) { //! // Processor has SSE2. //! } -//! else if (cpuInfo->hasFeature(kX86CpuFeatureMmx)) { +//! else if (cpuInfo->hasFeature(kX86CpuFeatureMMX)) { //! // Processor doesn't have SSE2, but has MMX. //! } //! else { diff --git a/src/asmjit/base/assembler.h b/src/asmjit/base/assembler.h index 42bd17a..bfd8c53 100644 --- a/src/asmjit/base/assembler.h +++ b/src/asmjit/base/assembler.h @@ -42,7 +42,7 @@ ASMJIT_ENUM(kInstId) { //! Instruction options (stub). ASMJIT_ENUM(kInstOptions) { //! No instruction options. - kInstOptionNone = 0x00, + kInstOptionNone = 0x00000000, //! Emit short form of the instruction. //! @@ -53,7 +53,8 @@ ASMJIT_ENUM(kInstOptions) { //! can be dangerous if the short jmp/jcc is required, but not encodable due //! to large displacement, in such case an error happens and the whole //! assembler/compiler stream is unusable. - kInstOptionShortForm = 0x01, + kInstOptionShortForm = 0x00000001, + //! Emit long form of the instruction. //! //! X86/X64: @@ -61,12 +62,13 @@ ASMJIT_ENUM(kInstOptions) { //! Long form is mosrlt related to jmp and jcc instructions, but like the //! `kInstOptionShortForm` option it can be used by other instructions //! supporting both 8-bit and 32-bit immediates. - kInstOptionLongForm = 0x02, + kInstOptionLongForm = 0x00000002, //! Condition is likely to be taken. - kInstOptionTaken = 0x04, + kInstOptionTaken = 0x00000004, + //! Condition is unlikely to be taken. - kInstOptionNotTaken = 0x08 + kInstOptionNotTaken = 0x00000008 }; // ============================================================================ diff --git a/src/asmjit/base/compiler.h b/src/asmjit/base/compiler.h index 4db3af0..9d3a533 100644 --- a/src/asmjit/base/compiler.h +++ b/src/asmjit/base/compiler.h @@ -993,11 +993,11 @@ struct VarAttr { //! Get whether `flag` is on. ASMJIT_INLINE bool hasFlag(uint32_t flag) { return (_flags & flag) != 0; } //! Add `flags`. - ASMJIT_INLINE void addFlags(uint32_t flags) { _flags |= flags; } + ASMJIT_INLINE void orFlags(uint32_t flags) { _flags |= flags; } //! Mask `flags`. ASMJIT_INLINE void andFlags(uint32_t flags) { _flags &= flags; } //! Clear `flags`. - ASMJIT_INLINE void delFlags(uint32_t flags) { _flags &= ~flags; } + ASMJIT_INLINE void andNotFlags(uint32_t flags) { _flags &= ~flags; } //! Get how many times the variable is used by the instruction/node. ASMJIT_INLINE uint32_t getVarCount() const { return _varCount; } @@ -1642,7 +1642,7 @@ struct Node { // [Accessors - Type and Flags] // -------------------------------------------------------------------------- - //! Get type of node, see `kNodeType`. + //! Get node type, see `kNodeType`. ASMJIT_INLINE uint32_t getType() const { return _type; } @@ -1652,24 +1652,29 @@ struct Node { return _flags; } - //! Set node flags to `flags`. - ASMJIT_INLINE void setFlags(uint32_t flags) { - _flags = static_cast(flags); - } - //! Get whether the instruction has flag `flag`. ASMJIT_INLINE bool hasFlag(uint32_t flag) const { return (static_cast(_flags) & flag) != 0; } + //! Set node flags to `flags`. + ASMJIT_INLINE void setFlags(uint32_t flags) { + _flags = static_cast(flags); + } + //! Add instruction `flags`. - ASMJIT_INLINE void addFlags(uint32_t flags) { + ASMJIT_INLINE void orFlags(uint32_t flags) { _flags |= static_cast(flags); } + //! And instruction `flags`. + ASMJIT_INLINE void andFlags(uint32_t flags) { + _flags &= static_cast(flags); + } + //! Clear instruction `flags`. - ASMJIT_INLINE void delFlags(uint32_t flags) { - _flags &= static_cast(~flags); + ASMJIT_INLINE void andNotFlags(uint32_t flags) { + _flags &= ~static_cast(flags); } //! Get whether the node has beed fetched. @@ -1695,18 +1700,18 @@ struct Node { return hasFlag(kNodeFlagIsInformative); } - //! Whether the instruction is an unconditional jump. + //! Whether the node is `InstNode` and unconditional jump. ASMJIT_INLINE bool isJmp() const { return hasFlag(kNodeFlagIsJmp); } - //! Whether the instruction is a conditional jump. + //! Whether the node is `InstNode` and conditional jump. ASMJIT_INLINE bool isJcc() const { return hasFlag(kNodeFlagIsJcc); } - //! Whether the instruction is an unconditional or conditional jump. + //! Whether the node is `InstNode` and conditional/unconditional jump. ASMJIT_INLINE bool isJmpOrJcc() const { return hasFlag(kNodeFlagIsJmp | kNodeFlagIsJcc); } - //! Whether the instruction is a return. + //! Whether the node is `InstNode` and return. ASMJIT_INLINE bool isRet() const { return hasFlag(kNodeFlagIsRet); } - //! Get whether the instruction is special. + //! Get whether the node is `InstNode` and the instruction is special. ASMJIT_INLINE bool isSpecial() const { return hasFlag(kNodeFlagIsSpecial); } - //! Get whether the instruction accesses FPU. + //! Get whether the node is `InstNode` and the instruction uses x87-FPU. ASMJIT_INLINE bool isFp() const { return hasFlag(kNodeFlagIsFp); } // -------------------------------------------------------------------------- @@ -1897,7 +1902,9 @@ struct EmbedNode : public Node { // -------------------------------------------------------------------------- //! Create a new `EmbedNode` instance. - ASMJIT_INLINE EmbedNode(Compiler* compiler, void* data, uint32_t size) : Node(compiler, kNodeTypeEmbed) { + ASMJIT_INLINE EmbedNode(Compiler* compiler, void* data, uint32_t size) : + Node(compiler, kNodeTypeEmbed) { + _size = size; if (size <= kInlineBufferSize) { if (data != NULL) @@ -1953,7 +1960,7 @@ struct CommentNode : public Node { //! Create a new `CommentNode` instance. ASMJIT_INLINE CommentNode(Compiler* compiler, const char* comment) : Node(compiler, kNodeTypeComment) { - addFlags(kNodeFlagIsInformative); + orFlags(kNodeFlagIsInformative); _comment = comment; } @@ -1974,8 +1981,10 @@ struct HintNode : public Node { // -------------------------------------------------------------------------- //! Create a new `HintNode` instance. - ASMJIT_INLINE HintNode(Compiler* compiler, VarData* vd, uint32_t hint, uint32_t value) : Node(compiler, kNodeTypeHint) { - addFlags(kNodeFlagIsInformative); + ASMJIT_INLINE HintNode(Compiler* compiler, VarData* vd, uint32_t hint, uint32_t value) : + Node(compiler, kNodeTypeHint) { + + orFlags(kNodeFlagIsInformative); _vd = vd; _hint = hint; _value = value; @@ -2101,9 +2110,12 @@ struct InstNode : public Node { // -------------------------------------------------------------------------- //! Create a new `InstNode` instance. - ASMJIT_INLINE InstNode(Compiler* compiler, uint32_t code, uint32_t options, Operand* opList, uint32_t opCount) : Node(compiler, kNodeTypeInst) { - _code = static_cast(code); - _options = static_cast(options); + ASMJIT_INLINE InstNode(Compiler* compiler, uint32_t instId, uint32_t instOptions, Operand* opList, uint32_t opCount) : + Node(compiler, kNodeTypeInst) { + + _instId = static_cast(instId); + _reserved = 0; + _instOptions = instOptions; _opCount = static_cast(opCount); _opList = opList; @@ -2118,18 +2130,17 @@ struct InstNode : public Node { // [Accessors] // -------------------------------------------------------------------------- - //! Get instruction code, see `kX86InstId`. - ASMJIT_INLINE uint32_t getCode() const { - return _code; + //! Get instruction ID, see `kX86InstId`. + ASMJIT_INLINE uint32_t getInstId() const { + return _instId; } - //! Set instruction code to `code`. + //! Set instruction ID to `instId`. //! - //! Please do not modify instruction code if you are not know what you are - //! doing. Incorrect instruction code or operands can raise assertion() at - //! runtime. - ASMJIT_INLINE void setCode(uint32_t code) { - _code = static_cast(code); + //! Please do not modify instruction code if you don't know what are you + //! doing. Incorrect instruction code or operands can cause assertion failure. + ASMJIT_INLINE void setInstId(uint32_t instId) { + _instId = static_cast(instId); } //! Whether the instruction is an unconditional jump or whether the @@ -2140,23 +2151,23 @@ struct InstNode : public Node { //! Get emit options. ASMJIT_INLINE uint32_t getOptions() const { - return _options; + return _instOptions; } //! Set emit options. ASMJIT_INLINE void setOptions(uint32_t options) { - _options = static_cast(options); + _instOptions = options; } //! Add emit options. ASMJIT_INLINE void addOptions(uint32_t options) { - _options |= static_cast(options); + _instOptions |= options; } //! Mask emit options. ASMJIT_INLINE void andOptions(uint32_t options) { - _options &= static_cast(options); + _instOptions &= options; } //! Clear emit options. ASMJIT_INLINE void delOptions(uint32_t options) { - _options &= static_cast(~options); + _instOptions &= ~options; } //! Get operands list. @@ -2225,12 +2236,14 @@ _Update: // [Members] // -------------------------------------------------------------------------- - //! Instruction code, see `kInstId`. - uint16_t _code; - //! Instruction options, see `kInstOptions`. - uint8_t _options; + //! Instruction ID, see `kInstId`. + uint16_t _instId; //! \internal uint8_t _memOpIndex; + //! \internal + uint8_t _reserved; + //! Instruction options, see `kInstOptions`. + uint32_t _instOptions; //! Operands list. Operand* _opList; @@ -2474,7 +2487,7 @@ struct FuncNode : public Node { //! The "Red Zone" size - count of bytes which might be accessed without //! adjusting the stack pointer. uint16_t _redZoneSize; - //! Spill zone size (zone used by WIN64ABI). + //! Spill zone size (used by WIN64 ABI). uint16_t _spillZoneSize; //! Stack size needed for function arguments. diff --git a/src/asmjit/base/constpool.cpp b/src/asmjit/base/constpool.cpp index d85ea31..6bc6102 100644 --- a/src/asmjit/base/constpool.cpp +++ b/src/asmjit/base/constpool.cpp @@ -396,7 +396,7 @@ UNIT(base_constpool) { EXPECT(prevOffset + 8 == curOffset, "pool.add() - Returned incorrect curOffset."); EXPECT(pool.getSize() == (i + 1) * 8, - "pool.getSize() - Reports incorrect size."); + "pool.getSize() - Reported incorrect size."); prevOffset = curOffset; } diff --git a/src/asmjit/base/intutil.h b/src/asmjit/base/intutil.h index fe56479..c58d957 100644 --- a/src/asmjit/base/intutil.h +++ b/src/asmjit/base/intutil.h @@ -566,6 +566,26 @@ union UInt64 { return *this; } + // -------------------------------------------------------------------------- + // [AndNot] + // -------------------------------------------------------------------------- + + ASMJIT_INLINE UInt64& andNot(uint64_t val) { + u64 &= ~val; + return *this; + } + + ASMJIT_INLINE UInt64& andNot(const UInt64& val) { + if (kArchHost64Bit) { + u64 &= ~val.u64; + } + else { + u32[0] &= ~val.u32[0]; + u32[1] &= ~val.u32[1]; + } + return *this; + } + // -------------------------------------------------------------------------- // [Or] // -------------------------------------------------------------------------- @@ -606,26 +626,6 @@ union UInt64 { return *this; } - // -------------------------------------------------------------------------- - // [Del] - // -------------------------------------------------------------------------- - - ASMJIT_INLINE UInt64& del(uint64_t val) { - u64 &= ~val; - return *this; - } - - ASMJIT_INLINE UInt64& del(const UInt64& val) { - if (kArchHost64Bit) { - u64 &= ~val.u64; - } - else { - u32[0] &= ~val.u32[0]; - u32[1] &= ~val.u32[1]; - } - return *this; - } - // -------------------------------------------------------------------------- // [Eq] // -------------------------------------------------------------------------- diff --git a/src/asmjit/test/main.cpp b/src/asmjit/test/main.cpp index 7fad121..85f8f58 100644 --- a/src/asmjit/test/main.cpp +++ b/src/asmjit/test/main.cpp @@ -44,49 +44,64 @@ static void dumpCpu(void) { const X86CpuInfo* x86Cpu = static_cast(cpu); static const DumpCpuFeature x86FeaturesList[] = { - { kX86CpuFeatureMultithreading , "Multithreading" }, - { kX86CpuFeatureExecuteDisableBit , "Execute-Disable Bit" }, - { kX86CpuFeatureRdtsc , "Rdtsc" }, - { kX86CpuFeatureRdtscp , "Rdtscp" }, - { kX86CpuFeatureCmov , "Cmov" }, - { kX86CpuFeatureCmpXchg8B , "Cmpxchg8b" }, - { kX86CpuFeatureCmpXchg16B , "Cmpxchg16b" }, - { kX86CpuFeatureClflush , "Clflush" }, - { kX86CpuFeaturePrefetch , "Prefetch" }, - { kX86CpuFeatureLahfSahf , "Lahf/Sahf" }, - { kX86CpuFeatureFxsr , "Fxsave/Fxrstor" }, - { kX86CpuFeatureFfxsr , "Fxsave/Fxrstor Opt." }, - { kX86CpuFeatureMmx , "Mmx" }, - { kX86CpuFeatureMmxExt , "MmxExt" }, - { kX86CpuFeature3dNow , "3dnow" }, - { kX86CpuFeature3dNowExt , "3dnowExt" }, - { kX86CpuFeatureSse , "Sse" }, - { kX86CpuFeatureSse2 , "Sse2" }, - { kX86CpuFeatureSse3 , "Sse3" }, - { kX86CpuFeatureSsse3 , "Ssse3" }, - { kX86CpuFeatureSse4A , "Sse4a" }, - { kX86CpuFeatureSse41 , "Sse4.1" }, - { kX86CpuFeatureSse42 , "Sse4.2" }, - { kX86CpuFeatureMsse , "Misaligned SSE" }, - { kX86CpuFeatureMonitorMWait , "Monitor/MWait" }, - { kX86CpuFeatureMovbe , "Movbe" }, - { kX86CpuFeaturePopcnt , "Popcnt" }, - { kX86CpuFeatureLzcnt , "Lzcnt" }, - { kX86CpuFeatureAesni , "AesNI" }, - { kX86CpuFeaturePclmulqdq , "Pclmulqdq" }, - { kX86CpuFeatureRdrand , "Rdrand" }, - { kX86CpuFeatureAvx , "Avx" }, - { kX86CpuFeatureAvx2 , "Avx2" }, - { kX86CpuFeatureF16C , "F16C" }, - { kX86CpuFeatureFma3 , "Fma3" }, - { kX86CpuFeatureFma4 , "Fma4" }, - { kX86CpuFeatureXop , "Xop" }, - { kX86CpuFeatureBmi , "Bmi" }, - { kX86CpuFeatureBmi2 , "Bmi2" }, - { kX86CpuFeatureHle , "Hle" }, - { kX86CpuFeatureRtm , "Rtm" }, - { kX86CpuFeatureFsGsBase , "FsGsBase" }, - { kX86CpuFeatureRepMovsbStosbExt , "RepMovsbStosbExt" } + { kX86CpuFeatureNX , "NX (Non-Execute Bit)" }, + { kX86CpuFeatureMT , "MT (Multi-Threading)" }, + { kX86CpuFeatureRDTSC , "RDTSC" }, + { kX86CpuFeatureRDTSCP , "RDTSCP" }, + { kX86CpuFeatureCMOV , "CMOV" }, + { kX86CpuFeatureCMPXCHG8B , "CMPXCHG8B" }, + { kX86CpuFeatureCMPXCHG16B , "CMPXCHG16B" }, + { kX86CpuFeatureCLFLUSH , "CLFLUSH" }, + { kX86CpuFeatureCLFLUSHOpt , "CLFLUSH (Opt)" }, + { kX86CpuFeaturePREFETCH , "PREFETCH" }, + { kX86CpuFeaturePREFETCHWT1 , "PREFETCHWT1" }, + { kX86CpuFeatureLahfSahf , "LAHF/SAHF" }, + { kX86CpuFeatureFXSR , "FXSR" }, + { kX86CpuFeatureFXSROpt , "FXSR (Opt)" }, + { kX86CpuFeatureMMX , "MMX" }, + { kX86CpuFeatureMMX2 , "MMX2" }, + { kX86CpuFeature3DNOW , "3DNOW" }, + { kX86CpuFeature3DNOW2 , "3DNOW2" }, + { kX86CpuFeatureSSE , "SSE" }, + { kX86CpuFeatureSSE2 , "SSE2" }, + { kX86CpuFeatureSSE3 , "SSE3" }, + { kX86CpuFeatureSSSE3 , "SSSE3" }, + { kX86CpuFeatureSSE4A , "SSE4A" }, + { kX86CpuFeatureSSE4_1 , "SSE4.1" }, + { kX86CpuFeatureSSE4_2 , "SSE4.2" }, + { kX86CpuFeatureMSSE , "Misaligned SSE" }, + { kX86CpuFeatureMONITOR , "MONITOR/MWAIT" }, + { kX86CpuFeatureMOVBE , "MOVBE" }, + { kX86CpuFeaturePOPCNT , "POPCNT" }, + { kX86CpuFeatureLZCNT , "LZCNT" }, + { kX86CpuFeatureAESNI , "AESNI" }, + { kX86CpuFeaturePCLMULQDQ , "PCLMULQDQ" }, + { kX86CpuFeatureRDRAND , "RDRAND" }, + { kX86CpuFeatureRDSEED , "RDSEED" }, + { kX86CpuFeatureSHA , "SHA" }, + { kX86CpuFeatureXSave , "XSAVE" }, + { kX86CpuFeatureXSaveOS , "XSAVE (OS)" }, + { kX86CpuFeatureAVX , "AVX" }, + { kX86CpuFeatureAVX2 , "AVX2" }, + { kX86CpuFeatureF16C , "F16C" }, + { kX86CpuFeatureFMA3 , "FMA3" }, + { kX86CpuFeatureFMA4 , "FMA4" }, + { kX86CpuFeatureXOP , "XOP" }, + { kX86CpuFeatureBMI , "BMI" }, + { kX86CpuFeatureBMI2 , "BMI2" }, + { kX86CpuFeatureHLE , "HLE" }, + { kX86CpuFeatureRTM , "RTM" }, + { kX86CpuFeatureADX , "ADX" }, + { kX86CpuFeatureMPX , "MPX" }, + { kX86CpuFeatureFSGSBase , "FS/GS Base" }, + { kX86CpuFeatureMOVSBSTOSBOpt , "REP MOVSB/STOSB (Opt)" }, + { kX86CpuFeatureAVX512F , "AVX512F" }, + { kX86CpuFeatureAVX512CD , "AVX512CD" }, + { kX86CpuFeatureAVX512PF , "AVX512PF" }, + { kX86CpuFeatureAVX512ER , "AVX512ER" }, + { kX86CpuFeatureAVX512DQ , "AVX512DQ" }, + { kX86CpuFeatureAVX512BW , "AVX512BW" }, + { kX86CpuFeatureAVX512VL , "AVX512VL" } }; INFO("Host CPU Info (X86/X64):"); @@ -178,16 +193,19 @@ static void dumpSizeOf(void) { #if defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64) INFO("SizeOf X86/X64:"); DUMP_TYPE(asmjit::X86Assembler); + DUMP_TYPE(asmjit::X86InstInfo); + DUMP_TYPE(asmjit::X86InstExtendedInfo); + #if !defined(ASMJIT_DISABLE_COMPILER) DUMP_TYPE(asmjit::X86Compiler); DUMP_TYPE(asmjit::X86CallNode); DUMP_TYPE(asmjit::X86FuncNode); DUMP_TYPE(asmjit::X86FuncDecl); - DUMP_TYPE(asmjit::X86InstInfo); DUMP_TYPE(asmjit::X86VarMap); DUMP_TYPE(asmjit::X86VarInfo); DUMP_TYPE(asmjit::X86VarState); #endif // !ASMJIT_DISABLE_COMPILER + INFO(""); #endif // ASMJIT_BUILD_X86 } diff --git a/src/asmjit/x86/x86assembler.cpp b/src/asmjit/x86/x86assembler.cpp index 2cc64fa..23106fe 100644 --- a/src/asmjit/x86/x86assembler.cpp +++ b/src/asmjit/x86/x86assembler.cpp @@ -29,26 +29,60 @@ namespace asmjit { // [Constants] // ============================================================================ -enum { kRexShift = 6 }; -enum { kRexForbidden = 0x80 }; enum { kMaxCommentLength = 80 }; +enum { kX86RexNoRexMask = kX86InstOptionRex | _kX86InstOptionNoRex }; -// 2-byte VEX prefix. -// [0] kVex2Byte. -// [1] RvvvvLpp. -enum { kVex2Byte = 0xC5 }; +//! \internal +//! +//! X86/X64 bytes used to encode important prefixes. +enum kX86Byte { + //! 1-byte REX prefix + kX86ByteRex = 0x40, -// 3-byte VEX prefix. -// [0] kVex3Byte. -// [1] RXBmmmmm. -// [2] WvvvvLpp. -enum { kVex3Byte = 0xC4 }; + //! 1-byte REX.W component. + kX86ByteRexW = 0x08, -// 3-byte XOP prefix. -// [0] kXopByte -// [1] RXBmmmmm -// [2] WvvvvLpp -enum { kXopByte = 0x8F }; + //! 2-byte VEX prefix: + //! - `[0]` - `0xC5`. + //! - `[1]` - `RvvvvLpp`. + kX86ByteVex2 = 0xC5, + + //! 3-byte VEX prefix. + //! - `[0]` - `0xC4`. + //! - `[1]` - `RXBmmmmm`. + //! - `[2]` - `WvvvvLpp`. + kX86ByteVex3 = 0xC4, + + //! 3-byte XOP prefix. + //! - `[0]` - `0x8F`. + //! - `[1]` - `RXBmmmmm`. + //! - `[2]` - `WvvvvLpp`. + kX86ByteXop3 = 0x8F, + + //! 4-byte EVEX prefix. + //! - `[0]` - `0x62`. + //! - `[1]` - Payload0 or `P[ 7: 0]` - `[R X B R' 0 0 m m]`. + //! - `[2]` - Payload1 or `P[15: 8]` - `[W v v v v 1 p p]`. + //! - `[3]` - Payload2 or `P[23:16]` - `[z L' L b V' a a a]`. + //! + //! Groups: + //! - `P[ 1: 0]` - EXT: VEX.mmmmm, only lowest 2 bits used. + //! - `P[ 3: 2]` - ___: Must be 0. + //! - `P[ 4]` - REG: EVEX.R'. + //! - `P[ 5]` - REG: EVEX.B. + //! - `P[ 6]` - REG: EVEX.X. + //! - `P[ 7]` - REG: EVEX.R. + //! - `P[ 9: 8]` - EXT: VEX.pp. + //! - `P[ 10]` - ___: Must be 1. + //! - `P[14:11]` - REG: 2nd SRC vector register (4 bits). + //! - `P[ 15]` - EXT: VEX.W. + //! - `P[18:16]` - REG: K registers k0...k7 (Merging/Zeroing Vector Ops.). + //! - `P[ 19]` - REG: 2nd SRC vector register (Hi bit). + //! - `P[ 20]` - EXT: Broadcast/Static-Rounding/SAE bit. + //! - `P[22.21]` - EXT: Vector Length/Rounding Control. + //! - `P[ 23]` - EXT: Destination result behavior (Merging/Zeroing Vector Ops.). + kX86ByteEvex4 = 0x62 +}; // AsmJit specific (used to encode VVVV field in XOP/VEX). enum kVexVVVV { @@ -109,7 +143,18 @@ static const uint8_t x86OpCodePopSeg[8] = { 0x00, 0x07, 0x00, 0x17, 0x1F, 0xA1, // [Utils] // ============================================================================ -//! Encode MODR/M. +static ASMJIT_INLINE uint32_t x86RexFromOpCodeAndOptions(uint32_t opCode, uint32_t options) { + uint32_t rex = (opCode >> (kX86InstOpCode_W_Shift - 3)); + ASMJIT_ASSERT((rex & ~static_cast(0x08)) == 0); + + return rex + (options & kX86RexNoRexMask); +} + +static ASMJIT_INLINE bool x86RexIsInvalid(uint32_t rex) { + return rex >= _kX86InstOptionNoRex; +} + +//! Encode ModR/M. static ASMJIT_INLINE uint32_t x86EncodeMod(uint32_t m, uint32_t o, uint32_t rm) { return (m << 6) + (o << 3) + rm; } @@ -126,6 +171,26 @@ static ASMJIT_INLINE bool x64IsRelative(Ptr a, Ptr b) { return IntUtil::isInt32(diff); } +//! Cast `reg` to `X86Reg` and get the register index. +static ASMJIT_INLINE uint32_t x86OpReg(const Operand* reg) { + return static_cast(reg)->getRegIndex(); +} + +//! Cast `mem` to `X86Mem` and return it. +static ASMJIT_INLINE const X86Mem* x86OpMem(const Operand* mem) { + return static_cast(mem); +} + +//! Combine `regIndex` and `vvvvIndex` into single value (used by AVX and AVX-512). +static ASMJIT_INLINE uint32_t x86RegAndVvvv(uint32_t regIndex, uint32_t vvvvIndex) { + return regIndex + (vvvvIndex << kVexVVVVShift); +} + +//! Get `O` field of `opCode`. +static ASMJIT_INLINE uint32_t x86ExtractO(uint32_t opCode) { + return (opCode >> kX86InstOpCode_O_Shift) & 0x7; +} + // ============================================================================ // [Macros] // ============================================================================ @@ -146,24 +211,18 @@ static ASMJIT_INLINE bool x64IsRelative(Ptr a, Ptr b) { #define ADD_REX_W(_Exp_) \ do { \ if (Arch == kArchX64) \ - opX |= static_cast(_Exp_) << 3; \ + opCode |= static_cast(_Exp_) << kX86InstOpCode_W_Shift; \ } while (0) #define ADD_REX_W_BY_SIZE(_Size_) \ do { \ - if (Arch == kArchX64) \ - opX |= static_cast(_Size_) & 0x08; \ - } while (0) - -#define ADD_REX_B(_Reg_) \ - do { \ - if (Arch == kArchX64) \ - opX |= static_cast(_Reg_) >> 3; \ + if (Arch == kArchX64 && (_Size_) == 8) \ + opCode |= kX86InstOpCode_W; \ } while (0) #define ADD_VEX_W(_Exp_) \ do { \ - opX |= static_cast(_Exp_) << 3; \ + opCode |= static_cast(_Exp_) << kX86InstOpCode_W_Shift; \ } while (0) #define ADD_VEX_L(_Exp_) \ @@ -256,19 +315,11 @@ Error X86Assembler::setArch(uint32_t arch) { _regSize = 4; _regCount.reset(); - _regCount._gp = 8; - _regCount._fp = 8; - _regCount._mm = 8; - _regCount._xy = 8; - - zax = x86::eax; - zcx = x86::ecx; - zdx = x86::edx; - zbx = x86::ebx; - zsp = x86::esp; - zbp = x86::ebp; - zsi = x86::esi; - zdi = x86::edi; + _regCount._gp = 8; + _regCount._mm = 8; + _regCount._k = 8; + _regCount._xyz = 8; + ::memcpy(&zax, &x86RegData.gpd, sizeof(Operand) * 8); return kErrorOk; } @@ -280,19 +331,11 @@ Error X86Assembler::setArch(uint32_t arch) { _regSize = 8; _regCount.reset(); - _regCount._gp = 16; - _regCount._fp = 8; - _regCount._mm = 8; - _regCount._xy = 16; - - zax = x86::rax; - zcx = x86::rcx; - zdx = x86::rdx; - zbx = x86::rbx; - zsp = x86::rsp; - zbp = x86::rbp; - zsi = x86::rsi; - zdi = x86::rdi; + _regCount._gp = 16; + _regCount._mm = 8; + _regCount._k = 8; + _regCount._xyz = 16; + ::memcpy(&zax, &x86RegData.gpq, sizeof(Operand) * 8); return kErrorOk; } @@ -547,7 +590,7 @@ size_t X86Assembler::_relocCode(void* _dst, Ptr baseAddress) const { ASMJIT_ASSERT(!"Reached"); } - // Handle the case where trampoline has been used. + // Handle the trampoline case. if (useTrampoline) { // Bytes that replace [REX, OPCODE] bytes. uint32_t byte0 = 0xFF; @@ -822,7 +865,8 @@ static void X86Assembler_dumpOperand(StringBuilder& sb, uint32_t arch, const Ope static bool X86Assembler_dumpInstruction(StringBuilder& sb, uint32_t arch, - uint32_t code, uint32_t options, + uint32_t code, + uint32_t options, const Operand* o0, const Operand* o1, const Operand* o2, @@ -951,27 +995,15 @@ static Error ASMJIT_CDECL X86Assembler_emit(Assembler* self_, uint32_t code, con // Instruction opcode. uint32_t opCode; - // MODR/R opcode or register code. + // ModR/M opcode or register code. uint32_t opReg; - // REX or VEX prefix data. - // - // REX: - // 0x0008 - REX.W. - // 0x0040 - Always emit REX prefix. - // - // AVX: - // 0x0008 - AVX.W. - // 0xF000 - VVVV, zeros by default, see `kVexVVVV`. - // - uint32_t opX; - - // MOD/RM, both rmReg and rmMem should refer to the same variable since they - // are never used together - either rmReg or rmMem. + // ModR/M, both rmReg and rmMem should refer to the same variable since they + // are never used together - either `rmReg` or `rmMem`. union { - // MODR/M - register code. + // ModR/M - register code. uintptr_t rmReg; - // MODR/M - Memory operand. + // ModR/M - Memory operand. const X86Mem* rmMem; }; @@ -1012,49 +1044,43 @@ static Error ASMJIT_CDECL X86Assembler_emit(Assembler* self_, uint32_t code, con _Prepare: opCode = info.getPrimaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; - opX = extendedInfo.getInstFlags() >> (15 - 3); + opReg = x86ExtractO(opCode); if (Arch == kArchX86) { - // AVX.W prefix. - opX &= 0x08; - // Check if one or more register operand is one of AH, BH, CH, or DH and // patch them to ensure that the binary code with correct byte-index (4-7) // is generated. if (o0->isRegType(kX86RegTypeGpbHi)) - o0 = (const Operand*)(&x86PatchedHiRegs[static_cast(o0)->getRegIndex()]); + o0 = (const Operand*)(&x86PatchedHiRegs[x86OpReg(o0)]); if (o1->isRegType(kX86RegTypeGpbHi)) - o1 = (const Operand*)(&x86PatchedHiRegs[static_cast(o1)->getRegIndex()]); + o1 = (const Operand*)(&x86PatchedHiRegs[x86OpReg(o1)]); } else { - ASMJIT_ASSERT(kX86InstOptionRex == 0x40); - - // AVX.W prefix and REX prefix. - opX |= options; - opX &= 0x48; + // `W` field. + ASMJIT_ASSERT(static_cast(kX86InstOptionRex) == + static_cast(kX86ByteRex)); // Check if one or more register operand is one of BPL, SPL, SIL, DIL and - // force a REX prefix in such case. + // force a REX prefix to be emitted in such case. if (X86Reg::isGpbReg(*o0)) { - uint32_t index = static_cast(o0)->getRegIndex(); + uint32_t index = x86OpReg(o0); if (static_cast(o0)->isGpbLo()) { - opX |= (index >= 4) << kRexShift; + options |= (index >= 4) ? kX86InstOptionRex : 0; } else { - opX |= kRexForbidden; + options |= _kX86InstOptionNoRex; o0 = reinterpret_cast(&x86PatchedHiRegs[index]); } } if (X86Reg::isGpbReg(*o1)) { - uint32_t index = static_cast(o1)->getRegIndex(); + uint32_t index = x86OpReg(o1); if (static_cast(o1)->isGpbLo()) { - opX |= (index >= 4) << kRexShift; + options |= (index >= 4) ? kX86InstOptionRex : 0; } else { - opX |= kRexForbidden; + options |= _kX86InstOptionNoRex; o1 = reinterpret_cast(&x86PatchedHiRegs[index]); } } @@ -1074,52 +1100,52 @@ _Prepare: // [Group] // -------------------------------------------------------------------------- - switch (info.getInstGroup()) { + switch (info.getEncodingId()) { // ------------------------------------------------------------------------ // [None] // ------------------------------------------------------------------------ - case kX86InstGroupNone: + case kX86InstEncodingIdNone: goto _EmitDone; // ------------------------------------------------------------------------ // [X86] // ------------------------------------------------------------------------ - case kX86InstGroupX86Op_66H: + case kX86InstEncodingIdX86Op_66H: ADD_66H_P(true); // ... Fall through ... - case kX86InstGroupX86Op: + case kX86InstEncodingIdX86Op: goto _EmitX86Op; - case kX86InstGroupX86Rm_B: + case kX86InstEncodingIdX86Rm_B: opCode += o0->getSize() != 1; // ... Fall through ... - case kX86InstGroupX86Rm: + case kX86InstEncodingIdX86Rm: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); if (encoded == ENC_OPS(Reg, None, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86RmReg: + case kX86InstEncodingIdX86RmReg: if (encoded == ENC_OPS(Reg, Reg, None)) { opCode += o0->getSize() != 1; ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -1128,48 +1154,48 @@ _Prepare: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86RegRm: + case kX86InstEncodingIdX86RegRm: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); if (encoded == ENC_OPS(Reg, Reg, None)) { ASMJIT_ASSERT(o0->getSize() != 1); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { ASMJIT_ASSERT(o0->getSize() != 1); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupX86M: + case kX86InstEncodingIdX86M: if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Arith: + case kX86InstEncodingIdX86Arith: if (encoded == ENC_OPS(Reg, Reg, None)) { opCode +=(o0->getSize() != 1) + 2; ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } @@ -1178,8 +1204,8 @@ _Prepare: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } @@ -1188,8 +1214,8 @@ _Prepare: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -1199,7 +1225,7 @@ _Prepare: if (encoded == ENC_OPS(Reg, Imm, None)) { imVal = static_cast(o1)->getInt64(); imLen = IntUtil::isInt8(imVal) ? static_cast(1) : IntUtil::iMin(o0->getSize(), 4); - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); @@ -1208,7 +1234,7 @@ _Prepare: if (rmReg == 0 && (o0->getSize() == 1 || imLen != 1)) { opCode = ((opReg << 3) | (0x04 + (o0->getSize() != 1))); imLen = IntUtil::iMin(o0->getSize(), 4); - goto _EmitX86OpI; + goto _EmitX86Op; } opCode += o0->getSize() != 1 ? (imLen != 1 ? 1 : 3) : 0; @@ -1228,29 +1254,26 @@ _Prepare: ADD_66H_P_BY_SIZE(memSize); ADD_REX_W_BY_SIZE(memSize); - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86BSwap: + case kX86InstEncodingIdX86BSwap: if (encoded == ENC_OPS(Reg, None, None)) { - opReg = static_cast(o0)->getRegIndex(); - opCode += opReg & 0x7; - + opReg = x86OpReg(o0); ADD_REX_W_BY_SIZE(o0->getSize()); - ADD_REX_B(opReg); - goto _EmitX86Op; + goto _EmitX86OpWithOpReg; } break; - case kX86InstGroupX86BTest: + case kX86InstEncodingIdX86BTest: if (encoded == ENC_OPS(Reg, Reg, None)) { ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -1258,8 +1281,8 @@ _Prepare: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -1268,13 +1291,13 @@ _Prepare: imLen = 1; opCode = extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); if (encoded == ENC_OPS(Reg, Imm, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -1282,19 +1305,19 @@ _Prepare: if (o0->getSize() == 0) goto _IllegalInst; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Call: + case kX86InstEncodingIdX86Call: if (encoded == ENC_OPS(Reg, None, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -1329,7 +1352,7 @@ _Prepare: } break; - case kX86InstGroupX86Enter: + case kX86InstEncodingIdX86Enter: if (encoded == ENC_OPS(Imm, Imm, None)) { EMIT_BYTE(0xC8); EMIT_WORD(static_cast(o1)->getUInt16()); @@ -1338,35 +1361,37 @@ _Prepare: } break; - case kX86InstGroupX86Imul: + case kX86InstEncodingIdX86Imul: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); if (encoded == ENC_OPS(Reg, None, None)) { - opCode = 0xF6 + (o0->getSize() != 1); + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; + opCode |= 0xF6 + (o0->getSize() != 1); opReg = 5; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, None, None)) { - opCode = 0xF6 + (o0->getSize() != 1); + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; + opCode |= 0xF6 + (o0->getSize() != 1); opReg = 5; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } // The following instructions use 0x0FAF opcode. - opCode &= kX86InstOpCode_PP_66; + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; opCode |= kX86InstOpCode_MM_0F | 0xAF; if (encoded == ENC_OPS(Reg, Reg, None)) { ASMJIT_ASSERT(o0->getSize() != 1); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } @@ -1374,14 +1399,14 @@ _Prepare: if (encoded == ENC_OPS(Reg, Mem, None)) { ASMJIT_ASSERT(o0->getSize() != 1); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } // The following instructions use 0x69/0x6B opcode. - opCode &= kX86InstOpCode_PP_66; + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; opCode |= 0x6B; if (encoded == ENC_OPS(Reg, Imm, None)) { @@ -1395,7 +1420,7 @@ _Prepare: imLen = o0->getSize() == 2 ? 2 : 4; } - opReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o0); rmReg = opReg; goto _EmitX86R; } @@ -1411,8 +1436,8 @@ _Prepare: imLen = o0->getSize() == 2 ? 2 : 4; } - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } @@ -1427,22 +1452,22 @@ _Prepare: imLen = o0->getSize() == 2 ? 2 : 4; } - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupX86IncDec: + case kX86InstEncodingIdX86IncDec: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); if (encoded == ENC_OPS(Reg, None, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); // INC r16|r32 is not encodable in 64-bit mode. if (Arch == kArchX86 && (o0->getSize() == 2 || o0->getSize() == 4)) { - opCode &= kX86InstOpCode_PP_66; + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; opCode |= extendedInfo.getSecondaryOpCode() + (static_cast(rmReg) & 0x7); goto _EmitX86Op; } @@ -1454,12 +1479,12 @@ _Prepare: if (encoded == ENC_OPS(Mem, None, None)) { opCode += o0->getSize() != 1; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Int: + case kX86InstEncodingIdX86Int: if (encoded == ENC_OPS(Imm, None, None)) { imVal = static_cast(o0)->getInt64(); uint8_t imm8 = static_cast(imVal & 0xFF); @@ -1475,7 +1500,7 @@ _Prepare: } break; - case kX86InstGroupX86Jcc: + case kX86InstEncodingIdX86Jcc: if (encoded == ENC_OPS(Label, None, None)) { label = self->getLabelData(static_cast(o0)->getId()); @@ -1531,9 +1556,9 @@ _Prepare: } break; - case kX86InstGroupX86Jecxz: + case kX86InstEncodingIdX86Jecxz: if (encoded == ENC_OPS(Reg, Label, None)) { - ASMJIT_ASSERT(static_cast(o0)->getRegIndex() == kX86RegIndexCx); + ASMJIT_ASSERT(x86OpReg(o0) == kX86RegIndexCx); if ((Arch == kArchX86 && o0->getSize() == 2) || (Arch == kArchX64 && o0->getSize() == 4)) { @@ -1562,14 +1587,14 @@ _Prepare: } break; - case kX86InstGroupX86Jmp: + case kX86InstEncodingIdX86Jmp: if (encoded == ENC_OPS(Reg, None, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -1625,21 +1650,21 @@ _Prepare: } break; - case kX86InstGroupX86Lea: + case kX86InstEncodingIdX86Lea: if (encoded == ENC_OPS(Reg, Mem, None)) { ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupX86Mov: + case kX86InstEncodingIdX86Mov: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); // Sreg <- Reg if (static_cast(o0)->isSeg()) { @@ -1676,8 +1701,8 @@ _Prepare: } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); // Sreg <- Mem if (static_cast(o0)->isRegType(kX86RegTypeSeg)) { @@ -1701,8 +1726,8 @@ _Prepare: } if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); // X86Mem <- Sreg if (static_cast(o1)->isSeg()) { @@ -1730,7 +1755,7 @@ _Prepare: imLen = o0->getSize(); opReg = 0; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); // Optimize instruction size by using 32-bit immediate if possible. if (Arch == kArchX64 && imLen == 8 && IntUtil::isInt32(imVal)) { @@ -1740,10 +1765,11 @@ _Prepare: goto _EmitX86R; } else { - opCode = 0xB0 + (static_cast(o0->getSize() != 1) << 3) + (static_cast(rmReg) & 0x7); + opCode = 0xB0 + (static_cast(o0->getSize() != 1) << 3); + opReg = rmReg; + ADD_REX_W_BY_SIZE(imLen); - ADD_REX_B(rmReg); - goto _EmitX86OpI; + goto _EmitX86OpWithOpReg; } } @@ -1761,19 +1787,19 @@ _Prepare: ADD_66H_P_BY_SIZE(memSize); ADD_REX_W_BY_SIZE(memSize); - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86MovSxZx: + case kX86InstEncodingIdX86MovSxZx: if (encoded == ENC_OPS(Reg, Reg, None)) { opCode += o1->getSize() != 1; ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } @@ -1782,33 +1808,33 @@ _Prepare: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupX86MovSxd: + case kX86InstEncodingIdX86MovSxd: if (encoded == ENC_OPS(Reg, Reg, None)) { ADD_REX_W(true); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { ADD_REX_W(true); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupX86MovPtr: + case kX86InstEncodingIdX86MovPtr: if (encoded == ENC_OPS(Reg, Imm, None)) { - ASMJIT_ASSERT(static_cast(o0)->getRegIndex() == 0); + ASMJIT_ASSERT(x86OpReg(o0) == 0); opCode += o0->getSize() != 1; ADD_66H_P_BY_SIZE(o0->getSize()); @@ -1816,14 +1842,14 @@ _Prepare: imVal = static_cast(o1)->getInt64(); imLen = self->_regSize; - goto _EmitX86OpI; + goto _EmitX86Op; } // The following instruction uses the secondary opcode. opCode = extendedInfo.getSecondaryOpCode(); if (encoded == ENC_OPS(Imm, Reg, None)) { - ASMJIT_ASSERT(static_cast(o1)->getRegIndex() == 0); + ASMJIT_ASSERT(x86OpReg(o1) == 0); opCode += o1->getSize() != 1; ADD_66H_P_BY_SIZE(o1->getSize()); @@ -1831,14 +1857,14 @@ _Prepare: imVal = static_cast(o0)->getInt64(); imLen = self->_regSize; - goto _EmitX86OpI; + goto _EmitX86Op; } break; - case kX86InstGroupX86Push: + case kX86InstEncodingIdX86Push: if (encoded == ENC_OPS(Reg, None, None)) { if (o0->isRegType(kX86RegTypeSeg)) { - uint32_t segment = static_cast(o0)->getRegIndex(); + uint32_t segment = x86OpReg(o0); ASMJIT_ASSERT(segment < kX86SegCount); if (segment >= kX86SegFs) @@ -1861,10 +1887,10 @@ _Prepare: } // ... Fall through ... - case kX86InstGroupX86Pop: + case kX86InstEncodingIdX86Pop: if (encoded == ENC_OPS(Reg, None, None)) { if (o0->isRegType(kX86RegTypeSeg)) { - uint32_t segment = static_cast(o0)->getRegIndex(); + uint32_t segment = x86OpReg(o0); ASMJIT_ASSERT(segment < kX86SegCount); if (segment >= kX86SegFs) @@ -1878,30 +1904,28 @@ _GroupPop_Gp: ASMJIT_ASSERT(static_cast(o0)->getSize() == 2 || static_cast(o0)->getSize() == self->_regSize); - opReg = static_cast(o0)->getRegIndex(); - opCode = extendedInfo.getSecondaryOpCode() + (opReg & 7); + opCode = extendedInfo.getSecondaryOpCode(); + opReg = x86OpReg(o0); ADD_66H_P_BY_SIZE(o0->getSize()); - ADD_REX_B(opReg); - - goto _EmitX86Op; + goto _EmitX86OpWithOpReg; } } if (encoded == ENC_OPS(Mem, None, None)) { ADD_66H_P_BY_SIZE(o0->getSize()); - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Rep: + case kX86InstEncodingIdX86Rep: // Emit REP 0xF2 or 0xF3 prefix first. EMIT_BYTE(0xF2 + opReg); goto _EmitX86Op; - case kX86InstGroupX86Ret: + case kX86InstEncodingIdX86Ret: if (encoded == ENC_OPS(None, None, None)) { EMIT_BYTE(0xC3); goto _EmitDone; @@ -1921,7 +1945,7 @@ _GroupPop_Gp: } break; - case kX86InstGroupX86Rot: + case kX86InstEncodingIdX86Rot: opCode += o0->getSize() != 1; ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); @@ -1929,14 +1953,14 @@ _GroupPop_Gp: if (encoded == ENC_OPS(Reg, Reg, None)) { ASMJIT_ASSERT(static_cast(o1)->isRegCode(kX86RegTypeGpbLo, kX86RegIndexCx)); opCode += 2; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, Reg, None)) { ASMJIT_ASSERT(static_cast(o1)->isRegCode(kX86RegTypeGpbLo, kX86RegIndexCx)); opCode += 2; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -1945,7 +1969,7 @@ _GroupPop_Gp: imLen = imVal != 1; if (imLen) opCode -= 0x10; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -1957,28 +1981,28 @@ _GroupPop_Gp: imLen = imVal != 1; if (imLen) opCode -= 0x10; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Set: + case kX86InstEncodingIdX86Set: if (encoded == ENC_OPS(Reg, None, None)) { ASMJIT_ASSERT(o0->getSize() == 1); - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } if (encoded == ENC_OPS(Mem, None, None)) { ASMJIT_ASSERT(o0->getSize() <= 1); - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Shlrd: + case kX86InstEncodingIdX86Shlrd: if (encoded == ENC_OPS(Reg, Reg, Imm)) { ASMJIT_ASSERT(o0->getSize() == o1->getSize()); @@ -1988,8 +2012,8 @@ _GroupPop_Gp: imVal = static_cast(o2)->getInt64(); imLen = 1; - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -2000,8 +2024,8 @@ _GroupPop_Gp: imVal = static_cast(o2)->getInt64(); imLen = 1; - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } @@ -2015,8 +2039,8 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -2026,13 +2050,13 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Test: + case kX86InstEncodingIdX86Test: if (encoded == ENC_OPS(Reg, Reg, None)) { ASMJIT_ASSERT(o0->getSize() == o1->getSize()); @@ -2040,8 +2064,8 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -2050,14 +2074,14 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } // The following instructions use the secondary opcode. opCode = extendedInfo.getSecondaryOpCode() + (o0->getSize() != 1); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); if (encoded == ENC_OPS(Reg, Imm, None)) { imVal = static_cast(o1)->getInt64(); @@ -2067,13 +2091,13 @@ _GroupPop_Gp: ADD_REX_W_BY_SIZE(o0->getSize()); // Alternate Form - AL, AX, EAX, RAX. - if (static_cast(o0)->getRegIndex() == 0) { - opCode &= kX86InstOpCode_PP_66; + if (x86OpReg(o0) == 0) { + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; opCode |= 0xA8 + (o0->getSize() != 1); - goto _EmitX86OpI; + goto _EmitX86Op; } - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -2087,46 +2111,38 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupX86Xchg: + case kX86InstEncodingIdX86Xchg: if (encoded == ENC_OPS(Reg, Mem, None)) { opCode += o0->getSize() != 1; ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } // ... fall through ... - case kX86InstGroupX86Xadd: + case kX86InstEncodingIdX86Xadd: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); // Special opcode for 'xchg ?ax, reg'. if (code == kX86InstIdXchg && o0->getSize() > 1 && (opReg == 0 || rmReg == 0)) { - // One of them is zero, it doesn't matter if the instruction's form is - // 'xchg ?ax, reg' or 'xchg reg, ?ax'. + opCode &= kX86InstOpCode_PP_66 | kX86InstOpCode_W; + opCode |= 0x90; + // One of `xchg a, b` or `xchg b, a` is AX/EAX/RAX. opReg += rmReg; - - // Rex.B (0x01). - if (Arch == kArchX64) { - opX += opReg >> 3; - opReg &= 0x7; - } - - opCode &= kX86InstOpCode_PP_66; - opCode |= 0x90 + opReg; - goto _EmitX86Op; + goto _EmitX86OpWithOpReg; } opCode += o0->getSize() != 1; @@ -2138,8 +2154,8 @@ _GroupPop_Gp: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; @@ -2148,13 +2164,13 @@ _GroupPop_Gp: // [Fpu] // ------------------------------------------------------------------------ - case kX86InstGroupFpuOp: + case kX86InstEncodingIdFpuOp: goto _EmitFpuOp; - case kX86InstGroupFpuArith: + case kX86InstEncodingIdFpuArith: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); rmReg += opReg; // We switch to the alternative opcode if the first operand is zero. @@ -2174,19 +2190,19 @@ _EmitFpArith_Reg: // set already. _EmitFpArith_Mem: opCode = (o0->getSize() == 4) ? 0xD8 : 0xDC; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupFpuCom: + case kX86InstEncodingIdFpuCom: if (encoded == ENC_OPS(None, None, None)) { rmReg = 1; goto _EmitFpArith_Reg; } if (encoded == ENC_OPS(Reg, None, None)) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitFpArith_Reg; } @@ -2195,9 +2211,9 @@ _EmitFpArith_Mem: } break; - case kX86InstGroupFpuFldFst: + case kX86InstEncodingIdFpuFldFst: if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); if (o0->getSize() == 4 && info.hasInstFlag(kX86InstFlagMem4)) { goto _EmitX86M; @@ -2210,33 +2226,33 @@ _EmitFpArith_Mem: if (o0->getSize() == 10 && info.hasInstFlag(kX86InstFlagMem10)) { opCode = extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); goto _EmitX86M; } } if (encoded == ENC_OPS(Reg, None, None)) { if (code == kX86InstIdFld) { - opCode = 0xD9C0 + static_cast(o0)->getRegIndex(); + opCode = 0xD9C0 + x86OpReg(o0); goto _EmitFpuOp; } if (code == kX86InstIdFst) { - opCode = 0xDDD0 + static_cast(o0)->getRegIndex(); + opCode = 0xDDD0 + x86OpReg(o0); goto _EmitFpuOp; } if (code == kX86InstIdFstp) { - opCode = 0xDDD8 + static_cast(o0)->getRegIndex(); + opCode = 0xDDD8 + x86OpReg(o0); goto _EmitFpuOp; } } break; - case kX86InstGroupFpuM: + case kX86InstEncodingIdFpuM: if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); if (o0->getSize() == 2 && info.hasInstFlag(kX86InstFlagMem2)) { opCode += 4; @@ -2249,29 +2265,29 @@ _EmitFpArith_Mem: if (o0->getSize() == 8 && info.hasInstFlag(kX86InstFlagMem8)) { opCode = extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); goto _EmitX86M; } } break; - case kX86InstGroupFpuRDef: + case kX86InstEncodingIdFpuRDef: if (encoded == ENC_OPS(None, None, None)) { opCode += 1; goto _EmitFpuOp; } // ... Fall through ... - case kX86InstGroupFpuR: + case kX86InstEncodingIdFpuR: if (encoded == ENC_OPS(Reg, None, None)) { - opCode += static_cast(o0)->getRegIndex(); + opCode += x86OpReg(o0); goto _EmitFpuOp; } break; - case kX86InstGroupFpuStsw: + case kX86InstEncodingIdFpuStsw: if (encoded == ENC_OPS(Reg, None, None)) { - if (static_cast(o0)->getRegIndex() != 0) + if (x86OpReg(o0) != 0) goto _IllegalInst; opCode = extendedInfo.getSecondaryOpCode(); @@ -2279,7 +2295,7 @@ _EmitFpArith_Mem: } if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; @@ -2288,7 +2304,7 @@ _EmitFpArith_Mem: // [Ext] // ------------------------------------------------------------------------ - case kX86InstGroupExtCrc: + case kX86InstEncodingIdExtCrc: ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); @@ -2297,8 +2313,8 @@ _EmitFpArith_Mem: static_cast(o0)->getRegType() == kX86RegTypeGpq); opCode += o0->getSize() != 1; - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } @@ -2307,21 +2323,21 @@ _EmitFpArith_Mem: static_cast(o0)->getRegType() == kX86RegTypeGpq); opCode += o0->getSize() != 1; - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupExtExtract: + case kX86InstEncodingIdExtExtract: if (encoded == ENC_OPS(Reg, Reg, Imm)) { ADD_66H_P(static_cast(o1)->isXmm()); imVal = static_cast(o2)->getInt64(); imLen = 1; - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitX86R; } @@ -2333,15 +2349,15 @@ _EmitFpArith_Mem: imVal = static_cast(o2)->getInt64(); imLen = 1; - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupExtFence: - if (Arch == kArchX64 && opX) { - EMIT_BYTE(0x40 | opX); + case kX86InstEncodingIdExtFence: + if (Arch == kArchX64 && (opCode & kX86InstOpCode_W_Mask)) { + EMIT_BYTE(kX86ByteRex | kX86ByteRexW); } EMIT_BYTE(0x0F); @@ -2349,8 +2365,8 @@ _EmitFpArith_Mem: EMIT_BYTE(0xC0 | (opReg << 3)); goto _EmitDone; - case kX86InstGroupExtMov: - case kX86InstGroupExtMovNoRexW: + case kX86InstEncodingIdExtMov: + case kX86InstEncodingIdExtMovNoRexW: ASMJIT_ASSERT(extendedInfo._opFlags[0] != 0); ASMJIT_ASSERT(extendedInfo._opFlags[1] != 0); @@ -2368,20 +2384,20 @@ _EmitFpArith_Mem: // Gp|Mm|Xmm <- Gp|Mm|Xmm if (encoded == ENC_OPS(Reg, Reg, None)) { - ADD_REX_W(static_cast(o0)->isGpq() && (info.getInstGroup() != kX86InstGroupExtMovNoRexW)); - ADD_REX_W(static_cast(o1)->isGpq() && (info.getInstGroup() != kX86InstGroupExtMovNoRexW)); + ADD_REX_W(static_cast(o0)->isGpq() && (info.getEncodingId() != kX86InstEncodingIdExtMovNoRexW)); + ADD_REX_W(static_cast(o1)->isGpq() && (info.getEncodingId() != kX86InstEncodingIdExtMovNoRexW)); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } // Gp|Mm|Xmm <- Mem if (encoded == ENC_OPS(Reg, Mem, None)) { - ADD_REX_W(static_cast(o0)->isGpq() && (info.getInstGroup() != kX86InstGroupExtMovNoRexW)); + ADD_REX_W(static_cast(o0)->isGpq() && (info.getEncodingId() != kX86InstEncodingIdExtMovNoRexW)); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } @@ -2390,21 +2406,21 @@ _EmitFpArith_Mem: // X86Mem <- Gp|Mm|Xmm if (encoded == ENC_OPS(Mem, Reg, None)) { - ADD_REX_W(static_cast(o1)->isGpq() && (info.getInstGroup() != kX86InstGroupExtMovNoRexW)); + ADD_REX_W(static_cast(o1)->isGpq() && (info.getEncodingId() != kX86InstEncodingIdExtMovNoRexW)); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupExtMovBe: + case kX86InstEncodingIdExtMovBe: if (encoded == ENC_OPS(Reg, Mem, None)) { ADD_66H_P_BY_SIZE(o0->getSize()); ADD_REX_W_BY_SIZE(o0->getSize()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } @@ -2415,51 +2431,51 @@ _EmitFpArith_Mem: ADD_66H_P_BY_SIZE(o1->getSize()); ADD_REX_W_BY_SIZE(o1->getSize()); - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupExtMovD: + case kX86InstEncodingIdExtMovD: _EmitMmMovD: - opReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o0); ADD_66H_P(static_cast(o0)->isXmm()); // Mm/Xmm <- Gp if (encoded == ENC_OPS(Reg, Reg, None) && static_cast(o1)->isGp()) { - rmReg = static_cast(o1)->getRegIndex(); + rmReg = x86OpReg(o1); goto _EmitX86R; } // Mm/Xmm <- Mem if (encoded == ENC_OPS(Reg, Mem, None)) { - rmMem = static_cast(o1); + rmMem = x86OpMem(o1); goto _EmitX86M; } // The following instructions use the secondary opcode. opCode = extendedInfo.getSecondaryOpCode(); - opReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o1); ADD_66H_P(static_cast(o1)->isXmm()); // Gp <- Mm/Xmm if (encoded == ENC_OPS(Reg, Reg, None) && static_cast(o0)->isGp()) { - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } // X86Mem <- Mm/Xmm if (encoded == ENC_OPS(Mem, Reg, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupExtMovQ: + case kX86InstEncodingIdExtMovQ: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); // Mm <- Mm if (static_cast(o0)->isMm() && static_cast(o1)->isMm()) { @@ -2487,8 +2503,8 @@ _EmitMmMovD: } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); // Mm <- Mem if (static_cast(o0)->isMm()) { @@ -2504,8 +2520,8 @@ _EmitMmMovD: } if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); // X86Mem <- Mm if (static_cast(o1)->isMm()) { @@ -2529,100 +2545,100 @@ _EmitMmMovD: } break; - case kX86InstGroupExtPrefetch: + case kX86InstEncodingIdExtPrefetch: if (encoded == ENC_OPS(Mem, Imm, None)) { opReg = static_cast(o1)->getUInt32() & 0x3; - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitX86M; } break; - case kX86InstGroupExtRm_PQ: + case kX86InstEncodingIdExtRm_PQ: ADD_66H_P(o0->isRegType(kX86RegTypeXmm) || o1->isRegType(kX86RegTypeXmm)); // ... Fall through ... - case kX86InstGroupExtRm_Q: + case kX86InstEncodingIdExtRm_Q: ADD_REX_W(o0->isRegType(kX86RegTypeGpq) || o1->isRegType(kX86RegTypeGpq) || (o1->isMem() && o1->getSize() == 8)); // ... Fall through ... - case kX86InstGroupExtRm: + case kX86InstEncodingIdExtRm: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupExtRm_P: + case kX86InstEncodingIdExtRm_P: if (encoded == ENC_OPS(Reg, Reg, None)) { ADD_66H_P(static_cast(o0)->isXmm() | static_cast(o1)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { ADD_66H_P(static_cast(o0)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupExtRmRi: + case kX86InstEncodingIdExtRmRi: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } // The following instruction uses the secondary opcode. opCode = extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); if (encoded == ENC_OPS(Reg, Imm, None)) { imVal = static_cast(o1)->getInt64(); imLen = 1; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } break; - case kX86InstGroupExtRmRi_P: + case kX86InstEncodingIdExtRmRi_P: if (encoded == ENC_OPS(Reg, Reg, None)) { ADD_66H_P(static_cast(o0)->isXmm() | static_cast(o1)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { ADD_66H_P(static_cast(o0)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } // The following instruction uses the secondary opcode. opCode = extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); if (encoded == ENC_OPS(Reg, Imm, None)) { ADD_66H_P(static_cast(o0)->isXmm()); @@ -2630,69 +2646,112 @@ _EmitMmMovD: imVal = static_cast(o1)->getInt64(); imLen = 1; - rmReg = static_cast(o0)->getRegIndex(); + rmReg = x86OpReg(o0); goto _EmitX86R; } break; - case kX86InstGroupExtRmi: + case kX86InstEncodingIdExtRmi: imVal = static_cast(o2)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; - case kX86InstGroupExtRmi_P: + case kX86InstEncodingIdExtRmi_P: imVal = static_cast(o2)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { ADD_66H_P(static_cast(o0)->isXmm() | static_cast(o1)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { ADD_66H_P(static_cast(o0)->isXmm()); - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; + // ------------------------------------------------------------------------ + // [Group - Extrq / Insertq (SSE4a)] + // ------------------------------------------------------------------------ + + case kX86InstEncodingIdExtExtrq: + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); + + if (encoded == ENC_OPS(Reg, Reg, None)) + goto _EmitX86R; + + // The following instruction uses the secondary opcode. + opCode = extendedInfo.getSecondaryOpCode(); + + if (encoded == ENC_OPS(Reg, Imm, Imm)) { + imVal = (static_cast(o1)->getUInt32() ) + + (static_cast(o2)->getUInt32() << 8) ; + imLen = 2; + + rmReg = opReg; + opReg = x86ExtractO(opCode); + goto _EmitX86R; + } + break; + + case kX86InstEncodingIdExtInsertq: + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); + + if (encoded == ENC_OPS(Reg, Reg, None)) + goto _EmitX86R; + + // The following instruction uses the secondary opcode. + opCode = extendedInfo.getSecondaryOpCode(); + + if (encoded == ENC_OPS(Reg, Reg, Imm) && o3->isImm()) { + imVal = (static_cast(o2)->getUInt32() ) + + (static_cast(o3)->getUInt32() << 8) ; + imLen = 2; + goto _EmitX86R; + } + break; + // ------------------------------------------------------------------------ // [Group - 3dNow] // ------------------------------------------------------------------------ - case kX86InstGroup3dNow: + case kX86InstEncodingId3dNow: // Every 3dNow instruction starts with 0x0F0F and the actual opcode is // stored as 8-bit immediate. imVal = opCode & 0xFF; imLen = 1; opCode = kX86InstOpCode_MM_0F | 0x0F; - opReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o0); if (encoded == ENC_OPS(Reg, Reg, None)) { - rmReg = static_cast(o1)->getRegIndex(); + rmReg = x86OpReg(o1); goto _EmitX86R; } if (encoded == ENC_OPS(Reg, Mem, None)) { - rmMem = static_cast(o1); + rmMem = x86OpMem(o1); goto _EmitX86M; } break; @@ -2701,146 +2760,142 @@ _EmitMmMovD: // [Avx] // ------------------------------------------------------------------------ - case kX86InstGroupAvxOp: + case kX86InstEncodingIdAvxOp: goto _EmitAvxOp; - case kX86InstGroupAvxM: + case kX86InstEncodingIdAvxM: if (encoded == ENC_OPS(Mem, None, None)) { - rmMem = static_cast(o0); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxMr_P: + case kX86InstEncodingIdAvxMr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxMr: + case kX86InstEncodingIdAvxMr: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitAvxR; } if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxMri_P: + case kX86InstEncodingIdAvxMri_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxMri: + case kX86InstEncodingIdAvxMri: imVal = static_cast(o2)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitAvxR; } if (encoded == ENC_OPS(Mem, Reg, Imm)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxRm_P: + case kX86InstEncodingIdAvxRm_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRm: + case kX86InstEncodingIdAvxRm: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRmi_P: + case kX86InstEncodingIdAvxRmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRmi: + case kX86InstEncodingIdAvxRmi: imVal = static_cast(o2)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvm_P: + case kX86InstEncodingIdAvxRvm_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvm: + case kX86InstEncodingIdAvxRvm: if (encoded == ENC_OPS(Reg, Reg, Reg)) { _EmitAvxRvm: - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmr_P: + case kX86InstEncodingIdAvxRvmr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvmr: + case kX86InstEncodingIdAvxRvmr: if (!o3->isReg()) goto _IllegalInst; - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmi_P: + case kX86InstEncodingIdAvxRvmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvmi: + case kX86InstEncodingIdAvxRvmi: if (!o3->isImm()) goto _IllegalInst; @@ -2848,37 +2903,33 @@ _EmitAvxRvm: imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } break; - case kX86InstGroupAvxRmv: + case kX86InstEncodingIdAvxRmv: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRmvi: + case kX86InstEncodingIdAvxRmvi: if (!o3->isImm()) goto _IllegalInst; @@ -2886,63 +2937,60 @@ _EmitAvxRvm: imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRmMr_P: + case kX86InstEncodingIdAvxRmMr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRmMr: + case kX86InstEncodingIdAvxRmMr: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitAvxM; } // The following instruction uses the secondary opcode. - opCode = extendedInfo.getSecondaryOpCode(); + opCode &= kX86InstOpCode_L_Mask; + opCode |= extendedInfo.getSecondaryOpCode(); if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmRmi_P: + case kX86InstEncodingIdAvxRvmRmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvmRmi: + case kX86InstEncodingIdAvxRvmRmi: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } @@ -2954,30 +3002,28 @@ _EmitAvxRvm: imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmMr: + case kX86InstEncodingIdAvxRvmMr: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } @@ -2985,34 +3031,32 @@ _EmitAvxRvm: opCode = extendedInfo.getSecondaryOpCode(); if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmReg = static_cast(o0)->getRegIndex(); + opReg = x86OpReg(o1); + rmReg = x86OpReg(o0); goto _EmitAvxR; } if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmMvr_P: + case kX86InstEncodingIdAvxRvmMvr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvmMvr: + case kX86InstEncodingIdAvxRvmMvr: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } @@ -3021,151 +3065,144 @@ _EmitAvxRvm: opCode |= extendedInfo.getSecondaryOpCode(); if (encoded == ENC_OPS(Mem, Reg, Reg)) { - opReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o0); + opReg = x86RegAndVvvv(x86OpReg(o2), x86OpReg(o1)); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvmVmi_P: + case kX86InstEncodingIdAvxRvmVmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvmVmi: + case kX86InstEncodingIdAvxRvmVmi: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } // The following instruction uses the secondary opcode. opCode &= kX86InstOpCode_L_Mask; opCode |= extendedInfo.getSecondaryOpCode(); - opReg = opCode >> kX86InstOpCode_O_Shift; + opReg = x86ExtractO(opCode); imVal = static_cast(o2)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxVm: + case kX86InstEncodingIdAvxVm: if (encoded == ENC_OPS(Reg, Reg, None)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxVmi_P: + case kX86InstEncodingIdAvxVmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxVmi: + case kX86InstEncodingIdAvxVmi: imVal = static_cast(o3)->getInt64(); imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmReg = x86OpReg(o1); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } break; - case kX86InstGroupAvxRvrmRvmr_P: + case kX86InstEncodingIdAvxRvrmRvmr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupAvxRvrmRvmr: + case kX86InstEncodingIdAvxRvrmRvmr: if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o2)->getRegIndex(); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) { - imVal = static_cast(o2)->getRegIndex() << 4; + imVal = x86OpReg(o2) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o3); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o3); ADD_VEX_W(true); goto _EmitAvxM; } if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } break; - case kX86InstGroupAvxMovSsSd: + case kX86InstEncodingIdAvxMovSsSd: if (encoded == ENC_OPS(Reg, Reg, Reg)) { goto _EmitAvxRvm; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opX |= static_cast(o0)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(opReg, x86OpReg(o0)); + rmMem = x86OpMem(o1); goto _EmitAvxM; } if (encoded == ENC_OPS(Mem, Reg, None)) { - opReg = static_cast(o1)->getRegIndex(); - rmMem = static_cast(o0); + opReg = x86OpReg(o1); + rmMem = x86OpMem(o0); goto _EmitAvxM; } break; - case kX86InstGroupAvxGatherEx: + case kX86InstEncodingIdAvxGatherEx: if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); uint32_t vSib = rmMem->getVSib(); if (vSib == kX86MemVSibGpz) @@ -3176,11 +3213,10 @@ _EmitAvxRvm: } break; - case kX86InstGroupAvxGather: + case kX86InstEncodingIdAvxGather: if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); uint32_t vSib = rmMem->getVSib(); if (vSib == kX86MemVSibGpz) @@ -3195,42 +3231,39 @@ _EmitAvxRvm: // [FMA4] // ------------------------------------------------------------------------ - case kX86InstGroupFma4_P: + case kX86InstEncodingIdFma4_P: // It's fine to just check the first operand, second is just for sanity. ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupFma4: + case kX86InstEncodingIdFma4: if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o2)->getRegIndex(); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitAvxR; } if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) { - imVal = static_cast(o2)->getRegIndex() << 4; + imVal = x86OpReg(o2) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o3); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o3); ADD_VEX_W(true); goto _EmitAvxM; } if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitAvxM; } @@ -3240,45 +3273,42 @@ _EmitAvxRvm: // [XOP] // ------------------------------------------------------------------------ - case kX86InstGroupXopRm_P: + case kX86InstEncodingIdXopRm_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupXopRm: + case kX86InstEncodingIdXopRm: if (encoded == ENC_OPS(Reg, Reg, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Mem, None)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitXopM; } break; - case kX86InstGroupXopRvmRmv: + case kX86InstEncodingIdXopRvmRmv: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmReg = x86OpReg(o1); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); goto _EmitXopM; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); ADD_VEX_W(true); goto _EmitXopM; @@ -3286,26 +3316,23 @@ _EmitAvxRvm: break; - case kX86InstGroupXopRvmRmi: + case kX86InstEncodingIdXopRvmRmi: if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmReg = x86OpReg(o1); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Mem, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o2)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o1); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o2)); + rmMem = x86OpMem(o1); goto _EmitXopM; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); ADD_VEX_W(true); goto _EmitXopM; @@ -3318,49 +3345,47 @@ _EmitAvxRvm: imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o1)->getRegIndex(); + opReg = x86OpReg(o0); + rmReg = x86OpReg(o1); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Mem, Imm)) { - opReg = static_cast(o0)->getRegIndex(); - rmMem = static_cast(o1); + opReg = x86OpReg(o0); + rmMem = x86OpMem(o1); goto _EmitXopM; } break; - case kX86InstGroupXopRvmr_P: + case kX86InstEncodingIdXopRvmr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupXopRvmr: + case kX86InstEncodingIdXopRvmr: if (!o3->isReg()) goto _IllegalInst; - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitXopM; } break; - case kX86InstGroupXopRvmi_P: + case kX86InstEncodingIdXopRvmi_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupXopRvmi: + case kX86InstEncodingIdXopRvmi: if (!o3->isImm()) goto _IllegalInst; @@ -3368,55 +3393,50 @@ _EmitAvxRvm: imLen = 1; if (encoded == ENC_OPS(Reg, Reg, Reg)) { - opReg = static_cast(o0)->getRegIndex(); - rmReg = static_cast(o2)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Reg, Mem)) { - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitXopM; } break; - case kX86InstGroupXopRvrmRvmr_P: + case kX86InstEncodingIdXopRvrmRvmr_P: ADD_VEX_L(static_cast(o0)->isYmm() | static_cast(o1)->isYmm()); // ... Fall through ... - case kX86InstGroupXopRvrmRvmr: + case kX86InstEncodingIdXopRvrmRvmr: if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmReg = static_cast(o2)->getRegIndex(); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmReg = x86OpReg(o2); goto _EmitXopR; } if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) { - imVal = static_cast(o2)->getRegIndex() << 4; + imVal = x86OpReg(o2) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o3); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o3); ADD_VEX_W(true); goto _EmitXopM; } if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) { - imVal = static_cast(o3)->getRegIndex() << 4; + imVal = x86OpReg(o3) << 4; imLen = 1; - opReg = static_cast(o0)->getRegIndex(); - opX |= static_cast(o1)->getRegIndex() << kVexVVVVShift; - rmMem = static_cast(o2); + opReg = x86RegAndVvvv(x86OpReg(o0), x86OpReg(o1)); + rmMem = x86OpMem(o2); goto _EmitXopM; } @@ -3457,34 +3477,56 @@ _EmitX86Op: EMIT_PP(opCode); // Rex prefix (64-bit only). - if (Arch == kArchX64 && opX) { - opX |= 0x40; - EMIT_BYTE(opX); - if (opX >= kRexForbidden) - goto _IllegalInst; + if (Arch == kArchX64) { + uint32_t rex = x86RexFromOpCodeAndOptions(opCode, options); + + if (rex) { + rex |= kX86ByteRex; + EMIT_BYTE(rex); + + if (x86RexIsInvalid(rex)) + goto _IllegalInst; + } } // Instruction opcodes. EMIT_MM(opCode); EMIT_OP(opCode); - goto _EmitDone; -_EmitX86OpI: + if (imLen != 0) + goto _EmitImm; + else + goto _EmitDone; + +_EmitX86OpWithOpReg: // Mandatory instruction prefix. EMIT_PP(opCode); // Rex prefix (64-bit only). - if (Arch == kArchX64 && opX) { - opX |= 0x40; - EMIT_BYTE(opX); - if (opX >= kRexForbidden) - goto _IllegalInst; + if (Arch == kArchX64) { + uint32_t rex = x86RexFromOpCodeAndOptions(opCode, options); + + rex += (opReg >> 3); // Rex.B (0x01). + + if (rex) { + rex |= kX86ByteRex; + opReg &= 0x7; + EMIT_BYTE(rex); + + if (x86RexIsInvalid(rex)) + goto _IllegalInst; + } } // Instruction opcodes. + opCode += opReg; EMIT_MM(opCode); EMIT_OP(opCode); - goto _EmitImm; + + if (imLen != 0) + goto _EmitImm; + else + goto _EmitDone; _EmitX86R: // Mandatory instruction prefix. @@ -3492,18 +3534,19 @@ _EmitX86R: // Rex prefix (64-bit only). if (Arch == kArchX64) { - opX += static_cast(opReg & 0x08) >> 1; // Rex.R (0x04). - opX += static_cast(rmReg) >> 3; // Rex.B (0x01). + uint32_t rex = x86RexFromOpCodeAndOptions(opCode, options); - if (opX) { - opX |= 0x40; - EMIT_BYTE(opX); - - if (opX >= kRexForbidden) - goto _IllegalInst; + rex += static_cast(opReg & 0x08) >> 1; // Rex.R (0x04). + rex += static_cast(rmReg) >> 3; // Rex.B (0x01). + if (rex) { + rex |= kX86ByteRex; opReg &= 0x7; rmReg &= 0x7; + EMIT_BYTE(rex); + + if (x86RexIsInvalid(rex)) + goto _IllegalInst; } } @@ -3548,18 +3591,19 @@ _EmitX86M: // Rex prefix (64-bit only). if (Arch == kArchX64) { - opX += static_cast(opReg & 8) >> 1; // Rex.R (0x04). - opX += static_cast(mIndex - 8 < 8) << 1; // Rex.X (0x02). - opX += static_cast(mBase - 8 < 8); // Rex.B (0x01). + uint32_t rex = x86RexFromOpCodeAndOptions(opCode, options); - if (opX) { - opX |= 0x40; - EMIT_BYTE(opX); - - if (opX >= kRexForbidden) - goto _IllegalInst; + rex += static_cast(opReg & 8) >> 1; // Rex.R (0x04). + rex += static_cast(mIndex - 8 < 8) << 1; // Rex.X (0x02). + rex += static_cast(mBase - 8 < 8); // Rex.B (0x01). + if (rex) { + rex |= kX86ByteRex; opReg &= 0x7; + EMIT_BYTE(rex); + + if (x86RexIsInvalid(rex)) + goto _IllegalInst; } mBase &= 0x7; @@ -3779,21 +3823,21 @@ _EmitFpuOp: uint32_t vex_XvvvvLpp; \ uint32_t vex_rxbmmmmm; \ \ - vex_XvvvvLpp = (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; \ - vex_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift)) & 0x03; \ - vex_XvvvvLpp += (opX >> (kVexVVVVShift - 3)); \ - vex_XvvvvLpp += (opX << 4) & 0x80; \ + vex_XvvvvLpp = (opCode >> (kX86InstOpCode_W_Shift - 7)) & 0x80; \ + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; \ + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift )) & 0x03; \ + vex_XvvvvLpp += (opReg >> (kVexVVVVShift - 3)); \ \ - vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x1F; \ - vex_rxbmmmmm += static_cast(mBase - 8 < 8) << 5; \ - vex_rxbmmmmm += static_cast(mIndex - 8 < 8) << 6; \ + vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x0F; \ + vex_rxbmmmmm |= static_cast(mBase - 8 < 8) << 5; \ + vex_rxbmmmmm |= static_cast(mIndex - 8 < 8) << 6; \ \ if (vex_rxbmmmmm != 0x01 || vex_XvvvvLpp >= 0x80 || (options & kX86InstOptionVex3) != 0) { \ vex_rxbmmmmm |= static_cast(opReg << 4) & 0x80; \ vex_rxbmmmmm ^= 0xE0; \ vex_XvvvvLpp ^= 0x78; \ \ - EMIT_BYTE(kVex3Byte); \ + EMIT_BYTE(kX86ByteVex3); \ EMIT_BYTE(vex_rxbmmmmm); \ EMIT_BYTE(vex_XvvvvLpp); \ EMIT_OP(opCode); \ @@ -3802,7 +3846,7 @@ _EmitFpuOp: vex_XvvvvLpp |= static_cast(opReg << 4) & 0x80; \ vex_XvvvvLpp ^= 0xF8; \ \ - EMIT_BYTE(kVex2Byte); \ + EMIT_BYTE(kX86ByteVex2); \ EMIT_BYTE(vex_XvvvvLpp); \ EMIT_OP(opCode); \ } \ @@ -3823,13 +3867,13 @@ _EmitAvxOp: if ((options & kX86InstOptionVex3) != 0) { uint32_t vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) | 0xE0; - EMIT_BYTE(kVex3Byte); + EMIT_BYTE(kX86ByteVex3); EMIT_OP(vex_rxbmmmmm); EMIT_OP(vex_XvvvvLpp); EMIT_OP(opCode); } else { - EMIT_BYTE(kVex2Byte); + EMIT_BYTE(kX86ByteVex2); EMIT_OP(vex_XvvvvLpp); EMIT_OP(opCode); } @@ -3841,12 +3885,12 @@ _EmitAvxR: uint32_t vex_XvvvvLpp; uint32_t vex_rxbmmmmm; - vex_XvvvvLpp = (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; - vex_XvvvvLpp |= (opCode >> (kX86InstOpCode_PP_Shift)); - vex_XvvvvLpp |= (opX >> (kVexVVVVShift - 3)); - vex_XvvvvLpp |= (opX << 4) & 0x80; + vex_XvvvvLpp = (opCode >> (kX86InstOpCode_W_Shift - 7)) & 0x80; + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift )) & 0x03; + vex_XvvvvLpp += (opReg >> (kVexVVVVShift - 3)); - vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x1F; + vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x0F; vex_rxbmmmmm |= (rmReg << 2) & 0x20; if (vex_rxbmmmmm != 0x01 || vex_XvvvvLpp >= 0x80 || (options & kX86InstOptionVex3) != 0) { @@ -3854,7 +3898,7 @@ _EmitAvxR: vex_rxbmmmmm ^= 0xE0; vex_XvvvvLpp ^= 0x78; - EMIT_BYTE(kVex3Byte); + EMIT_BYTE(kX86ByteVex3); EMIT_OP(vex_rxbmmmmm); EMIT_OP(vex_XvvvvLpp); EMIT_OP(opCode); @@ -3865,7 +3909,7 @@ _EmitAvxR: vex_XvvvvLpp += static_cast(opReg & 0x08) << 4; vex_XvvvvLpp ^= 0xF8; - EMIT_BYTE(kVex2Byte); + EMIT_BYTE(kX86ByteVex2); EMIT_OP(vex_XvvvvLpp); EMIT_OP(opCode); } @@ -3978,12 +4022,12 @@ _EmitAvxV: uint32_t vex_XvvvvLpp; \ uint32_t vex_rxbmmmmm; \ \ - vex_XvvvvLpp = (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; \ - vex_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift)) & 0x03; \ - vex_XvvvvLpp += (opX >> (kVexVVVVShift - 3)); \ - vex_XvvvvLpp += (opX << 4) & 0x80; \ + vex_XvvvvLpp = (opCode >> (kX86InstOpCode_W_Shift - 7)) & 0x80; \ + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; \ + vex_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift )) & 0x03; \ + vex_XvvvvLpp += (opReg >> (kVexVVVVShift - 3)); \ \ - vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x1F; \ + vex_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x0F; \ vex_rxbmmmmm += static_cast(mBase - 8 < 8) << 5; \ vex_rxbmmmmm += static_cast(mIndex - 8 < 8) << 6; \ \ @@ -3991,7 +4035,7 @@ _EmitAvxV: vex_rxbmmmmm ^= 0xE0; \ vex_XvvvvLpp ^= 0x78; \ \ - EMIT_BYTE(kXopByte); \ + EMIT_BYTE(kX86ByteXop3); \ EMIT_BYTE(vex_rxbmmmmm); \ EMIT_BYTE(vex_XvvvvLpp); \ EMIT_OP(opCode); \ @@ -4005,19 +4049,19 @@ _EmitXopR: uint32_t xop_XvvvvLpp; uint32_t xop_rxbmmmmm; - xop_XvvvvLpp = (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; - xop_XvvvvLpp |= (opCode >> (kX86InstOpCode_PP_Shift)); - xop_XvvvvLpp |= (opX >> (kVexVVVVShift - 3)); - xop_XvvvvLpp |= (opX << 4) & 0x80; + xop_XvvvvLpp = (opCode >> (kX86InstOpCode_W_Shift - 7)) & 0x80; + xop_XvvvvLpp += (opCode >> (kX86InstOpCode_L_Shift - 2)) & 0x04; + xop_XvvvvLpp += (opCode >> (kX86InstOpCode_PP_Shift )) & 0x03; + xop_XvvvvLpp += (opReg >> (kVexVVVVShift - 3)); - xop_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x1F; + xop_rxbmmmmm = (opCode >> kX86InstOpCode_MM_Shift) & 0x0F; xop_rxbmmmmm |= (rmReg << 2) & 0x20; xop_rxbmmmmm |= static_cast(opReg & 0x08) << 4; xop_rxbmmmmm ^= 0xE0; xop_XvvvvLpp ^= 0x78; - EMIT_BYTE(kXopByte); + EMIT_BYTE(kX86ByteXop3); EMIT_OP(xop_rxbmmmmm); EMIT_OP(xop_XvvvvLpp); EMIT_OP(opCode); @@ -4076,7 +4120,7 @@ _EmitJmpOrCallAbs: rd.type = kRelocTrampoline; rd.from++; - EMIT_OP(0x40); + EMIT_BYTE(kX86ByteRex); trampolineSize = 8; } } diff --git a/src/asmjit/x86/x86assembler.h b/src/asmjit/x86/x86assembler.h index 223ae4a..715eb73 100644 --- a/src/asmjit/x86/x86assembler.h +++ b/src/asmjit/x86/x86assembler.h @@ -57,16 +57,64 @@ namespace asmjit { return *this; \ } \ \ - /*! Force REX prefix. */ \ + /*! Force REX prefix (X64). */ \ ASMJIT_INLINE _Class_& rex() { \ _instOptions |= kX86InstOptionRex; \ return *this; \ } \ \ - /*! Force 3-byte VEX prefix. */ \ + /*! Force 3-byte VEX prefix (AVX+). */ \ ASMJIT_INLINE _Class_& vex3() { \ _instOptions |= kX86InstOptionVex3; \ return *this; \ + } \ + \ + /*! Force 4-byte EVEX prefix (AVX512+). */ \ + ASMJIT_INLINE _Class_& evex() { \ + _instOptions |= kX86InstOptionEvex; \ + return *this; \ + } \ + \ + /*! Use zeroing instead of merging (AVX512+). */ \ + ASMJIT_INLINE _Class_& z() { \ + _instOptions |= kX86InstOptionEvexZero; \ + return *this; \ + } \ + \ + /*! Broadcast one element to all other elements (AVX512+). */ \ + ASMJIT_INLINE _Class_& _1ToN() { \ + _instOptions |= kX86InstOptionEvexOneN; \ + return *this; \ + } \ + \ + /*! Suppress all exceptions (AVX512+). */ \ + ASMJIT_INLINE _Class_& sae() { \ + _instOptions |= kX86InstOptionEvexSae; \ + return *this; \ + } \ + \ + /*! Static rounding mode `round-to-nearest` (even) and `SAE` (AVX512+). */ \ + ASMJIT_INLINE _Class_& rn_sae() { \ + _instOptions |= kX86InstOptionEvexRnSae; \ + return *this; \ + } \ + \ + /*! Static rounding mode `round-down` (toward -inf) and `SAE` (AVX512+). */ \ + ASMJIT_INLINE _Class_& rd_sae() { \ + _instOptions |= kX86InstOptionEvexRdSae; \ + return *this; \ + } \ + \ + /*! Static rounding mode `round-up` (toward +inf) and `SAE` (AVX512+). */ \ + ASMJIT_INLINE _Class_& ru_sae() { \ + _instOptions |= kX86InstOptionEvexRuSae; \ + return *this; \ + } \ + \ + /*! Static rounding mode `round-toward-zero` (truncate) and `SAE` (AVX512+). */ \ + ASMJIT_INLINE _Class_& rz_sae() { \ + _instOptions |= kX86InstOptionEvexRzSae; \ + return *this; \ } //! X86/X64 assembler. @@ -94,10 +142,10 @@ namespace asmjit { //! ~~~ //! // Use asmjit namespace. //! using namespace asmjit; -//! using namespace asmjit::host; +//! using namespace asmjit::x86; //! -//! // Create Assembler instance. -//! Assembler a; +//! // Create X86Assembler instance. +//! X86Assembler a; //! //! // Prolog. //! a.push(ebp); @@ -115,10 +163,10 @@ namespace asmjit { //! ~~~ //! //! You can see that syntax is very close to Intel one. Only difference is that -//! you are calling functions that emits the binary code for you. All registers -//! are in `asmjit` namespace, so it's very comfortable to use it (look at -//! first line). There is also used method `imm()` to create an immediate value. -//! Use `imm_u()` to create unsigned immediate value. +//! you are calling functions that emit binary code for you. All registers are +//! in `asmjit::x86` namespace, so it's very comfortable to use it (look at the +//! `use namespace` section). Without importing `asmjit::x86` registers would +//! have to be written as `x86::eax`, `x86::esp`, and so on. //! //! There is also possibility to use memory addresses and immediates. Use //! `ptr()`, `byte_ptr()`, `word_ptr()`, `dword_ptr()` and similar functions to @@ -126,14 +174,14 @@ namespace asmjit { //! information related to the operand size is needed only in rare cases, that //! is an instruction without having any register operands, such as `inc [mem]`. //! -//! for example, `a` is `x86::Assembler` instance: +//! for example, `a` is an `X86Assembler` instance: //! //! ~~~ //! a.mov(ptr(eax), 0); // mov ptr [eax], 0 //! a.mov(ptr(eax), edx); // mov ptr [eax], edx //! ~~~ //! -//! But it's also possible to create complex addresses: +//! But it's also possible to create complex addresses offered by x86 architecture: //! //! ~~~ //! // eax + ecx*x addresses @@ -148,10 +196,12 @@ namespace asmjit { //! a.mov(ptr(eax, ecx, 3, 16), 0); // mov ptr [eax + ecx * 8 + 16], 0 //! ~~~ //! -//! All addresses shown are using `ptr()` to make memory operand. Some assembler -//! instructions (single operand ones) needs to have specified memory operand -//! size. For example `a.inc(ptr(eax))` can't be called, because the meaning is -//! ambiguous, see the code below. +//! All addresses shown are using `x86::ptr()` to make memory operand. Some +//! assembler instructions using a single operand need to know the size of +//! the operand to avoid ambiguity. For example `a.inc(ptr(eax))` is ambiguous +//! and would cause a runtime error. This problem can be fixed by using memory +//! operand with size specified - `byte_ptr`, `word_ptr`, `dword_ptr`, see the +//! code below: //! //! ~~~ //! // [byte] address. @@ -163,30 +213,34 @@ namespace asmjit { //! // [dword] address. //! a.inc(dword_ptr(eax)); // Inc dword ptr [eax]. //! a.dec(dword_ptr(eax)); // Dec dword ptr [eax]. +//! // [dword] address. +//! a.inc(dword_ptr(rax)); // Inc qword ptr [rax]. +//! a.dec(dword_ptr(rax)); // Dec qword ptr [rax]. //! ~~~ //! //! Calling JIT Code //! ---------------- //! -//! While you are over from emitting instructions, you can make your function -//! by using `Assembler::make()` method. This method will use memory -//! manager to allocate virtual memory and relocates generated code to it. For -//! memory allocation is used global memory manager by default and memory is -//! freeable, but of course this default behavior can be overridden specifying -//! your memory manager and allocation type. If you want to do with code -//! something else you can always override make() method and do what you want. +//! After you are finished with emitting instructions, you can make your function +//! callable by using `Assembler::make()` method. This method will use memory +//! manager to allocate virtual memory and relocates generated code to it. The +//! memory is allocated through `Runtime` instance provided to `X86Assembler` +//! constructor. //! -//! You can get size of generated code by `getCodeSize()` or `getOffset()` -//! methods. These methods returns you code size or more precisely the current -//! code offset in bytes. The `takeCode()` function can be used to take the -//! internal buffer and reset the code generator, but the buffer taken has to -//! be freed manually in such case. +//! The size of the code generated can be retrieved by `getCodeSize()` and +//! `getOffset()` methods. The `getOffset()` method returns the current offset +//! (that is mostly equal to the final code size, if called after the code +//! generation) and `getCodeSize()` returns the final code size with possible +//! trampolines. The `takeCode()` method can be used to take the internal buffer +//! and reset the code generator, but the buffer returned has to be freed manually +//! in such case. //! //! Machine code can be executed only in memory that is marked executable. This -//! mark is usually not set for memory returned by a C/C++ `malloc` function. -//! The `VMem::alloc()` function can be used allocate a memory where the code can -//! be executed or more preferably `VMemMgr` which has interface -//! similar to `malloc/free` and can allocate chunks of various sizes. +//! mark is usually not set for memory returned by a C/C++ `malloc()` function. +//! The `VMemUtil::alloc()` function can be used allocate a memory where the code +//! can be executed. Please note that `VMemUtil` is a low-level class that works +//! at memory page level. High level interface that is similar to malloc/free is +//! provided by `VMemMgr` class. //! //! The next example shows how to allocate memory where the code can be executed: //! @@ -194,27 +248,28 @@ namespace asmjit { //! using namespace asmjit; //! //! JitRuntime runtime; -//! Assembler a(&runtime); +//! X86Assembler a(&runtime); //! -//! // ... Your code generation ... +//! ... Code generation ... //! -//! // The function prototype +//! // The function prototype. //! typedef void (*MyFunc)(); //! -//! // make your function +//! // Make the function. //! MyFunc func = asmjit_cast(a.make()); //! -//! // call your function +//! // Call the function. //! func(); //! -//! // If you don't need your function again, free it. +//! // Release the function if not needed anymore. //! runtime.release(func); //! ~~~ //! -//! This was a very primitive showing how the generated code can be executed. -//! In production noone will probably generate a function that is only called -//! once and nobody will probably free the function right after it was executed. -//! The code just shows the proper way of code generation and cleanup. +//! This was a very primitive example showing how the generated code can be. +//! executed by using the foundation of classes AsmJit offers. In production +//! nobody is likely to generate a function that is only called once and freed +//! immediately after it's been called, however, the concept of releasing code +//! that is not needed anymore should be clear. //! //! Labels //! ------ @@ -278,7 +333,7 @@ namespace asmjit { //! a.mov(esp, ebp); //! a.pop(ebp); //! -//! // Return: STDCALL convention is to pop stack in called function. +//! // Return: Pop the stack by `arg_size` as defined by `STDCALL` convention. //! a.ret(arg_size); //! ~~~ //! @@ -315,13 +370,13 @@ namespace asmjit { //! Next, more advanced, but often needed technique is that you can build your //! own registers allocator. X86 architecture contains 8 general purpose //! registers, 8 Mm registers and 8 Xmm/Ymm/Zmm registers. X64 architecture -//! extends the count of Gp registers and Xmm/Ymm/Zmm registers to 16 or 32 -//! when AVX512 is available. +//! extends the count of Gp registers and Xmm/Ymm/Zmm registers to 16. AVX-512 +//! architecture extends Xmm/Ymm/Zmm SIMD registers to 32. //! //! To create a general purpose register operand from register index use //! `gpb_lo()`, `gpb_hi()`, `gpw()`, `gpd()`, `gpq()`. To create registers of -//! other types there are functions `fp()`, `mm()`, `xmm()`, `ymm()` and `zmm()` -//! available. +//! other types there `fp()`, `mm()`, `k()`, `xmm()`, `ymm()` and `zmm()` +//! functions available that return a new register operand. //! //! \sa X86Compiler. struct ASMJIT_VCLASS X86Assembler : public Assembler { @@ -340,7 +395,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { // [Arch] // -------------------------------------------------------------------------- - //! Get count of registers of the current architecture. + //! Get count of registers of the current architecture and mode. ASMJIT_INLINE const X86RegCount& getRegCount() const { return _regCount; } @@ -478,7 +533,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { X86GpReg zdi; // -------------------------------------------------------------------------- - // [Base Instructions] + // [Emit] // -------------------------------------------------------------------------- #define INST_0x(_Inst_, _Code_) \ @@ -654,6 +709,30 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { return emit(_Code_, o0, o1, o2); \ } +#define INST_3ii(_Inst_, _Code_, _Op0_, _Op1_, _Op2_) \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2) { \ + return emit(_Code_, o0, o1, o2); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, int o1, int o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, o2); \ + } \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, unsigned int o1, unsigned int o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, static_cast(o2)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, int64_t o1, int64_t o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, static_cast(o2)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, uint64_t o1, uint64_t o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, o2); \ + } + #define INST_4x(_Inst_, _Code_, _Op0_, _Op1_, _Op2_, _Op3_) \ ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2, const _Op3_& o3) { \ return emit(_Code_, o0, o1, o2, o3); \ @@ -686,6 +765,35 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { return emit(_Code_, o0, o1, o2, o3); \ } +#define INST_4ii(_Inst_, _Code_, _Op0_, _Op1_, _Op2_, _Op3_) \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2, const _Op3_& o3) { \ + return emit(_Code_, o0, o1, o2, o3); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, int o2, int o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, o3); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, unsigned int o2, unsigned int o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, static_cast(o3)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, int64_t o2, int64_t o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, static_cast(o3)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE Error _Inst_(const _Op0_& o0, const _Op1_& o1, uint64_t o2, uint64_t o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, o3); \ + } + + // -------------------------------------------------------------------------- + // [X86/X64] + // -------------------------------------------------------------------------- + //! Add with Carry. INST_2x(adc, kX86InstIdAdc, X86GpReg, X86GpReg) //! \overload @@ -837,11 +945,6 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! CPU identification (i486). INST_0x(cpuid, kX86InstIdCpuid) - //! Accumulate crc32 value (polynomial 0x11EDC6F41) (SSE4.2). - INST_2x_(crc32, kX86InstIdCrc32, X86GpReg, X86GpReg, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) - //! \overload - INST_2x_(crc32, kX86InstIdCrc32, X86GpReg, X86Mem, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) - //! Decimal adjust AL after addition (X86 Only). INST_0x(daa, kX86InstIdDaa) //! Decimal adjust AL after subtraction (X86 Only). @@ -1037,11 +1140,6 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! Pop stack into EFLAGS register (32-bit or 64-bit). INST_0x(popf, kX86InstIdPopf) - //! Return the count of number of bits set to 1 (SSE4.2). - INST_2x_(popcnt, kX86InstIdPopcnt, X86GpReg, X86GpReg, !o0.isGpb() && o0.getRegType() == o1.getRegType()) - //! \overload - INST_2x_(popcnt, kX86InstIdPopcnt, X86GpReg, X86Mem, !o0.isGpb()) - //! Push WORD or DWORD/QWORD on the stack. INST_1x_(push, kX86InstIdPush, X86GpReg, o0.getSize() == 2 || o0.getSize() == _regSize) //! Push WORD or DWORD/QWORD on the stack. @@ -1329,273 +1427,277 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { INST_2i(xor_, kX86InstIdXor, X86Mem, Imm) // -------------------------------------------------------------------------- - // [Fpu] + // [FPU] // -------------------------------------------------------------------------- - //! Compute 2^x - 1 (FPU). + //! Compute `2^x - 1` - `fp0 = POW(2, fp0) - 1` (FPU). INST_0x(f2xm1, kX86InstIdF2xm1) - //! Absolute value of fp0 (FPU). + //! Abs `fp0 = ABS(fp0)` (FPU). INST_0x(fabs, kX86InstIdFabs) - //! Add `o1` to `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Add `o0 = o0 + o1` (one operand has to be `fp0`) (FPU). INST_2x_(fadd, kX86InstIdFadd, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Add 4-byte or 8-byte FP `o0` to fp0 and store result in fp0 (FPU). + //! Add `fp0 = fp0 + float_or_double[o0]` (FPU). INST_1x(fadd, kX86InstIdFadd, X86Mem) - //! Add fp0 to `o0` and pop the FPU stack (FPU). + //! Add `o0 = o0 + fp0` and POP (FPU). INST_1x(faddp, kX86InstIdFaddp, X86FpReg) - //! \overload + //! Add `fp1 = fp1 + fp0` and POP (FPU). INST_0x(faddp, kX86InstIdFaddp) - //! Load binary coded decimal (FPU). + //! Load BCD from `[o0]` and PUSH (FPU). INST_1x(fbld, kX86InstIdFbld, X86Mem) - //! Store BCD integer and Pop (FPU). + //! Store BCD-Integer to `[o0]` and POP (FPU). INST_1x(fbstp, kX86InstIdFbstp, X86Mem) - //! Change fp0 sign (FPU). + + //! Complement Sign `fp0 = -fp0` (FPU). INST_0x(fchs, kX86InstIdFchs) + //! Clear exceptions (FPU). INST_0x(fclex, kX86InstIdFclex) - //! Conditional move (FPU). + //! Conditional move `if (CF=1) fp0 = o0` (FPU). INST_1x(fcmovb, kX86InstIdFcmovb, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF|ZF=1) fp0 = o0` (FPU). INST_1x(fcmovbe, kX86InstIdFcmovbe, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (ZF=1) fp0 = o0` (FPU). INST_1x(fcmove, kX86InstIdFcmove, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF=0) fp0 = o0` (FPU). INST_1x(fcmovnb, kX86InstIdFcmovnb, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF|ZF=0) fp0 = o0` (FPU). INST_1x(fcmovnbe, kX86InstIdFcmovnbe, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (ZF=0) fp0 = o0` (FPU). INST_1x(fcmovne, kX86InstIdFcmovne, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (PF=0) fp0 = o0` (FPU). INST_1x(fcmovnu, kX86InstIdFcmovnu, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (PF=1) fp0 = o0` (FPU). INST_1x(fcmovu, kX86InstIdFcmovu, X86FpReg) - //! Compare fp0 with `o0` (FPU). + //! Compare `fp0` with `o0` (FPU). INST_1x(fcom, kX86InstIdFcom, X86FpReg) - //! Compare fp0 with fp1 (FPU). + //! Compare `fp0` with `fp1` (FPU). INST_0x(fcom, kX86InstIdFcom) - //! Compare fp0 with 4-byte or 8-byte FP at `src` (FPU). + //! Compare `fp0` with `float_or_double[o0]` (FPU). INST_1x(fcom, kX86InstIdFcom, X86Mem) - //! Compare fp0 with `o0` and pop the FPU stack (FPU). + //! Compare `fp0` with `o0` and POP (FPU). INST_1x(fcomp, kX86InstIdFcomp, X86FpReg) - //! Compare fp0 with fp1 and pop the FPU stack (FPU). + //! Compare `fp0` with `fp1` and POP (FPU). INST_0x(fcomp, kX86InstIdFcomp) - //! Compare fp0 with 4-byte or 8-byte FP at `adr` and pop the FPU stack (FPU). + //! Compare `fp0` with `float_or_double[o0]` and POP (FPU). INST_1x(fcomp, kX86InstIdFcomp, X86Mem) - //! Compare fp0 with fp1 and pop the FPU stack twice (FPU). + //! Compare `fp0` with `fp1` and POP twice (FPU). INST_0x(fcompp, kX86InstIdFcompp) - //! Compare fp0 and `o0` and Set EFLAGS (FPU). + //! Compare `fp0` with `o0` and set EFLAGS (FPU). INST_1x(fcomi, kX86InstIdFcomi, X86FpReg) - //! Compare fp0 and `o0` and Set EFLAGS and pop the FPU stack (FPU). + //! Compare `fp0` with `o0` and set EFLAGS and POP (FPU). INST_1x(fcomip, kX86InstIdFcomip, X86FpReg) - //! Calculate cosine of fp0 and store result in fp0 (FPU). + //! Cos `fp0 = cos(fp0)` (FPU). INST_0x(fcos, kX86InstIdFcos) - //! Decrement FPU stack-top pointer (FPU). + + //! Decrement FPU stack pointer (FPU). INST_0x(fdecstp, kX86InstIdFdecstp) - //! Divide `o0` by `o1` (one has to be `fp0`) (FPU). + //! Divide `o0 = o0 / o1` (one has to be `fp0`) (FPU). INST_2x_(fdiv, kX86InstIdFdiv, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Divide fp0 by 32-bit or 64-bit FP value (FPU). + //! Divide `fp0 = fp0 / float_or_double[o0]` (FPU). INST_1x(fdiv, kX86InstIdFdiv, X86Mem) - //! Divide `o0` by fp0 (FPU). + //! Divide `o0 = o0 / fp0` and POP (FPU). INST_1x(fdivp, kX86InstIdFdivp, X86FpReg) - //! \overload + //! Divide `fp1 = fp1 / fp0` and POP (FPU). INST_0x(fdivp, kX86InstIdFdivp) - //! Reverse divide `o0` by `o1` (one has to be `fp0`) (FPU). + //! Reverse divide `o0 = o1 / o0` (one has to be `fp0`) (FPU). INST_2x_(fdivr, kX86InstIdFdivr, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Reverse divide fp0 by 32-bit or 64-bit FP value (FPU). + //! Reverse divide `fp0 = float_or_double[o0] / fp0` (FPU). INST_1x(fdivr, kX86InstIdFdivr, X86Mem) - //! Reverse divide `o0` by fp0 (FPU). + //! Reverse divide `o0 = fp0 / o0` and POP (FPU). INST_1x(fdivrp, kX86InstIdFdivrp, X86FpReg) - //! \overload + //! Reverse divide `fp1 = fp0 / fp1` and POP (FPU). INST_0x(fdivrp, kX86InstIdFdivrp) //! Free FP register (FPU). INST_1x(ffree, kX86InstIdFfree, X86FpReg) - //! Add 16-bit or 32-bit integer to fp0 (FPU). + //! Add `fp0 = fp0 + short_or_int[o0]` (FPU). INST_1x_(fiadd, kX86InstIdFiadd, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Compare fp0 with 16-bit or 32-bit Integer (FPU). + //! Compare `fp0` with `short_or_int[o0]` (FPU). INST_1x_(ficom, kX86InstIdFicom, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Compare fp0 with 16-bit or 32-bit Integer and pop the FPU stack (FPU). + //! Compare `fp0` with `short_or_int[o0]` and POP (FPU). INST_1x_(ficomp, kX86InstIdFicomp, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Divide fp0 by 32-bit or 16-bit integer (`src`) (FPU). + //! Divide `fp0 = fp0 / short_or_int[o0]` (FPU). INST_1x_(fidiv, kX86InstIdFidiv, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Reverse divide fp0 by 32-bit or 16-bit integer (`src`) (FPU). + //! Reverse divide `fp0 = short_or_int[o0] / fp0` (FPU). INST_1x_(fidivr, kX86InstIdFidivr, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Load 16-bit, 32-bit or 64-bit Integer and push it to the FPU stack (FPU). + //! Load `short_or_int_or_long[o0]` and PUSH (FPU). INST_1x_(fild, kX86InstIdFild, X86Mem, o0.getSize() == 2 || o0.getSize() == 4 || o0.getSize() == 8) - //! Multiply fp0 by 16-bit or 32-bit integer and store it to fp0 (FPU). + //! Multiply `fp0 *= short_or_int[o0]` (FPU). INST_1x_(fimul, kX86InstIdFimul, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Increment FPU stack-top pointer (FPU). + //! Increment FPU stack pointer (FPU). INST_0x(fincstp, kX86InstIdFincstp) //! Initialize FPU (FPU). INST_0x(finit, kX86InstIdFinit) - //! Subtract 16-bit or 32-bit integer from fp0 and store result to fp0 (FPU). + //! Subtract `fp0 = fp0 - short_or_int[o0]` (FPU). INST_1x_(fisub, kX86InstIdFisub, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Reverse subtract 16-bit or 32-bit integer from fp0 and store result to fp0 (FPU). + //! Reverse subtract `fp0 = short_or_int[o0] - fp0` (FPU). INST_1x_(fisubr, kX86InstIdFisubr, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) //! Initialize FPU without checking for pending unmasked exceptions (FPU). INST_0x(fninit, kX86InstIdFninit) - //! Store fp0 as 16-bit or 32-bit Integer to `o0` (FPU). + //! Store `fp0` as `short_or_int[o0]` (FPU). INST_1x_(fist, kX86InstIdFist, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Store fp0 as 16-bit, 32-bit or 64-bit Integer to `o0` and pop the FPU stack (FPU). + //! Store `fp0` as `short_or_int_or_long[o0]` and POP (FPU). INST_1x_(fistp, kX86InstIdFistp, X86Mem, o0.getSize() == 2 || o0.getSize() == 4 || o0.getSize() == 8) - //! Push 32-bit, 64-bit or 80-bit floating point value on the FPU stack (FPU). + + //! Load `float_or_double_or_extended[o0]` and PUSH (FPU). INST_1x_(fld, kX86InstIdFld, X86Mem, o0.getSize() == 4 || o0.getSize() == 8 || o0.getSize() == 10) - //! Push `o0` on the FPU stack (FPU). + //! PUSH `o0` (FPU). INST_1x(fld, kX86InstIdFld, X86FpReg) - //! Push +1.0 on the FPU stack (FPU). + //! PUSH `1.0` (FPU). INST_0x(fld1, kX86InstIdFld1) - //! Push log2(10) on the FPU stack (FPU). + //! PUSH `log2(10)` (FPU). INST_0x(fldl2t, kX86InstIdFldl2t) - //! Push log2(e) on the FPU stack (FPU). + //! PUSH `log2(e)` (FPU). INST_0x(fldl2e, kX86InstIdFldl2e) - //! Push pi on the FPU stack (FPU). + //! PUSH `pi` (FPU). INST_0x(fldpi, kX86InstIdFldpi) - //! Push log10(2) on the FPU stack (FPU). + //! PUSH `log10(2)` (FPU). INST_0x(fldlg2, kX86InstIdFldlg2) - //! Push ln(2) on the FPU stack (FPU). + //! PUSH `ln(2)` (FPU). INST_0x(fldln2, kX86InstIdFldln2) - //! Push +0.0 on the FPU stack (FPU). + //! PUSH `+0.0` (FPU). INST_0x(fldz, kX86InstIdFldz) - //! Load x87 FPU control word (2 bytes) (FPU). + //! Load x87 FPU control word from `word_ptr[o0]` (FPU). INST_1x(fldcw, kX86InstIdFldcw, X86Mem) - //! Load x87 FPU environment (14 or 28 bytes) (FPU). + //! Load x87 FPU environment (14 or 28 bytes) from `[o0]` (FPU). INST_1x(fldenv, kX86InstIdFldenv, X86Mem) - //! Multiply `o0` by `o1` (one has to be `fp0`) and store result in `o0` (FPU). + //! Multiply `o0 = o0 * o1` (one has to be `fp0`) (FPU). INST_2x_(fmul, kX86InstIdFmul, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Multiply fp0 by 32-bit or 64-bit `o0` and store result in fp0 (FPU). + //! Multiply `fp0 = fp0 * float_or_double[o0]` (FPU). INST_1x(fmul, kX86InstIdFmul, X86Mem) - //! Multiply fp0 by `o0` and pop the FPU stack (FPU). + //! Multiply `o0 = o0 * fp0` and POP (FPU). INST_1x(fmulp, kX86InstIdFmulp, X86FpReg) - //! \overload + //! Multiply `fp1 = fp1 * fp0` and POP (FPU). INST_0x(fmulp, kX86InstIdFmulp) //! Clear exceptions (FPU). INST_0x(fnclex, kX86InstIdFnclex) //! No operation (FPU). INST_0x(fnop, kX86InstIdFnop) - //! Save FPU state (FPU). + //! Save FPU state to `[o0]` (FPU). INST_1x(fnsave, kX86InstIdFnsave, X86Mem) - //! Store x87 FPU environment (FPU). + //! Store x87 FPU environment to `[o0]` (FPU). INST_1x(fnstenv, kX86InstIdFnstenv, X86Mem) - //! Store x87 FPU control word (FPU). + //! Store x87 FPU control word to `[o0]` (FPU). INST_1x(fnstcw, kX86InstIdFnstcw, X86Mem) //! Store x87 FPU status word to `o0` (AX) (FPU). INST_1x_(fnstsw, kX86InstIdFnstsw, X86GpReg, o0.isRegCode(kX86RegTypeGpw, kX86RegIndexAx)) - //! Store x87 FPU status word to `o0` (2 bytes) (FPU). + //! Store x87 FPU status word to `word_ptr[o0]` (FPU). INST_1x(fnstsw, kX86InstIdFnstsw, X86Mem) - //! Arctan(`fp1` / `fp0`) and pop the FPU stack (FPU). + //! Partial Arctan `fp1 = atan2(fp1, fp0)` and POP (FPU). INST_0x(fpatan, kX86InstIdFpatan) - //! Fprem(`fp0`, `fp1`) and pop the FPU stack (FPU). + //! Partial Remainder[Trunc] `fp1 = fp0 % fp1` and POP (FPU). INST_0x(fprem, kX86InstIdFprem) - //! Fprem(`fp0`, `fp1`) and pop the FPU stack (FPU). + //! Partial Remainder[Round] `fp1 = fp0 % fp1` and POP (FPU). INST_0x(fprem1, kX86InstIdFprem1) - //! Arctan(`fp0`) and pop the FPU stack (FPU). + //! Partial Tan `fp0 = tan(fp0)` and PUSH `1.0` (FPU). INST_0x(fptan, kX86InstIdFptan) - //! Round `fp0` to Integer (FPU). + //! Round `fp0 = round(fp0)` (FPU). INST_0x(frndint, kX86InstIdFrndint) - //! Restore FPU state from `o0` (94 or 108 bytes) (FPU). + //! Restore FPU state from `[o0]` (94 or 108 bytes) (FPU). INST_1x(frstor, kX86InstIdFrstor, X86Mem) - //! Save FPU state to `o0` (94 or 108 bytes) (FPU). + //! Save FPU state to `[o0]` (94 or 108 bytes) (FPU). INST_1x(fsave, kX86InstIdFsave, X86Mem) - //! Scale `fp0` by `fp1` (FPU). + //! Scale `fp0 = fp0 * pow(2, RoundTowardsZero(fp1))` (FPU). INST_0x(fscale, kX86InstIdFscale) - //! Sine of `fp0` and store result in `fp0` (FPU). + //! Sin `fp0 = sin(fp0)` (FPU). INST_0x(fsin, kX86InstIdFsin) - //! Sine and cosine of `fp0`, store sine in `fp0` and push cosine on the FPU stack (FPU). + //! Sincos `fp0 = sin(fp0)` and PUSH `cos(fp0)` (FPU). INST_0x(fsincos, kX86InstIdFsincos) - //! Square root of `fp0` and store it in `fp0` (FPU). + //! Square root `fp0 = sqrt(fp0)` (FPU). INST_0x(fsqrt, kX86InstIdFsqrt) - //! Store floating point value to 32-bit or 64-bit memory location (FPU). + //! Store floating point value to `float_or_double[o0]` (FPU). INST_1x_(fst, kX86InstIdFst, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Store floating point value to `o0` (FPU). + //! Copy `o0 = fp0` (FPU). INST_1x(fst, kX86InstIdFst, X86FpReg) - //! Store floating point value to 32-bit or 64-bit memory location and pop the FPU stack (FPU). + //! Store floating point value to `float_or_double_or_extended[o0]` and POP (FPU). INST_1x_(fstp, kX86InstIdFstp, X86Mem, o0.getSize() == 4 || o0.getSize() == 8 || o0.getSize() == 10) - //! Store floating point value to `o0` and pop the FPU stack (FPU). + //! Copy `o0 = fp0` and POP (FPU). INST_1x(fstp, kX86InstIdFstp, X86FpReg) - //! Store x87 FPU control word to `o0` (2 bytes) (FPU). + //! Store x87 FPU control word to `word_ptr[o0]` (FPU). INST_1x(fstcw, kX86InstIdFstcw, X86Mem) - //! Store x87 FPU environment to `o0` (14 or 28 bytes) (FPU). + //! Store x87 FPU environment to `[o0]` (14 or 28 bytes) (FPU). INST_1x(fstenv, kX86InstIdFstenv, X86Mem) - //! Store x87 FPU status word to AX (FPU). + //! Store x87 FPU status word to `o0` (AX) (FPU). INST_1x_(fstsw, kX86InstIdFstsw, X86GpReg, o0.getRegIndex() == kX86RegIndexAx) - //! Store x87 FPU status word (2 bytes) (FPU). + //! Store x87 FPU status word to `word_ptr[o0]` (FPU). INST_1x(fstsw, kX86InstIdFstsw, X86Mem) - //! Subtract `o0` from `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Subtract `o0 = o0 - o1` (one has to be `fp0`) (FPU). INST_2x_(fsub, kX86InstIdFsub, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Subtract 32-bit or 64-bit `o0` from fp0 and store result in fp0 (FPU). + //! Subtract `fp0 = fp0 - float_or_double[o0]` (FPU). INST_1x_(fsub, kX86InstIdFsub, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Subtract fp0 from `o0` and pop FPU stack (FPU). + //! Subtract `o0 = o0 - fp0` and POP (FPU). INST_1x(fsubp, kX86InstIdFsubp, X86FpReg) - //! \overload + //! Subtract `fp1 = fp1 - fp0` and POP (FPU). INST_0x(fsubp, kX86InstIdFsubp) - //! Reverse subtract `o1` from `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Reverse subtract `o0 = o1 - o0` (one has to be `fp0`) (FPU). INST_2x_(fsubr, kX86InstIdFsubr, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Reverse subtract 32-bit or 64-bit `o0` from `fp0` and store result in `fp0` (FPU). + //! Reverse subtract `fp0 = fp0 - float_or_double[o0]` (FPU). INST_1x_(fsubr, kX86InstIdFsubr, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Reverse subtract `fp0` from `o0` and pop FPU stack (FPU). + //! Reverse subtract `o0 = o0 - fp0` and POP (FPU). INST_1x(fsubrp, kX86InstIdFsubrp, X86FpReg) - //! \overload + //! Reverse subtract `fp1 = fp1 - fp0` and POP (FPU). INST_0x(fsubrp, kX86InstIdFsubrp) - //! Floating point test - Compare `fp0` with 0.0. (FPU). + //! Compare `fp0` with `0.0` (FPU). INST_0x(ftst, kX86InstIdFtst) //! Unordered compare `fp0` with `o0` (FPU). INST_1x(fucom, kX86InstIdFucom, X86FpReg) //! Unordered compare `fp0` with `fp1` (FPU). INST_0x(fucom, kX86InstIdFucom) - //! Unordered compare `fp0` and `o0`, check for ordered values and set EFLAGS (FPU). + //! Unordered compare `fp0` with `o0`, check for ordered values and set EFLAGS (FPU). INST_1x(fucomi, kX86InstIdFucomi, X86FpReg) - //! Unordered compare `fp0` and `o0`, check for ordered values and set EFLAGS and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `o0`, check for ordered values and set EFLAGS and POP (FPU). INST_1x(fucomip, kX86InstIdFucomip, X86FpReg) - //! Unordered compare `fp0` with `o0` and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `o0` and POP (FPU). INST_1x(fucomp, kX86InstIdFucomp, X86FpReg) - //! Unordered compare `fp0` with `fp1` and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `fp1` and POP (FPU). INST_0x(fucomp, kX86InstIdFucomp) - //! Unordered compare `fp0` with `fp1` and pop the FPU stack twice (FPU). + //! Unordered compare `fp0` with `fp1` and POP twice (FPU). INST_0x(fucompp, kX86InstIdFucompp) INST_0x(fwait, kX86InstIdFwait) //! Examine fp0 (FPU). INST_0x(fxam, kX86InstIdFxam) - //! Exchange content of fp0 with `o0` (FPU). + //! Exchange `fp0` with `o0` (FPU). INST_1x(fxch, kX86InstIdFxch, X86FpReg) //! Restore FP/MMX/SIMD extension states to `o0` (512 bytes) (FPU, MMX, SSE). INST_1x(fxrstor, kX86InstIdFxrstor, X86Mem) //! Store FP/MMX/SIMD extension states to `o0` (512 bytes) (FPU, MMX, SSE). INST_1x(fxsave, kX86InstIdFxsave, X86Mem) - //! Extract exponent and store to `fp0` and push significand on the FPU stack (FPU). + //! Extract `fp0 = exponent(fp0)` and PUSH `significant(fp0)` (FPU). INST_0x(fxtract, kX86InstIdFxtract) - //! Compute `fp1 * log2(fp0)`, pop the FPU stack and store result in `fp0` (FPU). + //! Compute `fp1 = fp1 * log2(fp0)` and POP (FPU). INST_0x(fyl2x, kX86InstIdFyl2x) - //! Compute `fp1 * log2(fp0 + 1)`, pop the FPU stack and store result in `fp0` (FPU). + //! Compute `fp1 = fp1 * log2(fp0 + 1)` and POP (FPU). INST_0x(fyl2xp1, kX86InstIdFyl2xp1) // -------------------------------------------------------------------------- @@ -2356,12 +2458,12 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(cvtdq2ps, kX86InstIdCvtdq2ps, X86XmmReg, X86Mem) - //! Convert packed DP-FP to packed QWORDs (SSE2). + //! Convert packed DP-FP to packed DWORDs (SSE2). INST_2x(cvtpd2dq, kX86InstIdCvtpd2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(cvtpd2dq, kX86InstIdCvtpd2dq, X86XmmReg, X86Mem) - //! Convert packed DP-FP to packed QRODSs (SSE2). + //! Convert packed DP-FP to packed DWORDs (SSE2). INST_2x(cvtpd2pi, kX86InstIdCvtpd2pi, X86MmReg, X86XmmReg) //! \overload INST_2x(cvtpd2pi, kX86InstIdCvtpd2pi, X86MmReg, X86Mem) @@ -2376,7 +2478,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(cvtpi2pd, kX86InstIdCvtpi2pd, X86XmmReg, X86Mem) - //! Convert packed SP-FP to packed QWORDs (SSE2). + //! Convert packed SP-FP to packed DWORDs (SSE2). INST_2x(cvtps2dq, kX86InstIdCvtps2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(cvtps2dq, kX86InstIdCvtps2dq, X86XmmReg, X86Mem) @@ -2411,12 +2513,12 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(cvttpd2pi, kX86InstIdCvttpd2pi, X86MmReg, X86Mem) - //! Convert with truncation packed DP-FP to packed QWORDs (SSE2). + //! Convert with truncation packed DP-FP to packed DWORDs (SSE2). INST_2x(cvttpd2dq, kX86InstIdCvttpd2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(cvttpd2dq, kX86InstIdCvttpd2dq, X86XmmReg, X86Mem) - //! Convert with truncation packed SP-FP to packed QWORDs (SSE2). + //! Convert with truncation packed SP-FP to packed DWORDs (SSE2). INST_2x(cvttps2dq, kX86InstIdCvttps2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(cvttps2dq, kX86InstIdCvttps2dq, X86XmmReg, X86Mem) @@ -2951,8 +3053,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(addsubps, kX86InstIdAddsubps, X86XmmReg, X86Mem) - //! Store truncated `fp0` as 16-bit, 32-bit or 64-bit integer to `o0` and pop - //! the FPU stack (FPU / SSE3). + //! Store truncated `fp0` to `short_or_int_or_long[o0]` and POP (FPU & SSE3). INST_1x(fisttp, kX86InstIdFisttp, X86Mem) //! Packed DP-FP horizontal add (SSE3). @@ -3412,6 +3513,11 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { // [SSE4.2] // -------------------------------------------------------------------------- + //! Accumulate crc32 value (polynomial 0x11EDC6F41) (SSE4.2). + INST_2x_(crc32, kX86InstIdCrc32, X86GpReg, X86GpReg, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) + //! \overload + INST_2x_(crc32, kX86InstIdCrc32, X86GpReg, X86Mem, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) + //! Packed compare explicit length strings, return index (SSE4.2). INST_3i(pcmpestri, kX86InstIdPcmpestri, X86XmmReg, X86XmmReg, Imm) //! \overload @@ -3437,6 +3543,43 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(pcmpgtq, kX86InstIdPcmpgtq, X86XmmReg, X86Mem) + // -------------------------------------------------------------------------- + // [SSE4a] + // -------------------------------------------------------------------------- + + //! Extract Field (SSE4a). + INST_2x(extrq, kX86InstIdExtrq, X86XmmReg, X86XmmReg) + //! Extract Field (SSE4a). + INST_3ii(extrq, kX86InstIdExtrq, X86XmmReg, Imm, Imm) + + //! Insert Field (SSE4a). + INST_2x(insertq, kX86InstIdInsertq, X86XmmReg, X86XmmReg) + //! Insert Field (SSE4a). + INST_4ii(insertq, kX86InstIdInsertq, X86XmmReg, X86XmmReg, Imm, Imm) + + //! Move Non-Temporal Scalar DP-FP (SSE4a). + INST_2x(movntsd, kX86InstIdMovntsd, X86Mem, X86XmmReg) + //! Move Non-Temporal Scalar SP-FP (SSE4a). + INST_2x(movntss, kX86InstIdMovntss, X86Mem, X86XmmReg) + + // -------------------------------------------------------------------------- + // [POPCNT] + // -------------------------------------------------------------------------- + + //! Return the count of number of bits set to 1 (POPCNT). + INST_2x_(popcnt, kX86InstIdPopcnt, X86GpReg, X86GpReg, !o0.isGpb() && o0.getRegType() == o1.getRegType()) + //! \overload + INST_2x_(popcnt, kX86InstIdPopcnt, X86GpReg, X86Mem, !o0.isGpb()) + + // -------------------------------------------------------------------------- + // [LZCNT] + // -------------------------------------------------------------------------- + + //! Count the number of leading zero bits (LZCNT). + INST_2x(lzcnt, kX86InstIdLzcnt, X86GpReg, X86GpReg) + //! \overload + INST_2x(lzcnt, kX86InstIdLzcnt, X86GpReg, X86Mem) + // -------------------------------------------------------------------------- // [AESNI] // -------------------------------------------------------------------------- @@ -3480,6 +3623,30 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_3i(pclmulqdq, kX86InstIdPclmulqdq, X86XmmReg, X86Mem, Imm) + // -------------------------------------------------------------------------- + // [XSAVE] + // -------------------------------------------------------------------------- + + //! Restore Processor Extended States specified by `EDX:EAX` (XSAVE). + INST_1x(xrstor, kX86InstIdXrstor, X86Mem) + //! Restore Processor Extended States specified by `EDX:EAX` (XSAVE&X64). + INST_1x(xrstor64, kX86InstIdXrstor64, X86Mem) + + //! Save Processor Extended States specified by `EDX:EAX` (XSAVE). + INST_1x(xsave, kX86InstIdXsave, X86Mem) + //! Save Processor Extended States specified by `EDX:EAX` (XSAVE&X64). + INST_1x(xsave64, kX86InstIdXsave64, X86Mem) + + //! Save Processor Extended States specified by `EDX:EAX` (Optimized) (XSAVEOPT). + INST_1x(xsaveopt, kX86InstIdXsave, X86Mem) + //! Save Processor Extended States specified by `EDX:EAX` (Optimized) (XSAVEOPT&X64). + INST_1x(xsaveopt64, kX86InstIdXsave64, X86Mem) + + //! Get XCR - `EDX:EAX <- XCR[ECX]` (XSAVE). + INST_0x(xgetbv, kX86InstIdXgetbv) + //! Set XCR - `XCR[ECX] <- EDX:EAX` (XSAVE). + INST_0x(xsetbv, kX86InstIdXsetbv) + // -------------------------------------------------------------------------- // [AVX] // -------------------------------------------------------------------------- @@ -3667,7 +3834,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(vcvtdq2ps, kX86InstIdVcvtdq2ps, X86YmmReg, X86Mem) - //! Convert packed DP-FP to packed QWORDs (AVX). + //! Convert packed DP-FP to packed DWORDs (AVX). INST_2x(vcvtpd2dq, kX86InstIdVcvtpd2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(vcvtpd2dq, kX86InstIdVcvtpd2dq, X86XmmReg, X86YmmReg) @@ -3681,7 +3848,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(vcvtpd2ps, kX86InstIdVcvtpd2ps, X86XmmReg, X86Mem) - //! Convert packed SP-FP to packed QWORDs (AVX). + //! Convert packed SP-FP to packed DWORDs (AVX). INST_2x(vcvtps2dq, kX86InstIdVcvtps2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(vcvtps2dq, kX86InstIdVcvtps2dq, X86XmmReg, X86Mem) @@ -3729,14 +3896,14 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(vcvtss2si, kX86InstIdVcvtss2si, X86GpReg, X86Mem) - //! Convert with truncation packed DP-FP to packed QWORDs (AVX). + //! Convert with truncation packed DP-FP to packed DWORDs (AVX). INST_2x(vcvttpd2dq, kX86InstIdVcvttpd2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(vcvttpd2dq, kX86InstIdVcvttpd2dq, X86XmmReg, X86YmmReg) //! \overload INST_2x(vcvttpd2dq, kX86InstIdVcvttpd2dq, X86XmmReg, X86Mem) - //! Convert with truncation packed SP-FP to packed QWORDs (AVX). + //! Convert with truncation packed SP-FP to packed DWORDs (AVX). INST_2x(vcvttps2dq, kX86InstIdVcvttps2dq, X86XmmReg, X86XmmReg) //! \overload INST_2x(vcvttps2dq, kX86InstIdVcvttps2dq, X86XmmReg, X86Mem) @@ -3745,7 +3912,7 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(vcvttps2dq, kX86InstIdVcvttps2dq, X86YmmReg, X86Mem) - //! Convert with truncation scalar DP-FP to DWORD (AVX). + //! Convert with truncation scalar DP-FP to INT32 (AVX). INST_2x(vcvttsd2si, kX86InstIdVcvttsd2si, X86GpReg, X86XmmReg) //! \overload INST_2x(vcvttsd2si, kX86InstIdVcvttsd2si, X86GpReg, X86Mem) @@ -6393,15 +6560,6 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { //! \overload INST_2x(tzcnt, kX86InstIdTzcnt, X86GpReg, X86Mem) - // -------------------------------------------------------------------------- - // [LZCNT] - // -------------------------------------------------------------------------- - - //! Count the number of leading zero bits (LZCNT). - INST_2x(lzcnt, kX86InstIdLzcnt, X86GpReg, X86GpReg) - //! \overload - INST_2x(lzcnt, kX86InstIdLzcnt, X86GpReg, X86Mem) - // -------------------------------------------------------------------------- // [BMI2] // -------------------------------------------------------------------------- @@ -6450,11 +6608,11 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { // [RDRAND] // -------------------------------------------------------------------------- - //! Store a random number in destination register. + //! Store a random number in destination register (RDRAND). //! //! Please do not use this instruction in cryptographic software. The result - //! doesn't necessarily have to be random which may cause a major security - //! issue in the software that relies on it. + //! doesn't necessarily have to be random, which may cause a major security + //! hole in the software. INST_1x(rdrand, kX86InstIdRdrand, X86GpReg) // -------------------------------------------------------------------------- @@ -6503,10 +6661,12 @@ struct ASMJIT_VCLASS X86Assembler : public Assembler { #undef INST_3x #undef INST_3x_ #undef INST_3i +#undef INST_3ii #undef INST_4x #undef INST_4x_ #undef INST_4i +#undef INST_4ii }; //! \} diff --git a/src/asmjit/x86/x86compiler.cpp b/src/asmjit/x86/x86compiler.cpp index d82efda..ec6196f 100644 --- a/src/asmjit/x86/x86compiler.cpp +++ b/src/asmjit/x86/x86compiler.cpp @@ -60,14 +60,18 @@ const X86VarInfo _x86VarInfo[] = { /* 10: kVarTypeFp32 */ { kX86RegTypeFp , 4 , C(Fp) , D(Sp) , "fp" }, /* 11: kVarTypeFp64 */ { kX86RegTypeFp , 8 , C(Fp) , D(Dp) , "fp" }, /* 12: kX86VarTypeMm */ { kX86RegTypeMm , 8 , C(Mm) , 0 , "mm" }, - /* 13: kX86VarTypeXmm */ { kX86RegTypeXmm , 16, C(Xyz), 0 , "xmm" }, - /* 14: kX86VarTypeXmmSs */ { kX86RegTypeXmm , 4 , C(Xyz), D(Sp) , "xmm" }, - /* 15: kX86VarTypeXmmPs */ { kX86RegTypeXmm , 16, C(Xyz), D(Sp) | D(Packed), "xmm" }, - /* 16: kX86VarTypeXmmSd */ { kX86RegTypeXmm , 8 , C(Xyz), D(Dp) , "xmm" }, - /* 17: kX86VarTypeXmmPd */ { kX86RegTypeXmm , 16, C(Xyz), D(Dp) | D(Packed), "xmm" }, - /* 18: kX86VarTypeYmm */ { kX86RegTypeYmm , 32, C(Xyz), 0 , "ymm" }, - /* 19: kX86VarTypeYmmPs */ { kX86RegTypeYmm , 32, C(Xyz), D(Sp) | D(Packed), "ymm" }, - /* 20: kX86VarTypeYmmPd */ { kX86RegTypeYmm , 32, C(Xyz), D(Dp) | D(Packed), "ymm" } + /* 13: kX86VarTypeK */ { kX86RegTypeK , 8 , C(K) , 0 , "k" }, + /* 14: kX86VarTypeXmm */ { kX86RegTypeXmm , 16, C(Xyz), 0 , "xmm" }, + /* 15: kX86VarTypeXmmSs */ { kX86RegTypeXmm , 4 , C(Xyz), D(Sp) , "xmm" }, + /* 16: kX86VarTypeXmmPs */ { kX86RegTypeXmm , 16, C(Xyz), D(Sp) | D(Packed), "xmm" }, + /* 17: kX86VarTypeXmmSd */ { kX86RegTypeXmm , 8 , C(Xyz), D(Dp) , "xmm" }, + /* 18: kX86VarTypeXmmPd */ { kX86RegTypeXmm , 16, C(Xyz), D(Dp) | D(Packed), "xmm" }, + /* 19: kX86VarTypeYmm */ { kX86RegTypeYmm , 32, C(Xyz), 0 , "ymm" }, + /* 20: kX86VarTypeYmmPs */ { kX86RegTypeYmm , 32, C(Xyz), D(Sp) | D(Packed), "ymm" }, + /* 21: kX86VarTypeYmmPd */ { kX86RegTypeYmm , 32, C(Xyz), D(Dp) | D(Packed), "ymm" }, + /* 22: kX86VarTypeZmm */ { kX86RegTypeZmm , 64, C(Xyz), 0 , "zmm" }, + /* 23: kX86VarTypeZmmPs */ { kX86RegTypeZmm , 64, C(Xyz), D(Sp) | D(Packed), "zmm" }, + /* 24: kX86VarTypeZmmPd */ { kX86RegTypeZmm , 64, C(Xyz), D(Dp) | D(Packed), "zmm" } }; #undef D @@ -88,14 +92,18 @@ const uint8_t _x86VarMapping[kX86VarTypeCount] = { /* 10: kVarTypeFp32 */ kVarTypeFp32, /* 11: kVarTypeFp64 */ kVarTypeFp64, /* 12: kX86VarTypeMm */ kX86VarTypeMm, - /* 13: kX86VarTypeXmm */ kX86VarTypeXmm, - /* 14: kX86VarTypeXmmSs */ kX86VarTypeXmmSs, - /* 15: kX86VarTypeXmmPs */ kX86VarTypeXmmPs, - /* 16: kX86VarTypeXmmSd */ kX86VarTypeXmmSd, - /* 17: kX86VarTypeXmmPd */ kX86VarTypeXmmPd, - /* 18: kX86VarTypeYmm */ kX86VarTypeYmm, - /* 19: kX86VarTypeYmmPs */ kX86VarTypeYmmPs, - /* 20: kX86VarTypeYmmPd */ kX86VarTypeYmmPd + /* 13: kX86VarTypeK */ kX86VarTypeK, + /* 14: kX86VarTypeXmm */ kX86VarTypeXmm, + /* 15: kX86VarTypeXmmSs */ kX86VarTypeXmmSs, + /* 16: kX86VarTypeXmmPs */ kX86VarTypeXmmPs, + /* 17: kX86VarTypeXmmSd */ kX86VarTypeXmmSd, + /* 18: kX86VarTypeXmmPd */ kX86VarTypeXmmPd, + /* 19: kX86VarTypeYmm */ kX86VarTypeYmm, + /* 20: kX86VarTypeYmmPs */ kX86VarTypeYmmPs, + /* 21: kX86VarTypeYmmPd */ kX86VarTypeYmmPd, + /* 22: kX86VarTypeZmm */ kX86VarTypeZmm, + /* 23: kX86VarTypeZmmPs */ kX86VarTypeZmmPs, + /* 24: kX86VarTypeZmmPd */ kX86VarTypeZmmPd }; #endif // ASMJIT_BUILD_X86 @@ -114,14 +122,18 @@ const uint8_t _x64VarMapping[kX86VarTypeCount] = { /* 10: kVarTypeFp32 */ kVarTypeFp32, /* 11: kVarTypeFp64 */ kVarTypeFp64, /* 12: kX86VarTypeMm */ kX86VarTypeMm, - /* 13: kX86VarTypeXmm */ kX86VarTypeXmm, - /* 14: kX86VarTypeXmmSs */ kX86VarTypeXmmSs, - /* 15: kX86VarTypeXmmPs */ kX86VarTypeXmmPs, - /* 16: kX86VarTypeXmmSd */ kX86VarTypeXmmSd, - /* 17: kX86VarTypeXmmPd */ kX86VarTypeXmmPd, - /* 18: kX86VarTypeYmm */ kX86VarTypeYmm, - /* 19: kX86VarTypeYmmPs */ kX86VarTypeYmmPs, - /* 20: kX86VarTypeYmmPd */ kX86VarTypeYmmPd + /* 13: kX86VarTypeK */ kX86VarTypeK, + /* 14: kX86VarTypeXmm */ kX86VarTypeXmm, + /* 15: kX86VarTypeXmmSs */ kX86VarTypeXmmSs, + /* 16: kX86VarTypeXmmPs */ kX86VarTypeXmmPs, + /* 17: kX86VarTypeXmmSd */ kX86VarTypeXmmSd, + /* 18: kX86VarTypeXmmPd */ kX86VarTypeXmmPd, + /* 19: kX86VarTypeYmm */ kX86VarTypeYmm, + /* 20: kX86VarTypeYmmPs */ kX86VarTypeYmmPs, + /* 21: kX86VarTypeYmmPd */ kX86VarTypeYmmPd, + /* 22: kX86VarTypeZmm */ kX86VarTypeZmm, + /* 23: kX86VarTypeZmmPs */ kX86VarTypeZmmPs, + /* 24: kX86VarTypeZmmPd */ kX86VarTypeZmmPd }; #endif // ASMJIT_BUILD_X64 @@ -482,14 +494,14 @@ static Error X86FuncDecl_initFunc(X86FuncDecl* self, uint32_t arch, if (x86ArgIsInt(varType) && i < ASMJIT_ARRAY_SIZE(self->_passedOrderGp)) { arg._regIndex = self->_passedOrderGp[i]; - self->_used.add(kX86RegClassGp, IntUtil::mask(arg.getRegIndex())); + self->_used.or_(kX86RegClassGp, IntUtil::mask(arg.getRegIndex())); continue; } if (x86ArgIsFp(varType) && i < ASMJIT_ARRAY_SIZE(self->_passedOrderXmm)) { arg._varType = static_cast(x86ArgTypeToXmmType(varType)); arg._regIndex = self->_passedOrderXmm[i]; - self->_used.add(kX86RegClassXyz, IntUtil::mask(arg.getRegIndex())); + self->_used.or_(kX86RegClassXyz, IntUtil::mask(arg.getRegIndex())); } } @@ -527,7 +539,7 @@ static Error X86FuncDecl_initFunc(X86FuncDecl* self, uint32_t arch, continue; arg._regIndex = self->_passedOrderGp[gpPos++]; - self->_used.add(kX86RegClassGp, IntUtil::mask(arg.getRegIndex())); + self->_used.or_(kX86RegClassGp, IntUtil::mask(arg.getRegIndex())); } // Register arguments (Xmm), always left-to-right. @@ -538,7 +550,7 @@ static Error X86FuncDecl_initFunc(X86FuncDecl* self, uint32_t arch, if (x86ArgIsFp(varType)) { arg._varType = static_cast(x86ArgTypeToXmmType(varType)); arg._regIndex = self->_passedOrderXmm[xmmPos++]; - self->_used.add(kX86RegClassXyz, IntUtil::mask(arg.getRegIndex())); + self->_used.or_(kX86RegClassXyz, IntUtil::mask(arg.getRegIndex())); } } @@ -721,10 +733,10 @@ Error X86Compiler::setArch(uint32_t arch) { _regSize = 4; _regCount.reset(); - _regCount._gp = 8; - _regCount._fp = 8; - _regCount._mm = 8; - _regCount._xy = 8; + _regCount._gp = 8; + _regCount._mm = 8; + _regCount._k = 8; + _regCount._xyz = 8; zax = x86::eax; zcx = x86::ecx; @@ -746,10 +758,10 @@ Error X86Compiler::setArch(uint32_t arch) { _regSize = 8; _regCount.reset(); - _regCount._gp = 16; - _regCount._fp = 8; - _regCount._mm = 8; - _regCount._xy = 16; + _regCount._gp = 16; + _regCount._mm = 8; + _regCount._k = 8; + _regCount._xyz = 16; zax = x86::rax; zcx = x86::rcx; @@ -783,7 +795,7 @@ static InstNode* X86Compiler_newInst(X86Compiler* self, void* p, uint32_t code, JumpNode* node = new(p) JumpNode(self, code, options, opList, opCount); TargetNode* jTarget = self->getTargetById(opList[0].getId()); - node->addFlags(code == kX86InstIdJmp ? kNodeFlagIsJmp | kNodeFlagIsTaken : kNodeFlagIsJcc); + node->orFlags(code == kX86InstIdJmp ? kNodeFlagIsJmp | kNodeFlagIsTaken : kNodeFlagIsJcc); node->_target = jTarget; node->_jumpNext = static_cast(jTarget->_from); @@ -792,9 +804,9 @@ static InstNode* X86Compiler_newInst(X86Compiler* self, void* p, uint32_t code, // The 'jmp' is always taken, conditional jump can contain hint, we detect it. if (code == kX86InstIdJmp) - node->addFlags(kNodeFlagIsTaken); + node->orFlags(kNodeFlagIsTaken); else if (options & kInstOptionTaken) - node->addFlags(kNodeFlagIsTaken); + node->orFlags(kNodeFlagIsTaken); node->addOptions(options); return node; @@ -1025,6 +1037,22 @@ InstNode* X86Compiler::emit(uint32_t code, const Operand& o0, const Operand& o1, return static_cast(addNode(node)); } +InstNode* X86Compiler::emit(uint32_t code, const Operand& o0, const Operand& o1, const Operand& o2, int o3_) { + Imm o3(o3_); + InstNode* node = newInst(code, o0, o1, o2, o3); + if (node == NULL) + return NULL; + return static_cast(addNode(node)); +} + +InstNode* X86Compiler::emit(uint32_t code, const Operand& o0, const Operand& o1, const Operand& o2, uint64_t o3_) { + Imm o3(o3_); + InstNode* node = newInst(code, o0, o1, o2, o3); + if (node == NULL) + return NULL; + return static_cast(addNode(node)); +} + // ============================================================================ // [asmjit::X86Compiler - Func] // ============================================================================ diff --git a/src/asmjit/x86/x86compiler.h b/src/asmjit/x86/x86compiler.h index 465cc1d..56dda3a 100644 --- a/src/asmjit/x86/x86compiler.h +++ b/src/asmjit/x86/x86compiler.h @@ -46,24 +46,34 @@ ASMJIT_ENUM(kX86VarType) { //! Variable is Mm (MMX). kX86VarTypeMm = 12, + //! Variable is K (AVX512+) + kX86VarTypeK, + //! Variable is Xmm (SSE+). kX86VarTypeXmm, - //! Variable is scalar Xmm SP-FP number. + //! Variable is a scalar Xmm SP-FP number. kX86VarTypeXmmSs, - //! Variable is packed Xmm SP-FP number (4 floats). + //! Variable is a packed Xmm SP-FP number (4 floats). kX86VarTypeXmmPs, - //! Variable is scalar Xmm DP-FP number. + //! Variable is a scalar Xmm DP-FP number. kX86VarTypeXmmSd, - //! Variable is packed Xmm DP-FP number (2 doubles). + //! Variable is a packed Xmm DP-FP number (2 doubles). kX86VarTypeXmmPd, //! Variable is Ymm (AVX+). kX86VarTypeYmm, - //! Variable is packed Ymm SP-FP number (8 floats). + //! Variable is a packed Ymm SP-FP number (8 floats). kX86VarTypeYmmPs, - //! Variable is packed Ymm DP-FP number (4 doubles). + //! Variable is a packed Ymm DP-FP number (4 doubles). kX86VarTypeYmmPd, + //! Variable is Zmm (AVX512+). + kX86VarTypeZmm, + //! Variable is a packed Zmm SP-FP number (16 floats). + kX86VarTypeZmmPs, + //! Variable is a packed Zmm DP-FP number (8 doubles). + kX86VarTypeZmmPd, + //! Count of variable types. kX86VarTypeCount, @@ -76,7 +86,10 @@ ASMJIT_ENUM(kX86VarType) { _kX86VarTypeXmmEnd = kX86VarTypeXmmPd, _kX86VarTypeYmmStart = kX86VarTypeYmm, - _kX86VarTypeYmmEnd = kX86VarTypeYmmPd + _kX86VarTypeYmmEnd = kX86VarTypeYmmPd, + + _kX86VarTypeZmmStart = kX86VarTypeZmm, + _kX86VarTypeZmmEnd = kX86VarTypeZmmPd //! \} }; @@ -552,6 +565,9 @@ struct X86Var : public Var { //! Get whether the variable is Mm (64-bit) register. ASMJIT_INLINE bool isMm() const { return _vreg.type == kX86RegTypeMm; } + //! Get whether the variable is K (64-bit) register. + ASMJIT_INLINE bool isK() const { return _vreg.type == kX86RegTypeK; } + //! Get whether the variable is Xmm (128-bit) register. ASMJIT_INLINE bool isXmm() const { return _vreg.type == kX86RegTypeXmm; } //! Get whether the variable is Ymm (256-bit) register. @@ -2016,6 +2032,7 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { = kArchHost #endif // ASMJIT_HOST_X86 || ASMJIT_HOST_X64 ); + //! Destroy the `X86Compiler` instance. ASMJIT_API ~X86Compiler(); @@ -2023,7 +2040,12 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { // [Arch] // -------------------------------------------------------------------------- - //! Get count of registers of the current architecture. + //! \internal + //! + //! Set the architecture to `arch`. + ASMJIT_API Error setArch(uint32_t arch); + + //! Get count of registers of the current architecture and mode. ASMJIT_INLINE const X86RegCount& getRegCount() const { return _regCount; } @@ -2075,8 +2097,6 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { return x86::ptr_abs(pAbs, index, shift, disp, _regSize); } - ASMJIT_API Error setArch(uint32_t arch); - // -------------------------------------------------------------------------- // [Inst / Emit] // -------------------------------------------------------------------------- @@ -2119,6 +2139,10 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { ASMJIT_API InstNode* emit(uint32_t code, const Operand& o0, const Operand& o1, int o2); //! \overload ASMJIT_API InstNode* emit(uint32_t code, const Operand& o0, const Operand& o1, uint64_t o2); + //! \overload + ASMJIT_API InstNode* emit(uint32_t code, const Operand& o0, const Operand& o1, const Operand& o2, int o3); + //! \overload + ASMJIT_API InstNode* emit(uint32_t code, const Operand& o0, const Operand& o1, const Operand& o2, uint64_t o3); // -------------------------------------------------------------------------- // [Func] @@ -2438,7 +2462,7 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { X86GpReg zdi; // -------------------------------------------------------------------------- - // [X86 Instructions] + // [Emit] // -------------------------------------------------------------------------- #define INST_0x(_Inst_, _Code_) \ @@ -2614,6 +2638,31 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { return emit(_Code_, o0, o1, o2); \ } +#define INST_3ii(_Inst_, _Code_, _Op0_, _Op1_, _Op2_) \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2) { \ + return emit(_Code_, o0, o1, o2); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, int o1, int o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, o2); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, unsigned int o1, unsigned int o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, static_cast(o2)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, int64_t o1, int64_t o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, static_cast(o2)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, uint64_t o1, uint64_t o2) { \ + Imm o1Imm(o1); \ + return emit(_Code_, o0, o1Imm, o2); \ + } + #define INST_4x(_Inst_, _Code_, _Op0_, _Op1_, _Op2_) \ ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2, const _Op3_& o3) { \ return emit(_Code_, o0, o1, o2, o3); \ @@ -2646,6 +2695,35 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { return emit(_Code_, o0, o1, o2, o3); \ } +#define INST_4ii(_Inst_, _Code_, _Op0_, _Op1_, _Op2_, _Op3_) \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, const _Op2_& o2, const _Op3_& o3) { \ + return emit(_Code_, o0, o1, o2, o3); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, int o2, int o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, o3); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, unsigned int o2, unsigned int o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, static_cast(o3)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, int64_t o2, int64_t o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, static_cast(o3)); \ + } \ + /*! \overload */ \ + ASMJIT_INLINE InstNode* _Inst_(const _Op0_& o0, const _Op1_& o1, uint64_t o2, uint64_t o3) { \ + Imm o2Imm(o2); \ + return emit(_Code_, o0, o1, o2Imm, o3); \ + } + + // -------------------------------------------------------------------------- + // [X86/X64] + // -------------------------------------------------------------------------- + //! Add with carry. INST_2x(adc, kX86InstIdAdc, X86GpVar, X86GpVar) //! \overload @@ -2832,11 +2910,6 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { return emit(kX86InstIdCpuid, x_eax, w_ebx, x_ecx, w_edx); } - //! Accumulate crc32 value (polynomial 0x11EDC6F41) (SSE4.2). - INST_2x_(crc32, kX86InstIdCrc32, X86GpVar, X86GpVar, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) - //! \overload - INST_2x_(crc32, kX86InstIdCrc32, X86GpVar, X86Mem, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) - //! Decimal adjust AL after addition (X86 Only). INST_1x(daa, kX86InstIdDaa, X86GpVar) //! Decimal adjust AL after subtraction (X86 Only). @@ -3024,11 +3097,6 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { //! Pop stack into EFLAGS Register (32-bit or 64-bit). INST_0x(popf, kX86InstIdPopf) - //! Return the count of number of bits set to 1 (SSE4.2). - INST_2x_(popcnt, kX86InstIdPopcnt, X86GpVar, X86GpVar, !o0.isGpb() && o0.getSize() == o1.getSize()) - //! \overload - INST_2x_(popcnt, kX86InstIdPopcnt, X86GpVar, X86Mem, !o0.isGpb()) - //! Push WORD or DWORD/QWORD on the stack. INST_1x_(push, kX86InstIdPush, X86GpVar, o0.getSize() == 2 || o0.getSize() == _regSize) //! Push WORD or DWORD/QWORD on the stack. @@ -3299,273 +3367,277 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { INST_2i(xor_, kX86InstIdXor, X86Mem, Imm) // -------------------------------------------------------------------------- - // [Fpu] + // [FPU] // -------------------------------------------------------------------------- - //! Compute 2^x - 1 (FPU). + //! Compute `2^x - 1` - `fp0 = POW(2, fp0) - 1` (FPU). INST_0x(f2xm1, kX86InstIdF2xm1) - //! Absolute value of fp0 (FPU). + //! Abs `fp0 = ABS(fp0)` (FPU). INST_0x(fabs, kX86InstIdFabs) - //! Add `o1` to `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Add `o0 = o0 + o1` (one operand has to be `fp0`) (FPU). INST_2x_(fadd, kX86InstIdFadd, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Add 4-byte or 8-byte FP `o0` to fp0 and store result in fp0 (FPU). + //! Add `fp0 = fp0 + float_or_double[o0]` (FPU). INST_1x(fadd, kX86InstIdFadd, X86Mem) - //! Add fp0 to `o0` and pop the FPU stack (FPU). + //! Add `o0 = o0 + fp0` and POP (FPU). INST_1x(faddp, kX86InstIdFaddp, X86FpReg) - //! \overload + //! Add `fp1 = fp1 + fp0` and POP (FPU). INST_0x(faddp, kX86InstIdFaddp) - //! Load binary coded decimal (FPU). + //! Load BCD from `[o0]` and PUSH (FPU). INST_1x(fbld, kX86InstIdFbld, X86Mem) - //! Store BCD integer and Pop (FPU). + //! Store BCD-Integer to `[o0]` and POP (FPU). INST_1x(fbstp, kX86InstIdFbstp, X86Mem) - //! Change fp0 sign (FPU). + + //! Complement Sign `fp0 = -fp0` (FPU). INST_0x(fchs, kX86InstIdFchs) + //! Clear exceptions (FPU). INST_0x(fclex, kX86InstIdFclex) - //! Conditional move (FPU). + //! Conditional move `if (CF=1) fp0 = o0` (FPU). INST_1x(fcmovb, kX86InstIdFcmovb, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF|ZF=1) fp0 = o0` (FPU). INST_1x(fcmovbe, kX86InstIdFcmovbe, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (ZF=1) fp0 = o0` (FPU). INST_1x(fcmove, kX86InstIdFcmove, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF=0) fp0 = o0` (FPU). INST_1x(fcmovnb, kX86InstIdFcmovnb, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (CF|ZF=0) fp0 = o0` (FPU). INST_1x(fcmovnbe, kX86InstIdFcmovnbe, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (ZF=0) fp0 = o0` (FPU). INST_1x(fcmovne, kX86InstIdFcmovne, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (PF=0) fp0 = o0` (FPU). INST_1x(fcmovnu, kX86InstIdFcmovnu, X86FpReg) - //! Conditional move (FPU). + //! Conditional move `if (PF=1) fp0 = o0` (FPU). INST_1x(fcmovu, kX86InstIdFcmovu, X86FpReg) - //! Compare fp0 with `o0` (FPU). + //! Compare `fp0` with `o0` (FPU). INST_1x(fcom, kX86InstIdFcom, X86FpReg) - //! Compare fp0 with fp1 (FPU). + //! Compare `fp0` with `fp1` (FPU). INST_0x(fcom, kX86InstIdFcom) - //! Compare fp0 with 4-byte or 8-byte FP at `src` (FPU). + //! Compare `fp0` with `float_or_double[o0]` (FPU). INST_1x(fcom, kX86InstIdFcom, X86Mem) - //! Compare fp0 with `o0` and pop the FPU stack (FPU). + //! Compare `fp0` with `o0` and POP (FPU). INST_1x(fcomp, kX86InstIdFcomp, X86FpReg) - //! Compare fp0 with fp1 and pop the FPU stack (FPU). + //! Compare `fp0` with `fp1` and POP (FPU). INST_0x(fcomp, kX86InstIdFcomp) - //! Compare fp0 with 4-byte or 8-byte FP at `adr` and pop the FPU stack (FPU). + //! Compare `fp0` with `float_or_double[o0]` and POP (FPU). INST_1x(fcomp, kX86InstIdFcomp, X86Mem) - //! Compare fp0 with fp1 and pop the FPU stack twice (FPU). + //! Compare `fp0` with `fp1` and POP twice (FPU). INST_0x(fcompp, kX86InstIdFcompp) - //! Compare fp0 and `o0` and Set EFLAGS (FPU). + //! Compare `fp0` with `o0` and set EFLAGS (FPU). INST_1x(fcomi, kX86InstIdFcomi, X86FpReg) - //! Compare fp0 and `o0` and Set EFLAGS and pop the FPU stack (FPU). + //! Compare `fp0` with `o0` and set EFLAGS and POP (FPU). INST_1x(fcomip, kX86InstIdFcomip, X86FpReg) - //! Calculate cosine of fp0 and store result in fp0 (FPU). + //! Cos `fp0 = cos(fp0)` (FPU). INST_0x(fcos, kX86InstIdFcos) - //! Decrement FPU stack-top pointer (FPU). + + //! Decrement FPU stack pointer (FPU). INST_0x(fdecstp, kX86InstIdFdecstp) - //! Divide `o0` by `o1` (one has to be `fp0`) (FPU). + //! Divide `o0 = o0 / o1` (one has to be `fp0`) (FPU). INST_2x_(fdiv, kX86InstIdFdiv, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Divide fp0 by 32-bit or 64-bit FP value (FPU). + //! Divide `fp0 = fp0 / float_or_double[o0]` (FPU). INST_1x(fdiv, kX86InstIdFdiv, X86Mem) - //! Divide `o0` by fp0 (FPU). + //! Divide `o0 = o0 / fp0` and POP (FPU). INST_1x(fdivp, kX86InstIdFdivp, X86FpReg) - //! \overload + //! Divide `fp1 = fp1 / fp0` and POP (FPU). INST_0x(fdivp, kX86InstIdFdivp) - //! Reverse divide `o0` by `o1` (one has to be `fp0`) (FPU). + //! Reverse divide `o0 = o1 / o0` (one has to be `fp0`) (FPU). INST_2x_(fdivr, kX86InstIdFdivr, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Reverse divide fp0 by 32-bit or 64-bit FP value (FPU). + //! Reverse divide `fp0 = float_or_double[o0] / fp0` (FPU). INST_1x(fdivr, kX86InstIdFdivr, X86Mem) - //! Reverse divide `o0` by fp0 (FPU). + //! Reverse divide `o0 = fp0 / o0` and POP (FPU). INST_1x(fdivrp, kX86InstIdFdivrp, X86FpReg) - //! \overload + //! Reverse divide `fp1 = fp0 / fp1` and POP (FPU). INST_0x(fdivrp, kX86InstIdFdivrp) //! Free FP register (FPU). INST_1x(ffree, kX86InstIdFfree, X86FpReg) - //! Add 16-bit or 32-bit integer to fp0 (FPU). + //! Add `fp0 = fp0 + short_or_int[o0]` (FPU). INST_1x_(fiadd, kX86InstIdFiadd, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Compare fp0 with 16-bit or 32-bit Integer (FPU). + //! Compare `fp0` with `short_or_int[o0]` (FPU). INST_1x_(ficom, kX86InstIdFicom, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Compare fp0 with 16-bit or 32-bit Integer and pop the FPU stack (FPU). + //! Compare `fp0` with `short_or_int[o0]` and POP (FPU). INST_1x_(ficomp, kX86InstIdFicomp, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Divide fp0 by 32-bit or 16-bit integer (`src`) (FPU). + //! Divide `fp0 = fp0 / short_or_int[o0]` (FPU). INST_1x_(fidiv, kX86InstIdFidiv, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Reverse divide fp0 by 32-bit or 16-bit integer (`src`) (FPU). + //! Reverse divide `fp0 = short_or_int[o0] / fp0` (FPU). INST_1x_(fidivr, kX86InstIdFidivr, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Load 16-bit, 32-bit or 64-bit Integer and push it to the FPU stack (FPU). + //! Load `short_or_int_or_long[o0]` and PUSH (FPU). INST_1x_(fild, kX86InstIdFild, X86Mem, o0.getSize() == 2 || o0.getSize() == 4 || o0.getSize() == 8) - //! Multiply fp0 by 16-bit or 32-bit integer and store it to fp0 (FPU). + //! Multiply `fp0 *= short_or_int[o0]` (FPU). INST_1x_(fimul, kX86InstIdFimul, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Increment FPU stack-top pointer (FPU). + //! Increment FPU stack pointer (FPU). INST_0x(fincstp, kX86InstIdFincstp) //! Initialize FPU (FPU). INST_0x(finit, kX86InstIdFinit) - //! Subtract 16-bit or 32-bit integer from fp0 and store result to fp0 (FPU). + //! Subtract `fp0 = fp0 - short_or_int[o0]` (FPU). INST_1x_(fisub, kX86InstIdFisub, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Reverse subtract 16-bit or 32-bit integer from fp0 and store result to fp0 (FPU). + //! Reverse subtract `fp0 = short_or_int[o0] - fp0` (FPU). INST_1x_(fisubr, kX86InstIdFisubr, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) //! Initialize FPU without checking for pending unmasked exceptions (FPU). INST_0x(fninit, kX86InstIdFninit) - //! Store fp0 as 16-bit or 32-bit Integer to `o0` (FPU). + //! Store `fp0` as `short_or_int[o0]` (FPU). INST_1x_(fist, kX86InstIdFist, X86Mem, o0.getSize() == 2 || o0.getSize() == 4) - //! Store fp0 as 16-bit, 32-bit or 64-bit Integer to `o0` and pop the FPU stack (FPU). + //! Store `fp0` as `short_or_int_or_long[o0]` and POP (FPU). INST_1x_(fistp, kX86InstIdFistp, X86Mem, o0.getSize() == 2 || o0.getSize() == 4 || o0.getSize() == 8) - //! Push 32-bit, 64-bit or 80-bit floating point value on the FPU stack (FPU). + + //! Load `float_or_double_or_extended[o0]` and PUSH (FPU). INST_1x_(fld, kX86InstIdFld, X86Mem, o0.getSize() == 4 || o0.getSize() == 8 || o0.getSize() == 10) - //! Push `o0` on the FPU stack (FPU). + //! PUSH `o0` (FPU). INST_1x(fld, kX86InstIdFld, X86FpReg) - //! Push +1.0 on the FPU stack (FPU). + //! PUSH `1.0` (FPU). INST_0x(fld1, kX86InstIdFld1) - //! Push log2(10) on the FPU stack (FPU). + //! PUSH `log2(10)` (FPU). INST_0x(fldl2t, kX86InstIdFldl2t) - //! Push log2(e) on the FPU stack (FPU). + //! PUSH `log2(e)` (FPU). INST_0x(fldl2e, kX86InstIdFldl2e) - //! Push pi on the FPU stack (FPU). + //! PUSH `pi` (FPU). INST_0x(fldpi, kX86InstIdFldpi) - //! Push log10(2) on the FPU stack (FPU). + //! PUSH `log10(2)` (FPU). INST_0x(fldlg2, kX86InstIdFldlg2) - //! Push ln(2) on the FPU stack (FPU). + //! PUSH `ln(2)` (FPU). INST_0x(fldln2, kX86InstIdFldln2) - //! Push +0.0 on the FPU stack (FPU). + //! PUSH `+0.0` (FPU). INST_0x(fldz, kX86InstIdFldz) - //! Load x87 FPU control word (2 bytes) (FPU). + //! Load x87 FPU control word from `word_ptr[o0]` (FPU). INST_1x(fldcw, kX86InstIdFldcw, X86Mem) - //! Load x87 FPU environment (14 or 28 bytes) (FPU). + //! Load x87 FPU environment (14 or 28 bytes) from `[o0]` (FPU). INST_1x(fldenv, kX86InstIdFldenv, X86Mem) - //! Multiply `o0` by `o1` (one has to be `fp0`) and store result in `o0` (FPU). + //! Multiply `o0 = o0 * o1` (one has to be `fp0`) (FPU). INST_2x_(fmul, kX86InstIdFmul, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Multiply fp0 by 32-bit or 64-bit `o0` and store result in fp0 (FPU). + //! Multiply `fp0 = fp0 * float_or_double[o0]` (FPU). INST_1x(fmul, kX86InstIdFmul, X86Mem) - //! Multiply fp0 by `o0` and pop the FPU stack (FPU). + //! Multiply `o0 = o0 * fp0` and POP (FPU). INST_1x(fmulp, kX86InstIdFmulp, X86FpReg) - //! \overload + //! Multiply `fp1 = fp1 * fp0` and POP (FPU). INST_0x(fmulp, kX86InstIdFmulp) //! Clear exceptions (FPU). INST_0x(fnclex, kX86InstIdFnclex) //! No operation (FPU). INST_0x(fnop, kX86InstIdFnop) - //! Save FPU state (FPU). + //! Save FPU state to `[o0]` (FPU). INST_1x(fnsave, kX86InstIdFnsave, X86Mem) - //! Store x87 FPU environment (FPU). + //! Store x87 FPU environment to `[o0]` (FPU). INST_1x(fnstenv, kX86InstIdFnstenv, X86Mem) - //! Store x87 FPU control word (FPU). + //! Store x87 FPU control word to `[o0]` (FPU). INST_1x(fnstcw, kX86InstIdFnstcw, X86Mem) //! Store x87 FPU status word to `o0` (AX) (FPU). - INST_1x_(fnstsw, kX86InstIdFnstsw, X86GpReg, o0.isRegCode(kX86RegTypeGpw, kX86RegIndexAx)) - //! Store x87 FPU status word to `o0` (2 bytes) (FPU). + INST_1x(fnstsw, kX86InstIdFnstsw, X86GpVar) + //! Store x87 FPU status word to `word_ptr[o0]` (FPU). INST_1x(fnstsw, kX86InstIdFnstsw, X86Mem) - //! Arctan(`fp1` / `fp0`) and pop the FPU stack (FPU). + //! Partial Arctan `fp1 = atan2(fp1, fp0)` and POP (FPU). INST_0x(fpatan, kX86InstIdFpatan) - //! Fprem(`fp0`, `fp1`) and pop the FPU stack (FPU). + //! Partial Remainder[Trunc] `fp1 = fp0 % fp1` and POP (FPU). INST_0x(fprem, kX86InstIdFprem) - //! Fprem(`fp0`, `fp1`) and pop the FPU stack (FPU). + //! Partial Remainder[Round] `fp1 = fp0 % fp1` and POP (FPU). INST_0x(fprem1, kX86InstIdFprem1) - //! Arctan(`fp0`) and pop the FPU stack (FPU). + //! Partial Tan `fp0 = tan(fp0)` and PUSH `1.0` (FPU). INST_0x(fptan, kX86InstIdFptan) - //! Round `fp0` to Integer (FPU). + //! Round `fp0 = round(fp0)` (FPU). INST_0x(frndint, kX86InstIdFrndint) - //! Restore FPU state from `o0` (94 or 108 bytes) (FPU). + //! Restore FPU state from `[o0]` (94 or 108 bytes) (FPU). INST_1x(frstor, kX86InstIdFrstor, X86Mem) - //! Save FPU state to `o0` (94 or 108 bytes) (FPU). + //! Save FPU state to `[o0]` (94 or 108 bytes) (FPU). INST_1x(fsave, kX86InstIdFsave, X86Mem) - //! Scale `fp0` by `fp1` (FPU). + //! Scale `fp0 = fp0 * pow(2, RoundTowardsZero(fp1))` (FPU). INST_0x(fscale, kX86InstIdFscale) - //! Sine of `fp0` and store result in `fp0` (FPU). + //! Sin `fp0 = sin(fp0)` (FPU). INST_0x(fsin, kX86InstIdFsin) - //! Sine and cosine of `fp0`, store sine in `fp0` and push cosine on the FPU stack (FPU). + //! Sincos `fp0 = sin(fp0)` and PUSH `cos(fp0)` (FPU). INST_0x(fsincos, kX86InstIdFsincos) - //! Square root of `fp0` and store it in `fp0` (FPU). + //! Square root `fp0 = sqrt(fp0)` (FPU). INST_0x(fsqrt, kX86InstIdFsqrt) - //! Store floating point value to 32-bit or 64-bit memory location (FPU). + //! Store floating point value to `float_or_double[o0]` (FPU). INST_1x_(fst, kX86InstIdFst, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Store floating point value to `o0` (FPU). + //! Copy `o0 = fp0` (FPU). INST_1x(fst, kX86InstIdFst, X86FpReg) - //! Store floating point value to 32-bit or 64-bit memory location and pop the FPU stack (FPU). + //! Store floating point value to `float_or_double_or_extended[o0]` and POP (FPU). INST_1x_(fstp, kX86InstIdFstp, X86Mem, o0.getSize() == 4 || o0.getSize() == 8 || o0.getSize() == 10) - //! Store floating point value to `o0` and pop the FPU stack (FPU). + //! Copy `o0 = fp0` and POP (FPU). INST_1x(fstp, kX86InstIdFstp, X86FpReg) - //! Store x87 FPU control word to `o0` (2 bytes) (FPU). + //! Store x87 FPU control word to `word_ptr[o0]` (FPU). INST_1x(fstcw, kX86InstIdFstcw, X86Mem) - //! Store x87 FPU environment to `o0` (14 or 28 bytes) (FPU). + //! Store x87 FPU environment to `[o0]` (14 or 28 bytes) (FPU). INST_1x(fstenv, kX86InstIdFstenv, X86Mem) - //! Store x87 FPU status word to `o0` (allocated in AX) (FPU). + //! Store x87 FPU status word to `o0` (AX) (FPU). INST_1x(fstsw, kX86InstIdFstsw, X86GpVar) - //! Store x87 FPU status word (2 bytes) (FPU). + //! Store x87 FPU status word to `word_ptr[o0]` (FPU). INST_1x(fstsw, kX86InstIdFstsw, X86Mem) - //! Subtract `o0` from `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Subtract `o0 = o0 - o1` (one has to be `fp0`) (FPU). INST_2x_(fsub, kX86InstIdFsub, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Subtract 32-bit or 64-bit `o0` from fp0 and store result in fp0 (FPU). + //! Subtract `fp0 = fp0 - float_or_double[o0]` (FPU). INST_1x_(fsub, kX86InstIdFsub, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Subtract fp0 from `o0` and pop FPU stack (FPU). + //! Subtract `o0 = o0 - fp0` and POP (FPU). INST_1x(fsubp, kX86InstIdFsubp, X86FpReg) - //! \overload + //! Subtract `fp1 = fp1 - fp0` and POP (FPU). INST_0x(fsubp, kX86InstIdFsubp) - //! Reverse subtract `o1` from `o0` (one has to be `fp0`) and store result in `o0` (FPU). + //! Reverse subtract `o0 = o1 - o0` (one has to be `fp0`) (FPU). INST_2x_(fsubr, kX86InstIdFsubr, X86FpReg, X86FpReg, o0.getRegIndex() == 0 || o1.getRegIndex() == 0) - //! Reverse subtract 32-bit or 64-bit `o0` from `fp0` and store result in `fp0` (FPU). + //! Reverse subtract `fp0 = fp0 - float_or_double[o0]` (FPU). INST_1x_(fsubr, kX86InstIdFsubr, X86Mem, o0.getSize() == 4 || o0.getSize() == 8) - //! Reverse subtract `fp0` from `o0` and pop FPU stack (FPU). + //! Reverse subtract `o0 = o0 - fp0` and POP (FPU). INST_1x(fsubrp, kX86InstIdFsubrp, X86FpReg) - //! \overload + //! Reverse subtract `fp1 = fp1 - fp0` and POP (FPU). INST_0x(fsubrp, kX86InstIdFsubrp) - //! Floating point test - Compare `fp0` with 0.0. (FPU). + //! Compare `fp0` with `0.0` (FPU). INST_0x(ftst, kX86InstIdFtst) //! Unordered compare `fp0` with `o0` (FPU). INST_1x(fucom, kX86InstIdFucom, X86FpReg) //! Unordered compare `fp0` with `fp1` (FPU). INST_0x(fucom, kX86InstIdFucom) - //! Unordered compare `fp0` and `o0`, check for ordered values and set EFLAGS (FPU). + //! Unordered compare `fp0` with `o0`, check for ordered values and set EFLAGS (FPU). INST_1x(fucomi, kX86InstIdFucomi, X86FpReg) - //! Unordered compare `fp0` and `o0`, check for ordered values and set EFLAGS and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `o0`, check for ordered values and set EFLAGS and POP (FPU). INST_1x(fucomip, kX86InstIdFucomip, X86FpReg) - //! Unordered compare `fp0` with `o0` and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `o0` and POP (FPU). INST_1x(fucomp, kX86InstIdFucomp, X86FpReg) - //! Unordered compare `fp0` with `fp1` and pop the FPU stack (FPU). + //! Unordered compare `fp0` with `fp1` and POP (FPU). INST_0x(fucomp, kX86InstIdFucomp) - //! Unordered compare `fp0` with `fp1` and pop the FPU stack twice (FPU). + //! Unordered compare `fp0` with `fp1` and POP twice (FPU). INST_0x(fucompp, kX86InstIdFucompp) INST_0x(fwait, kX86InstIdFwait) //! Examine fp0 (FPU). INST_0x(fxam, kX86InstIdFxam) - //! Exchange content of fp0 with `o0` (FPU). + //! Exchange `fp0` with `o0` (FPU). INST_1x(fxch, kX86InstIdFxch, X86FpReg) //! Restore FP/MMX/SIMD extension states to `o0` (512 bytes) (FPU, MMX, SSE). INST_1x(fxrstor, kX86InstIdFxrstor, X86Mem) //! Store FP/MMX/SIMD extension states to `o0` (512 bytes) (FPU, MMX, SSE). INST_1x(fxsave, kX86InstIdFxsave, X86Mem) - //! Extract exponent and store to `fp0` and push significand on the FPU stack (FPU). + //! Extract `fp0 = exponent(fp0)` and PUSH `significant(fp0)` (FPU). INST_0x(fxtract, kX86InstIdFxtract) - //! Compute `fp1 * log2(fp0)`, pop the FPU stack and store result in `fp0` (FPU). + //! Compute `fp1 = fp1 * log2(fp0)` and POP (FPU). INST_0x(fyl2x, kX86InstIdFyl2x) - //! Compute `fp1 * log2(fp0 + 1)`, pop the FPU stack and store result in `fp0` (FPU). + //! Compute `fp1 = fp1 * log2(fp0 + 1)` and POP (FPU). INST_0x(fyl2xp1, kX86InstIdFyl2xp1) // -------------------------------------------------------------------------- @@ -3833,7 +3905,7 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { INST_0x(emms, kX86InstIdEmms) // -------------------------------------------------------------------------- - // [3dNow] + // [3DNOW] // -------------------------------------------------------------------------- //! Packed SP-FP to DWORD convert (3dNow!). @@ -4921,8 +4993,7 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { //! \overload INST_2x(addsubps, kX86InstIdAddsubps, X86XmmVar, X86Mem) - //! Store truncated `fp0` as 16-bit, 32-bit or 64-bit integer to `o0` and pop - //! the FPU stack (FPU / SSE3). + //! Store truncated `fp0` to `short_or_int_or_long[o0]` and POP (FPU & SSE3). INST_1x(fisttp, kX86InstIdFisttp, X86Mem) //! Packed DP-FP horizontal add (SSE3). @@ -5382,6 +5453,11 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { // [SSE4.2] // -------------------------------------------------------------------------- + //! Accumulate crc32 value (polynomial 0x11EDC6F41) (SSE4.2). + INST_2x_(crc32, kX86InstIdCrc32, X86GpVar, X86GpVar, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) + //! \overload + INST_2x_(crc32, kX86InstIdCrc32, X86GpVar, X86Mem, o0.isRegType(kX86RegTypeGpd) || o0.isRegType(kX86RegTypeGpq)) + //! Packed compare explicit length strings, return index (SSE4.2). INST_3i(pcmpestri, kX86InstIdPcmpestri, X86XmmVar, X86XmmVar, Imm) //! \overload @@ -5407,6 +5483,43 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { //! \overload INST_2x(pcmpgtq, kX86InstIdPcmpgtq, X86XmmVar, X86Mem) + // -------------------------------------------------------------------------- + // [SSE4a] + // -------------------------------------------------------------------------- + + //! Extract Field (SSE4a). + INST_2x(extrq, kX86InstIdExtrq, X86XmmVar, X86XmmVar) + //! Extract Field (SSE4a). + INST_3ii(extrq, kX86InstIdExtrq, X86XmmVar, Imm, Imm) + + //! Insert Field (SSE4a). + INST_2x(insertq, kX86InstIdInsertq, X86XmmVar, X86XmmVar) + //! Insert Field (SSE4a). + INST_4ii(insertq, kX86InstIdInsertq, X86XmmVar, X86XmmVar, Imm, Imm) + + //! Move Non-Temporal Scalar DP-FP (SSE4a). + INST_2x(movntsd, kX86InstIdMovntsd, X86Mem, X86XmmVar) + //! Move Non-Temporal Scalar SP-FP (SSE4a). + INST_2x(movntss, kX86InstIdMovntss, X86Mem, X86XmmVar) + + // -------------------------------------------------------------------------- + // [POPCNT] + // -------------------------------------------------------------------------- + + //! Return the count of number of bits set to 1 (POPCNT). + INST_2x_(popcnt, kX86InstIdPopcnt, X86GpVar, X86GpVar, !o0.isGpb() && o0.getSize() == o1.getSize()) + //! \overload + INST_2x_(popcnt, kX86InstIdPopcnt, X86GpVar, X86Mem, !o0.isGpb()) + + // -------------------------------------------------------------------------- + // [LZCNT] + // -------------------------------------------------------------------------- + + //! Count the number of leading zero bits (LZCNT). + INST_2x(lzcnt, kX86InstIdLzcnt, X86GpVar, X86GpVar) + //! \overload + INST_2x(lzcnt, kX86InstIdLzcnt, X86GpVar, X86Mem) + // -------------------------------------------------------------------------- // [AESNI] // -------------------------------------------------------------------------- @@ -5450,6 +5563,34 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { //! \overload INST_3i(pclmulqdq, kX86InstIdPclmulqdq, X86XmmVar, X86Mem, Imm); + // -------------------------------------------------------------------------- + // [XSAVE] + // -------------------------------------------------------------------------- + + //! Restore Processor Extended States specified by `o1:o2` (XSAVE). + INST_3x(xrstor, kX86InstIdXrstor, X86Mem, X86GpVar, X86GpVar) + //! Restore Processor Extended States specified by `o1:o2` (XSAVE&X64). + INST_3x(xrstor64, kX86InstIdXrstor64, X86Mem, X86GpVar, X86GpVar) + + //! Save Processor Extended States specified by `o1:o2` (XSAVE). + INST_3x(xsave, kX86InstIdXsave, X86Mem, X86GpVar, X86GpVar) + //! Save Processor Extended States specified by `o1:o2` (XSAVE&X64). + INST_3x(xsave64, kX86InstIdXsave64, X86Mem, X86GpVar, X86GpVar) + + //! Save Processor Extended States specified by `o1:o2` (Optimized) (XSAVEOPT). + INST_3x(xsaveopt, kX86InstIdXsave, X86Mem, X86GpVar, X86GpVar) + //! Save Processor Extended States specified by `o1:o2` (Optimized) (XSAVEOPT&X64). + INST_3x(xsaveopt64, kX86InstIdXsave64, X86Mem, X86GpVar, X86GpVar) + + //! Get XCR - `o1:o2 <- XCR[o0]` (`EDX:EAX <- XCR[ECX]`) (XSAVE). + INST_3x(xgetbv, kX86InstIdXgetbv, X86GpVar, X86GpVar, X86GpVar) + //! Set XCR - `XCR[o0] <- o1:o2` (`XCR[ECX] <- EDX:EAX`) (XSAVE). + INST_3x(xsetbv, kX86InstIdXsetbv, X86GpVar, X86GpVar, X86GpVar) + + // -------------------------------------------------------------------------- + // [Cleanup] + // -------------------------------------------------------------------------- + #undef INST_0x #undef INST_1x @@ -5465,10 +5606,12 @@ struct ASMJIT_VCLASS X86Compiler : public Compiler { #undef INST_3x #undef INST_3x_ #undef INST_3i +#undef INST_3ii #undef INST_4x #undef INST_4x_ #undef INST_4i +#undef INST_4ii }; //! \} diff --git a/src/asmjit/x86/x86context.cpp b/src/asmjit/x86/x86context.cpp index 6dabc0f..49e6b7a 100644 --- a/src/asmjit/x86/x86context.cpp +++ b/src/asmjit/x86/x86context.cpp @@ -143,9 +143,9 @@ static void X86Context_annotateOperand(X86Context* self, } static bool X86Context_annotateInstruction(X86Context* self, - StringBuilder& sb, uint32_t code, const Operand* opList, uint32_t opCount) { + StringBuilder& sb, uint32_t instId, const Operand* opList, uint32_t opCount) { - sb.appendString(_x86InstInfo[code].getInstName()); + sb.appendString(_x86InstInfo[instId].getInstName()); for (uint32_t i = 0; i < opCount; i++) { if (i == 0) sb.appendChar(' '); @@ -207,7 +207,7 @@ static void X86Context_traceNode(X86Context* self, Node* node_) { case kNodeTypeInst: { InstNode* node = static_cast(node_); X86Context_annotateInstruction(self, sb, - node->getCode(), node->getOpList(), node->getOpCount()); + node->getInstId(), node->getOpList(), node->getOpCount()); break; } @@ -287,8 +287,8 @@ void X86Context::reset() { _stackFrameCell = NULL; _gaRegs[kX86RegClassGp ] = IntUtil::bits(_regCount.getGp()) & ~IntUtil::mask(kX86RegIndexSp); - _gaRegs[kX86RegClassFp ] = IntUtil::bits(_regCount.getFp()); _gaRegs[kX86RegClassMm ] = IntUtil::bits(_regCount.getMm()); + _gaRegs[kX86RegClassK ] = IntUtil::bits(_regCount.getK()); _gaRegs[kX86RegClassXyz] = IntUtil::bits(_regCount.getXyz()); _argBaseReg = kInvalidReg; // Used by patcher. @@ -426,8 +426,26 @@ static const X86SpecialInst x86SpecialInstBlend[] = { { 0 , kInvalidReg , kVarAttrInReg } }; -static ASMJIT_INLINE const X86SpecialInst* X86SpecialInst_get(uint32_t code, const Operand* opList, uint32_t opCount) { - switch (code) { +static const X86SpecialInst x86SpecialInstXsaveXrstor[] = { + { kInvalidReg , kInvalidReg , 0 }, + { kX86RegIndexDx, kInvalidReg , kVarAttrInReg }, + { kX86RegIndexAx, kInvalidReg , kVarAttrInReg } +}; + +static const X86SpecialInst x86SpecialInstXgetbv[] = { + { kX86RegIndexCx, kInvalidReg , kVarAttrInReg }, + { kInvalidReg , kX86RegIndexDx, kVarAttrOutReg }, + { kInvalidReg , kX86RegIndexAx, kVarAttrOutReg } +}; + +static const X86SpecialInst x86SpecialInstXsetbv[] = { + { kX86RegIndexCx, kInvalidReg , kVarAttrInReg }, + { kX86RegIndexDx, kInvalidReg , kVarAttrInReg }, + { kX86RegIndexAx, kInvalidReg , kVarAttrInReg } +}; + +static ASMJIT_INLINE const X86SpecialInst* X86SpecialInst_get(uint32_t instId, const Operand* opList, uint32_t opCount) { + switch (instId) { case kX86InstIdCpuid: return x86SpecialInstCpuid; @@ -600,6 +618,20 @@ static ASMJIT_INLINE const X86SpecialInst* X86SpecialInst_get(uint32_t code, con case kX86InstIdPblendvb: return x86SpecialInstBlend; + case kX86InstIdXrstor: + case kX86InstIdXrstor64: + case kX86InstIdXsave: + case kX86InstIdXsave64: + case kX86InstIdXsaveopt: + case kX86InstIdXsaveopt64: + return x86SpecialInstXsaveXrstor; + + case kX86InstIdXgetbv: + return x86SpecialInstXgetbv; + + case kX86InstIdXsetbv: + return x86SpecialInstXsetbv; + default: return NULL; } @@ -976,7 +1008,7 @@ void X86Context::emitMoveVarOnStack( X86Reg r0, r1; uint32_t regSize = compiler->getRegSize(); - uint32_t instCode; + uint32_t instId; switch (dstType) { case kVarTypeInt8: @@ -1002,7 +1034,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(1); r1.setCode(kX86RegTypeGpbLo, srcIndex); - instCode = (dstType == kVarTypeInt16 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; + instId = (dstType == kVarTypeInt16 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; goto _ExtendMovGpD; } @@ -1027,7 +1059,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(1); r1.setCode(kX86RegTypeGpbLo, srcIndex); - instCode = (dstType == kVarTypeInt32 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; + instId = (dstType == kVarTypeInt32 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; goto _ExtendMovGpD; } @@ -1036,7 +1068,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(2); r1.setCode(kX86RegTypeGpw, srcIndex); - instCode = (dstType == kVarTypeInt32 && srcType == kVarTypeInt16) ? kX86InstIdMovsx : kX86InstIdMovzx; + instId = (dstType == kVarTypeInt32 && srcType == kVarTypeInt16) ? kX86InstIdMovsx : kX86InstIdMovzx; goto _ExtendMovGpD; } @@ -1060,7 +1092,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(1); r1.setCode(kX86RegTypeGpbLo, srcIndex); - instCode = (dstType == kVarTypeInt64 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; + instId = (dstType == kVarTypeInt64 && srcType == kVarTypeInt8) ? kX86InstIdMovsx : kX86InstIdMovzx; goto _ExtendMovGpXQ; } @@ -1069,7 +1101,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(2); r1.setCode(kX86RegTypeGpw, srcIndex); - instCode = (dstType == kVarTypeInt64 && srcType == kVarTypeInt16) ? kX86InstIdMovsx : kX86InstIdMovzx; + instId = (dstType == kVarTypeInt64 && srcType == kVarTypeInt16) ? kX86InstIdMovsx : kX86InstIdMovzx; goto _ExtendMovGpXQ; } @@ -1078,7 +1110,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(4); r1.setCode(kX86RegTypeGpd, srcIndex); - instCode = kX86InstIdMovsxd; + instId = kX86InstIdMovsxd; if (dstType == kVarTypeInt64 && srcType == kVarTypeInt32) goto _ExtendMovGpXQ; else @@ -1104,7 +1136,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(1); r1.setCode(kX86RegTypeGpbLo, srcIndex); - instCode = kX86InstIdMovzx; + instId = kX86InstIdMovzx; goto _ExtendMovGpXQ; } @@ -1113,7 +1145,7 @@ void X86Context::emitMoveVarOnStack( r1.setSize(2); r1.setCode(kX86RegTypeGpw, srcIndex); - instCode = kX86InstIdMovzx; + instId = kX86InstIdMovzx; goto _ExtendMovGpXQ; } @@ -1175,7 +1207,7 @@ _ExtendMovGpD: r0.setSize(4); r0.setCode(kX86RegTypeGpd, srcIndex); - compiler->emit(instCode, r0, r1); + compiler->emit(instId, r0, r1); compiler->emit(kX86InstIdMov, m0, r0); return; @@ -1185,7 +1217,7 @@ _ExtendMovGpXQ: r0.setSize(8); r0.setCode(kX86RegTypeGpq, srcIndex); - compiler->emit(instCode, r0, r1); + compiler->emit(instId, r0, r1); compiler->emit(kX86InstIdMov, m0, r0); } else { @@ -1193,7 +1225,7 @@ _ExtendMovGpXQ: r0.setSize(4); r0.setCode(kX86RegTypeGpd, srcIndex); - compiler->emit(instCode, r0, r1); + compiler->emit(instId, r0, r1); _ExtendMovGpDQ: compiler->emit(kX86InstIdMov, m0, r0); @@ -1749,8 +1781,8 @@ static ASMJIT_INLINE Node* X86Context_getOppositeJccFlow(JumpNode* jNode) { // ============================================================================ //! \internal -static void X86Context_prepareSingleVarInst(uint32_t code, VarAttr* va) { - switch (code) { +static void X86Context_prepareSingleVarInst(uint32_t instId, VarAttr* va) { + switch (instId) { // - andn reg, reg ; Set all bits in reg to 0. // - xor/pxor reg, reg ; Set all bits in reg to 0. // - sub/psub reg, reg ; Set all bits in reg to 0. @@ -1763,7 +1795,7 @@ static void X86Context_prepareSingleVarInst(uint32_t code, VarAttr* va) { case kX86InstIdPsubsb : case kX86InstIdPsubsw : case kX86InstIdPsubusb : case kX86InstIdPsubusw : case kX86InstIdPcmpeqb : case kX86InstIdPcmpeqw : case kX86InstIdPcmpeqd : case kX86InstIdPcmpeqq : case kX86InstIdPcmpgtb : case kX86InstIdPcmpgtw : case kX86InstIdPcmpgtd : case kX86InstIdPcmpgtq : - va->delFlags(kVarAttrInReg); + va->andNotFlags(kVarAttrInReg); break; // - and reg, reg ; Nop. @@ -1772,7 +1804,7 @@ static void X86Context_prepareSingleVarInst(uint32_t code, VarAttr* va) { case kX86InstIdAnd : case kX86InstIdAndpd : case kX86InstIdAndps : case kX86InstIdPand : case kX86InstIdOr : case kX86InstIdOrpd : case kX86InstIdOrps : case kX86InstIdPor : case kX86InstIdXchg : - va->delFlags(kVarAttrOutReg); + va->andNotFlags(kVarAttrOutReg); break; } } @@ -1824,7 +1856,7 @@ static ASMJIT_INLINE X86RegMask X86Context_getUsedArgs(X86Context* self, X86Call const FuncInOut& arg = decl->getArg(i); if (!arg.hasRegIndex()) continue; - regs.add(x86VarTypeToClass(arg.getVarType()), IntUtil::mask(arg.getRegIndex())); + regs.or_(x86VarTypeToClass(arg.getVarType()), IntUtil::mask(arg.getRegIndex())); } return regs; @@ -2117,7 +2149,7 @@ Error X86Context::fetch() { goto _NoMemory; \ \ X86RegCount vaIndex; \ - vaIndex.makeIndex(regCount); \ + vaIndex.indexFromRegCount(regCount); \ \ map->_vaCount = vaCount; \ map->_count = regCount; \ @@ -2181,7 +2213,7 @@ Error X86Context::fetch() { regCount.add(_Vd_->getClass()); \ } \ \ - _Va_->addFlags(_Flags_); \ + _Va_->orFlags(_Flags_); \ _Va_->addVarCount(1); \ } while (0) @@ -2230,18 +2262,13 @@ _NextGroup: VI_BEGIN(); if (node->getHint() == kVarHintAlloc) { - uint32_t remain[kX86RegClassCount]; + uint32_t remain[_kX86RegClassManagedCount]; HintNode* cur = node; remain[kX86RegClassGp ] = _regCount.getGp() - 1 - func->hasFuncFlag(kFuncFlagIsNaked); - remain[kX86RegClassFp ] = _regCount.getFp(); remain[kX86RegClassMm ] = _regCount.getMm(); - - // Correct. Instead of using `getXyz()` which may be 32 in 64-bit - // mode we use `getGp()`. The reason is that not all registers are - // accessible by all instructions when using AVX512, this makes the - // algorithm safe. - remain[kX86RegClassXyz] = _regCount.getGp(); + remain[kX86RegClassK ] = _regCount.getK(); + remain[kX86RegClassXyz] = _regCount.getXyz(); // Merge as many alloc-hints as possible. for (;;) { @@ -2333,14 +2360,14 @@ _NextGroup: case kNodeTypeInst: { InstNode* node = static_cast(node_); - uint32_t code = node->getCode(); + uint32_t instId = node->getInstId(); uint32_t flags = node->getFlags(); Operand* opList = node->getOpList(); uint32_t opCount = node->getOpCount(); if (opCount) { - const X86InstExtendedInfo& extendedInfo = _x86InstInfo[code].getExtendedInfo(); + const X86InstExtendedInfo& extendedInfo = _x86InstInfo[instId].getExtendedInfo(); const X86SpecialInst* special = NULL; VI_BEGIN(); @@ -2348,7 +2375,7 @@ _NextGroup: if (extendedInfo.isFp()) flags |= kNodeFlagIsFp; - if (extendedInfo.isSpecial() && (special = X86SpecialInst_get(code, opList, opCount)) != NULL) + if (extendedInfo.isSpecial() && (special = X86SpecialInst_get(instId, opList, opCount)) != NULL) flags |= kNodeFlagIsSpecial; uint32_t gpAllowedMask = 0xFFFFFFFF; @@ -2363,7 +2390,7 @@ _NextGroup: VI_MERGE_VAR(vd, va, 0, gaRegs[vd->getClass()] & gpAllowedMask); if (static_cast(op)->isGpb()) { - va->addFlags(static_cast(op)->isGpbLo() ? kX86VarAttrGpbLo : kX86VarAttrGpbHi); + va->orFlags(static_cast(op)->isGpbLo() ? kX86VarAttrGpbLo : kX86VarAttrGpbHi); if (arch == kArchX86) { // If a byte register is accessed in 32-bit mode we have to limit // all allocable registers for that variable to eax/ebx/ecx/edx. @@ -2401,17 +2428,17 @@ _NextGroup: if (inReg != kInvalidReg) { uint32_t mask = IntUtil::mask(inReg); - inRegs.add(c, mask); + inRegs.or_(c, mask); va->addInRegs(mask); } if (outReg != kInvalidReg) { uint32_t mask = IntUtil::mask(outReg); - outRegs.add(c, mask); + outRegs.or_(c, mask); va->setOutRegIndex(outReg); } - va->addFlags(special[i].flags); + va->orFlags(special[i].flags); } else { uint32_t inFlags = kVarAttrInReg; @@ -2426,7 +2453,7 @@ _NextGroup: // but there are some exceptions based on the operands' size // and type. if (extendedInfo.isMove()) { - uint32_t movSize = extendedInfo.getMoveSize(); + uint32_t movSize = extendedInfo.getWriteSize(); uint32_t varSize = vd->getSize(); // Exception - If the source operand is a memory location @@ -2461,7 +2488,7 @@ _NextGroup: combinedFlags = inFlags; } // Imul. - else if (code == kX86InstIdImul && opCount == 3) { + else if (instId == kX86InstIdImul && opCount == 3) { combinedFlags = outFlags; } } @@ -2470,13 +2497,13 @@ _NextGroup: combinedFlags = inFlags; // Idiv is a special instruction, never handled here. - ASMJIT_ASSERT(code != kX86InstIdIdiv); + ASMJIT_ASSERT(instId != kX86InstIdIdiv); // Xchg/Xadd/Imul. - if (extendedInfo.isXchg() || (code == kX86InstIdImul && opCount == 3 && i == 1)) + if (extendedInfo.isXchg() || (instId == kX86InstIdImul && opCount == 3 && i == 1)) combinedFlags = inFlags | outFlags; } - va->addFlags(combinedFlags); + va->orFlags(combinedFlags); } } else if (op->isMem()) { @@ -2488,7 +2515,7 @@ _NextGroup: if (!vd->isStack()) { VI_MERGE_VAR(vd, va, 0, gaRegs[vd->getClass()] & gpAllowedMask); if (m->getMemType() == kMemTypeBaseIndex) { - va->addFlags(kVarAttrInReg); + va->orFlags(kVarAttrInReg); } else { uint32_t inFlags = kVarAttrInMem; @@ -2503,7 +2530,7 @@ _NextGroup: // as if it's just move to the register. It's just a bit // simpler as there are no special cases. if (extendedInfo.isMove()) { - uint32_t movSize = IntUtil::iMax(extendedInfo.getMoveSize(), m->getSize()); + uint32_t movSize = IntUtil::iMax(extendedInfo.getWriteSize(), m->getSize()); uint32_t varSize = vd->getSize(); if (movSize >= varSize) @@ -2523,7 +2550,7 @@ _NextGroup: combinedFlags = inFlags | outFlags; } - va->addFlags(combinedFlags); + va->orFlags(combinedFlags); } } } @@ -2533,7 +2560,7 @@ _NextGroup: vd = compiler->getVdById(m->getIndex()); VI_MERGE_VAR(vd, va, 0, gaRegs[kX86RegClassGp] & gpAllowedMask); va->andAllocableRegs(indexMask); - va->addFlags(kVarAttrInReg); + va->orFlags(kVarAttrInReg); } } } @@ -2543,7 +2570,7 @@ _NextGroup: // Handle instructions which result in zeros/ones or nop if used with the // same destination and source operand. if (vaCount == 1 && opCount >= 2 && opList[0].isVar() && opList[1].isVar() && !node->hasMemOp()) - X86Context_prepareSingleVarInst(code, &vaTmpList[0]); + X86Context_prepareSingleVarInst(instId, &vaTmpList[0]); } VI_END(node_); @@ -2577,7 +2604,7 @@ _NextGroup: // backward jump. This behavior can be overridden by using // `kInstOptionTaken` when the instruction is created. if (!jNode->isTaken() && opCount == 1 && jTargetFlowId <= flowId) { - jNode->addFlags(kNodeFlagIsTaken); + jNode->orFlags(kNodeFlagIsTaken); } } else if (jNext->isFetched()) { @@ -2623,18 +2650,18 @@ _NextGroup: if (arg.hasRegIndex()) { if (x86VarTypeToClass(aType) == vd->getClass()) { - va->addFlags(kVarAttrOutReg); + va->orFlags(kVarAttrOutReg); va->setOutRegIndex(arg.getRegIndex()); } else { - va->addFlags(kVarAttrOutConv); + va->orFlags(kVarAttrOutConv); } } else { if ((x86VarTypeToClass(aType) == vd->getClass()) || (vType == kX86VarTypeXmmSs && aType == kVarTypeFp32) || (vType == kX86VarTypeXmmSd && aType == kVarTypeFp64)) { - va->addFlags(kVarAttrOutMem); + va->orFlags(kVarAttrOutMem); } else { // TODO: [COMPILER] Not implemented. @@ -2678,8 +2705,8 @@ _NextGroup: // TODO: [COMPILER] Fix RetNode fetch. VI_MERGE_VAR(vd, va, 0, 0); va->setInRegs(i == 0 ? IntUtil::mask(kX86RegIndexAx) : IntUtil::mask(kX86RegIndexDx)); - va->addFlags(kVarAttrInReg); - inRegs.add(retClass, va->getInRegs()); + va->orFlags(kVarAttrInReg); + inRegs.or_(retClass, va->getInRegs()); } } } @@ -2719,7 +2746,7 @@ _NextGroup: vd = compiler->getVdById(target->getId()); VI_MERGE_VAR(vd, va, 0, 0); - va->addFlags(kVarAttrInReg | kVarAttrInCall); + va->orFlags(kVarAttrInReg | kVarAttrInCall); if (va->getInRegs() == 0) va->addAllocableRegs(gpAllocableMask); } @@ -2731,12 +2758,12 @@ _NextGroup: if (!vd->isStack()) { VI_MERGE_VAR(vd, va, 0, 0); if (m->getMemType() == kMemTypeBaseIndex) { - va->addFlags(kVarAttrInReg | kVarAttrInCall); + va->orFlags(kVarAttrInReg | kVarAttrInCall); if (va->getInRegs() == 0) va->addAllocableRegs(gpAllocableMask); } else { - va->addFlags(kVarAttrInMem | kVarAttrInCall); + va->orFlags(kVarAttrInMem | kVarAttrInCall); } } } @@ -2746,7 +2773,7 @@ _NextGroup: vd = compiler->getVdById(m->getIndex()); VI_MERGE_VAR(vd, va, 0, 0); - va->addFlags(kVarAttrInReg | kVarAttrInCall); + va->orFlags(kVarAttrInReg | kVarAttrInCall); if ((va->getInRegs() & ~indexMask) == 0) va->andAllocableRegs(gpAllocableMask & indexMask); } @@ -2769,10 +2796,10 @@ _NextGroup: if (vd->getClass() == argClass) { va->addInRegs(IntUtil::mask(arg.getRegIndex())); - va->addFlags(kVarAttrInReg | kVarAttrInArg); + va->orFlags(kVarAttrInReg | kVarAttrInArg); } else { - va->addFlags(kVarAttrInConv | kVarAttrInArg); + va->orFlags(kVarAttrInConv | kVarAttrInArg); } } // If this is a stack-based argument we insert SArgNode instead of @@ -2803,18 +2830,18 @@ _NextGroup: if (vd->getClass() == retClass) { va->setOutRegIndex(ret.getRegIndex()); - va->addFlags(kVarAttrOutReg | kVarAttrOutRet); + va->orFlags(kVarAttrOutReg | kVarAttrOutRet); } else { - va->addFlags(kVarAttrOutConv | kVarAttrOutRet); + va->orFlags(kVarAttrOutConv | kVarAttrOutRet); } } } // Init clobbered. - clobberedRegs.set(kX86RegClassGp , IntUtil::bits(_regCount.getGp()) & (~decl->getPreserved(kX86RegClassGp))); - clobberedRegs.set(kX86RegClassFp , IntUtil::bits(_regCount.getFp())); - clobberedRegs.set(kX86RegClassMm , IntUtil::bits(_regCount.getMm()) & (~decl->getPreserved(kX86RegClassMm))); + clobberedRegs.set(kX86RegClassGp , IntUtil::bits(_regCount.getGp()) & (~decl->getPreserved(kX86RegClassGp ))); + clobberedRegs.set(kX86RegClassMm , IntUtil::bits(_regCount.getMm()) & (~decl->getPreserved(kX86RegClassMm ))); + clobberedRegs.set(kX86RegClassK , IntUtil::bits(_regCount.getK()) & (~decl->getPreserved(kX86RegClassK ))); clobberedRegs.set(kX86RegClassXyz, IntUtil::bits(_regCount.getXyz()) & (~decl->getPreserved(kX86RegClassXyz))); VI_END(node_); @@ -2860,7 +2887,7 @@ Error X86Context::annotate() { if (node_->getComment() == NULL) { if (node_->getType() == kNodeTypeInst) { InstNode* node = static_cast(node_); - X86Context_annotateInstruction(this, sb, node->getCode(), node->getOpList(), node->getOpCount()); + X86Context_annotateInstruction(this, sb, node->getInstId(), node->getOpList(), node->getOpCount()); node_->setComment(static_cast(sa.dup(sb.getData(), sb.getLength() + 1))); maxLen = IntUtil::iMax(maxLen, static_cast(sb.getLength())); @@ -2962,7 +2989,7 @@ protected: //! Variable map. X86VarMap* _map; //! VarAttr list (per register class). - VarAttr* _vaList[4]; + VarAttr* _vaList[_kX86RegClassManagedCount]; //! Count of all VarAttr's. uint32_t _vaCount; @@ -2990,8 +3017,8 @@ ASMJIT_INLINE void X86BaseAlloc::init(Node* node, X86VarMap* map) { { VarAttr* va = map->getVaList(); _vaList[kX86RegClassGp ] = va; - _vaList[kX86RegClassFp ] = va + map->getVaStart(kX86RegClassFp ); _vaList[kX86RegClassMm ] = va + map->getVaStart(kX86RegClassMm ); + _vaList[kX86RegClassK ] = va + map->getVaStart(kX86RegClassK ); _vaList[kX86RegClassXyz] = va + map->getVaStart(kX86RegClassXyz); } @@ -3223,8 +3250,8 @@ ASMJIT_INLINE Error X86VarAlloc::run(Node* node_) { cleanup(); // Update clobbered mask. - _context->_clobberedRegs.add(_willAlloc); - _context->_clobberedRegs.add(map->_clobberedRegs); + _context->_clobberedRegs.or_(_willAlloc); + _context->_clobberedRegs.or_(map->_clobberedRegs); // Unuse. unuseAfter(); @@ -3245,7 +3272,7 @@ ASMJIT_INLINE void X86VarAlloc::init(Node* node, X86VarMap* map) { // add more registers when assigning registers to variables that don't need // any specific register. _willAlloc = map->_inRegs; - _willAlloc.add(map->_outRegs); + _willAlloc.or_(map->_outRegs); _willSpill.reset(); } @@ -3308,7 +3335,7 @@ ASMJIT_INLINE void X86VarAlloc::plan() { if ((mandatoryRegs | allocableRegs) & regMask) { va->setOutRegIndex(regIndex); - va->addFlags(kVarAttrAllocOutDone); + va->orFlags(kVarAttrAllocOutDone); if (mandatoryRegs & regMask) { // Case 'a' - 'willAlloc' contains initially all inRegs from all VarAttr's. @@ -3329,7 +3356,7 @@ ASMJIT_INLINE void X86VarAlloc::plan() { else { if ((mandatoryRegs | allocableRegs) & regMask) { va->setInRegIndex(regIndex); - va->addFlags(kVarAttrAllocInDone); + va->orFlags(kVarAttrAllocInDone); if (mandatoryRegs & regMask) { // Case 'a' - 'willAlloc' contains initially all inRegs from all VarAttr's. @@ -3377,7 +3404,7 @@ ASMJIT_INLINE void X86VarAlloc::plan() { } else { ASMJIT_TLOG("[RA-PLAN ] Done\n"); - va->addFlags(kVarAttrAllocInDone); + va->orFlags(kVarAttrAllocInDone); addVaDone(C); continue; } @@ -3563,12 +3590,12 @@ ASMJIT_INLINE void X86VarAlloc::alloc() { VarAttr* bVa = bVd->getVa(); _context->swapGp(aVd, bVd); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); // Doublehit, two registers allocated by a single swap. if (bVa != NULL && bVa->getInRegIndex() == aIndex) { - bVa->addFlags(kVarAttrAllocInDone); + bVa->orFlags(kVarAttrAllocInDone); addVaDone(C); } @@ -3579,7 +3606,7 @@ ASMJIT_INLINE void X86VarAlloc::alloc() { else if (aIndex != kInvalidReg) { _context->move(aVd, bIndex); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); didWork = true; @@ -3588,7 +3615,7 @@ ASMJIT_INLINE void X86VarAlloc::alloc() { else { _context->alloc(aVd, bIndex); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); didWork = true; @@ -3613,7 +3640,7 @@ ASMJIT_INLINE void X86VarAlloc::alloc() { _context->attach(vd, regIndex, false); } - va->addFlags(kVarAttrAllocOutDone); + va->orFlags(kVarAttrAllocOutDone); addVaDone(C); } } @@ -3730,7 +3757,7 @@ ASMJIT_INLINE void X86VarAlloc::modified() { uint32_t regMask = IntUtil::mask(regIndex); vd->setModified(true); - _context->_x86State._modified.add(C, regMask); + _context->_x86State._modified.or_(C, regMask); } } } @@ -3972,7 +3999,7 @@ ASMJIT_INLINE void X86CallAlloc::plan() { // is not clobbered (i.e. it will survive function call). if ((regMask & inRegs) != 0 || ((regMask & ~clobbered) != 0 && (vaFlags & kVarAttrUnuse) == 0)) { va->setInRegIndex(regIndex); - va->addFlags(kVarAttrAllocInDone); + va->orFlags(kVarAttrAllocInDone); addVaDone(C); } else { @@ -3985,7 +4012,7 @@ ASMJIT_INLINE void X86CallAlloc::plan() { willFree |= regMask; } else { - va->addFlags(kVarAttrAllocInDone); + va->orFlags(kVarAttrAllocInDone); addVaDone(C); } } @@ -4131,12 +4158,12 @@ ASMJIT_INLINE void X86CallAlloc::alloc() { if (C == kX86RegClassGp) { _context->swapGp(aVd, bVd); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); // Doublehit, two registers allocated by a single swap. if (bVa != NULL && bVa->getInRegIndex() == aIndex) { - bVa->addFlags(kVarAttrAllocInDone); + bVa->orFlags(kVarAttrAllocInDone); addVaDone(C); } @@ -4147,7 +4174,7 @@ ASMJIT_INLINE void X86CallAlloc::alloc() { else if (aIndex != kInvalidReg) { _context->move(aVd, bIndex); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); didWork = true; @@ -4156,7 +4183,7 @@ ASMJIT_INLINE void X86CallAlloc::alloc() { else { _context->alloc(aVd, bIndex); - aVa->addFlags(kVarAttrAllocInDone); + aVa->orFlags(kVarAttrAllocInDone); addVaDone(C); didWork = true; @@ -4227,7 +4254,7 @@ ASMJIT_INLINE void X86CallAlloc::duplicate() { for (uint32_t dupIndex = 0; inRegs != 0; dupIndex++, inRegs >>= 1) { if (inRegs & 0x1) { _context->emitMove(vd, dupIndex, regIndex, "Duplicate"); - _context->_clobberedRegs.add(C, IntUtil::mask(dupIndex)); + _context->_clobberedRegs.or_(C, IntUtil::mask(dupIndex)); } } } @@ -4467,8 +4494,8 @@ static Error X86Context_initFunc(X86Context* self, X86FuncNode* func) { // Setup "Save-Restore" registers. func->_saveRestoreRegs.set(kX86RegClassGp , clobberedRegs.get(kX86RegClassGp ) & decl->getPreserved(kX86RegClassGp )); - func->_saveRestoreRegs.set(kX86RegClassFp , 0); func->_saveRestoreRegs.set(kX86RegClassMm , clobberedRegs.get(kX86RegClassMm ) & decl->getPreserved(kX86RegClassMm )); + func->_saveRestoreRegs.set(kX86RegClassK , 0); func->_saveRestoreRegs.set(kX86RegClassXyz, clobberedRegs.get(kX86RegClassXyz) & decl->getPreserved(kX86RegClassXyz)); ASMJIT_ASSERT(!func->_saveRestoreRegs.has(kX86RegClassGp, IntUtil::mask(kX86RegIndexSp))); @@ -4540,7 +4567,7 @@ static Error X86Context_initFunc(X86Context* self, X86FuncNode* func) { // from '_saveRestoreRegs' in case that it is preserved. fRegMask = IntUtil::mask(fRegIndex); if ((fRegMask & decl->getPreserved(kX86RegClassGp)) != 0) { - func->_saveRestoreRegs.del(kX86RegClassGp, fRegMask); + func->_saveRestoreRegs.andNot(kX86RegClassGp, fRegMask); func->_isStackFrameRegPreserved = true; } @@ -4556,7 +4583,7 @@ static Error X86Context_initFunc(X86Context* self, X86FuncNode* func) { else stackFrameCopyRegs = IntUtil::keepNOnesFromRight(stackFrameCopyRegs, IntUtil::iMin(maxRegs, 2)); - func->_saveRestoreRegs.add(kX86RegClassGp, stackFrameCopyRegs & decl->getPreserved(kX86RegClassGp)); + func->_saveRestoreRegs.or_(kX86RegClassGp, stackFrameCopyRegs & decl->getPreserved(kX86RegClassGp)); IntUtil::indexNOnesFromRight(func->_stackFrameCopyGpIndex, stackFrameCopyRegs, maxRegs); } } @@ -5096,7 +5123,7 @@ _NextGroup: } next = node_->getNext(); - node_->addFlags(kNodeFlagIsTranslated); + node_->orFlags(kNodeFlagIsTranslated); ASMJIT_TSEC({ X86Context_traceNode(this, node_); @@ -5143,7 +5170,7 @@ _NextGroup: VarData* vd = va->getVd(); if (!liveness->getBit(vd->getContextId())) - va->addFlags(kVarAttrUnuse); + va->orFlags(kVarAttrUnuse); } } } @@ -5321,7 +5348,7 @@ _NextGroup: for (;;) { Node* next = node_->getNext(); - node_->addFlags(kNodeFlagIsScheduled); + node_->orFlags(kNodeFlagIsScheduled); // Shouldn't happen here, investigate if hit. ASMJIT_ASSERT(node_ != stop); @@ -5508,7 +5535,7 @@ static ASMJIT_INLINE Error X86Context_serialize(X86Context* self, X86Assembler* case kNodeTypeInst: { InstNode* node = static_cast(node_); - uint32_t code = node->getCode(); + uint32_t instId = node->getInstId(); uint32_t opCount = node->getOpCount(); const Operand* opList = node->getOpList(); @@ -5517,9 +5544,10 @@ static ASMJIT_INLINE Error X86Context_serialize(X86Context* self, X86Assembler* const Operand* o0 = &noOperand; const Operand* o1 = &noOperand; const Operand* o2 = &noOperand; + const Operand* o3 = &noOperand; if (node->isSpecial()) { - switch (code) { + switch (instId) { case kX86InstIdCpuid: break; @@ -5632,6 +5660,19 @@ static ASMJIT_INLINE Error X86Context_serialize(X86Context* self, X86Assembler* case kX86InstIdRepneScasB: case kX86InstIdRepneScasD: case kX86InstIdRepneScasQ: case kX86InstIdRepneScasW: break; + case kX86InstIdXrstor: + case kX86InstIdXrstor64: + case kX86InstIdXsave: + case kX86InstIdXsave64: + case kX86InstIdXsaveopt: + case kX86InstIdXsaveopt64: + o0 = &opList[0]; + break; + + case kX86InstIdXgetbv: + case kX86InstIdXsetbv: + break; + default: ASMJIT_ASSERT(!"Reached"); } @@ -5640,10 +5681,11 @@ static ASMJIT_INLINE Error X86Context_serialize(X86Context* self, X86Assembler* if (opCount > 0) o0 = &opList[0]; if (opCount > 1) o1 = &opList[1]; if (opCount > 2) o2 = &opList[2]; + if (opCount > 3) o3 = &opList[3]; } - // We use this form, because it is the main one. - assembler->emit(code, *o0, *o1, *o2); + // Should call _emit() directly as 4 operand form is the main form. + assembler->emit(instId, *o0, *o1, *o2, *o3); break; } diff --git a/src/asmjit/x86/x86context_p.h b/src/asmjit/x86/x86context_p.h index 64bfc11..fb2301d 100644 --- a/src/asmjit/x86/x86context_p.h +++ b/src/asmjit/x86/x86context_p.h @@ -150,8 +150,8 @@ struct X86Context : public Context { vd->setModified(modified); _x86State.getListByClass(C)[regIndex] = vd; - _x86State._occupied.add(C, regMask); - _x86State._modified.add(C, static_cast(modified) << regIndex); + _x86State._occupied.or_(C, regMask); + _x86State._modified.or_(C, static_cast(modified) << regIndex); ASMJIT_X86_CHECK_STATE } @@ -174,8 +174,8 @@ struct X86Context : public Context { vd->setModified(false); _x86State.getListByClass(C)[regIndex] = NULL; - _x86State._occupied.del(C, regMask); - _x86State._modified.del(C, regMask); + _x86State._occupied.andNot(C, regMask); + _x86State._modified.andNot(C, regMask); ASMJIT_X86_CHECK_STATE } @@ -244,7 +244,7 @@ struct X86Context : public Context { emitSave(vd, regIndex, "Save"); vd->setModified(false); - _x86State._modified.del(C, regMask); + _x86State._modified.andNot(C, regMask); ASMJIT_X86_CHECK_STATE } @@ -381,7 +381,7 @@ struct X86Context : public Context { uint32_t regMask = IntUtil::mask(regIndex); vd->setModified(true); - _x86State._modified.add(C, regMask); + _x86State._modified.or_(C, regMask); ASMJIT_X86_CHECK_STATE } diff --git a/src/asmjit/x86/x86cpuinfo.cpp b/src/asmjit/x86/x86cpuinfo.cpp index 75ed0b0..d8ed57a 100644 --- a/src/asmjit/x86/x86cpuinfo.cpp +++ b/src/asmjit/x86/x86cpuinfo.cpp @@ -88,20 +88,29 @@ _Skip: // in 64-bit mode not allows to use inline assembler, so we need intrinsic and // we need also asm version. +union X86XCR { + uint64_t value; + + struct { + uint32_t eax; + uint32_t edx; + }; +}; + // callCpuId() and detectCpuInfo() for x86 and x64 platforms begins here. #if defined(ASMJIT_HOST_X86) || defined(ASMJIT_HOST_X64) -void X86CpuUtil::callCpuId(uint32_t inEax, uint32_t inEcx, X86CpuId* outResult) { +void X86CpuUtil::callCpuId(uint32_t inEax, uint32_t inEcx, X86CpuId* result) { #if defined(_MSC_VER) // 2009-02-05: Thanks to Mike Tajmajer for supporting VC7.1 compiler. // ASMJIT_HOST_X64 is here only for readibility, only VS2005 can compile 64-bit code. # if _MSC_VER >= 1400 || defined(ASMJIT_HOST_X64) // Done by intrinsics. - __cpuidex(reinterpret_cast(outResult->i), inEax, inEcx); + __cpuidex(reinterpret_cast(result->i), inEax, inEcx); # else // _MSC_VER < 1400 uint32_t cpuid_eax = inEax; uint32_t cpuid_ecx = inCax; - uint32_t* cpuid_out = outResult->i; + uint32_t* cpuid_out = result->i; __asm { mov eax, cpuid_eax @@ -119,18 +128,50 @@ void X86CpuUtil::callCpuId(uint32_t inEax, uint32_t inEcx, X86CpuId* outResult) // Note, patched to preserve ebx/rbx register which is used by GCC. # if defined(ASMJIT_HOST_X86) # define __myCpuId(inEax, inEcx, outEax, outEbx, outEcx, outEdx) \ - asm ("mov %%ebx, %%edi\n" \ - "cpuid\n" \ - "xchg %%edi, %%ebx\n" \ - : "=a" (outEax), "=D" (outEbx), "=c" (outEcx), "=d" (outEdx) : "a" (inEax), "c" (inEcx)) + __asm__ __volatile__( \ + "mov %%ebx, %%edi\n" \ + "cpuid\n" \ + "xchg %%edi, %%ebx\n" \ + : "=a" (outEax), "=D" (outEbx), "=c" (outEcx), "=d" (outEdx) \ + : "a" (inEax), "c" (inEcx)) # else # define __myCpuId(inEax, inEcx, outEax, outEbx, outEcx, outEdx) \ - asm ("mov %%rbx, %%rdi\n" \ - "cpuid\n" \ - "xchg %%rdi, %%rbx\n" \ - : "=a" (outEax), "=D" (outEbx), "=c" (outEcx), "=d" (outEdx) : "a" (inEax), "c" (inEcx)) + __asm__ __volatile__( \ + "mov %%rbx, %%rdi\n" \ + "cpuid\n" \ + "xchg %%rdi, %%rbx\n" \ + : "=a" (outEax), "=D" (outEbx), "=c" (outEcx), "=d" (outEdx) \ + : "a" (inEax), "c" (inEcx)) # endif - __myCpuId(inEax, inEcx, outResult->eax, outResult->ebx, outResult->ecx, outResult->edx); + __myCpuId(inEax, inEcx, result->eax, result->ebx, result->ecx, result->edx); +#endif // COMPILER +} + +static void callXGetBV(uint32_t inEcx, X86XCR* result) { + +#if defined(_MSC_VER) + +# if (_MSC_FULL_VER >= 160040219) // 2010SP1+ + result->value = _xgetbv(inEcx); +# else + result->value = 0; +# endif + +#elif defined(__GNUC__) + + unsigned int eax, edx; +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) + __asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(inEcx)); +# else + __asm__ __volatile__(".byte 0x0F, 0x01, 0xd0" : "=a"(eax), "=d"(edx) : "c"(inEcx)); +# endif + result->eax = eax; + result->edx = edx; + +#else + + result->value = 0; + #endif // COMPILER } @@ -138,7 +179,11 @@ void X86CpuUtil::detect(X86CpuInfo* cpuInfo) { X86CpuId regs; uint32_t i; - uint32_t maxId; + uint32_t maxBaseId; + + bool maybeMPX = false; + X86XCR xcr0; + xcr0.value = 0; // Clear everything except the '_size' member. ::memset(reinterpret_cast(cpuInfo) + sizeof(uint32_t), @@ -148,14 +193,13 @@ void X86CpuUtil::detect(X86CpuInfo* cpuInfo) { cpuInfo->_hwThreadsCount = CpuInfo::detectHwThreadsCount(); // -------------------------------------------------------------------------- - // [CPUID EAX=0x00000000] + // [CPUID EAX=0x0] // -------------------------------------------------------------------------- // Get vendor string/id. - callCpuId(0, 0, ®s); - - maxId = regs.eax; + callCpuId(0x0, 0x0, ®s); + maxBaseId = regs.eax; ::memcpy(cpuInfo->_vendorString, ®s.ebx, 4); ::memcpy(cpuInfo->_vendorString + 4, ®s.edx, 4); ::memcpy(cpuInfo->_vendorString + 8, ®s.ecx, 4); @@ -168,79 +212,134 @@ void X86CpuUtil::detect(X86CpuInfo* cpuInfo) { } // -------------------------------------------------------------------------- - // [CPUID EAX=0x00000001] + // [CPUID EAX=0x1] // -------------------------------------------------------------------------- - // Get feature flags in ecx/edx and family/model in eax. - callCpuId(1, 0, ®s); + if (maxBaseId >= 0x1) { + // Get feature flags in ECX/EDX and family/model in EAX. + callCpuId(0x1, 0x0, ®s); - // Fill family and model fields. - cpuInfo->_family = (regs.eax >> 8) & 0x0F; - cpuInfo->_model = (regs.eax >> 4) & 0x0F; - cpuInfo->_stepping = (regs.eax ) & 0x0F; + // Fill family and model fields. + cpuInfo->_family = (regs.eax >> 8) & 0x0F; + cpuInfo->_model = (regs.eax >> 4) & 0x0F; + cpuInfo->_stepping = (regs.eax ) & 0x0F; - // Use extended family and model fields. - if (cpuInfo->_family == 0x0F) { - cpuInfo->_family += ((regs.eax >> 20) & 0xFF); - cpuInfo->_model += ((regs.eax >> 16) & 0x0F) << 4; - } + // Use extended family and model fields. + if (cpuInfo->_family == 0x0F) { + cpuInfo->_family += ((regs.eax >> 20) & 0xFF); + cpuInfo->_model += ((regs.eax >> 16) & 0x0F) << 4; + } - cpuInfo->_processorType = ((regs.eax >> 12) & 0x03); - cpuInfo->_brandIndex = ((regs.ebx ) & 0xFF); - cpuInfo->_flushCacheLineSize = ((regs.ebx >> 8) & 0xFF) * 8; - cpuInfo->_maxLogicalProcessors = ((regs.ebx >> 16) & 0xFF); + cpuInfo->_processorType = ((regs.eax >> 12) & 0x03); + cpuInfo->_brandIndex = ((regs.ebx ) & 0xFF); + cpuInfo->_flushCacheLineSize = ((regs.ebx >> 8) & 0xFF) * 8; + cpuInfo->_maxLogicalProcessors = ((regs.ebx >> 16) & 0xFF); - if (regs.ecx & 0x00000001U) cpuInfo->addFeature(kX86CpuFeatureSse3); - if (regs.ecx & 0x00000002U) cpuInfo->addFeature(kX86CpuFeaturePclmulqdq); - if (regs.ecx & 0x00000008U) cpuInfo->addFeature(kX86CpuFeatureMonitorMWait); - if (regs.ecx & 0x00000200U) cpuInfo->addFeature(kX86CpuFeatureSsse3); - if (regs.ecx & 0x00002000U) cpuInfo->addFeature(kX86CpuFeatureCmpXchg16B); - if (regs.ecx & 0x00080000U) cpuInfo->addFeature(kX86CpuFeatureSse41); - if (regs.ecx & 0x00100000U) cpuInfo->addFeature(kX86CpuFeatureSse42); - if (regs.ecx & 0x00400000U) cpuInfo->addFeature(kX86CpuFeatureMovbe); - if (regs.ecx & 0x00800000U) cpuInfo->addFeature(kX86CpuFeaturePopcnt); - if (regs.ecx & 0x02000000U) cpuInfo->addFeature(kX86CpuFeatureAesni); - if (regs.ecx & 0x40000000U) cpuInfo->addFeature(kX86CpuFeatureRdrand); + if (regs.ecx & 0x00000001U) cpuInfo->addFeature(kX86CpuFeatureSSE3); + if (regs.ecx & 0x00000002U) cpuInfo->addFeature(kX86CpuFeaturePCLMULQDQ); + if (regs.ecx & 0x00000008U) cpuInfo->addFeature(kX86CpuFeatureMONITOR); + if (regs.ecx & 0x00000200U) cpuInfo->addFeature(kX86CpuFeatureSSSE3); + if (regs.ecx & 0x00002000U) cpuInfo->addFeature(kX86CpuFeatureCMPXCHG16B); + if (regs.ecx & 0x00080000U) cpuInfo->addFeature(kX86CpuFeatureSSE4_1); + if (regs.ecx & 0x00100000U) cpuInfo->addFeature(kX86CpuFeatureSSE4_2); + if (regs.ecx & 0x00400000U) cpuInfo->addFeature(kX86CpuFeatureMOVBE); + if (regs.ecx & 0x00800000U) cpuInfo->addFeature(kX86CpuFeaturePOPCNT); + if (regs.ecx & 0x02000000U) cpuInfo->addFeature(kX86CpuFeatureAESNI); + if (regs.ecx & 0x04000000U) cpuInfo->addFeature(kX86CpuFeatureXSave); + if (regs.ecx & 0x08000000U) cpuInfo->addFeature(kX86CpuFeatureXSaveOS); + if (regs.ecx & 0x40000000U) cpuInfo->addFeature(kX86CpuFeatureRDRAND); - if (regs.edx & 0x00000010U) cpuInfo->addFeature(kX86CpuFeatureRdtsc); - if (regs.edx & 0x00000100U) cpuInfo->addFeature(kX86CpuFeatureCmpXchg8B); - if (regs.edx & 0x00008000U) cpuInfo->addFeature(kX86CpuFeatureCmov); - if (regs.edx & 0x00800000U) cpuInfo->addFeature(kX86CpuFeatureMmx); - if (regs.edx & 0x01000000U) cpuInfo->addFeature(kX86CpuFeatureFxsr); - if (regs.edx & 0x02000000U) cpuInfo->addFeature(kX86CpuFeatureSse).addFeature(kX86CpuFeatureMmxExt); - if (regs.edx & 0x04000000U) cpuInfo->addFeature(kX86CpuFeatureSse).addFeature(kX86CpuFeatureSse2); - if (regs.edx & 0x10000000U) cpuInfo->addFeature(kX86CpuFeatureMultithreading); + if (regs.edx & 0x00000010U) cpuInfo->addFeature(kX86CpuFeatureRDTSC); + if (regs.edx & 0x00000100U) cpuInfo->addFeature(kX86CpuFeatureCMPXCHG8B); + if (regs.edx & 0x00008000U) cpuInfo->addFeature(kX86CpuFeatureCMOV); + if (regs.edx & 0x00080000U) cpuInfo->addFeature(kX86CpuFeatureCLFLUSH); + if (regs.edx & 0x00800000U) cpuInfo->addFeature(kX86CpuFeatureMMX); + if (regs.edx & 0x01000000U) cpuInfo->addFeature(kX86CpuFeatureFXSR); + if (regs.edx & 0x02000000U) cpuInfo->addFeature(kX86CpuFeatureSSE).addFeature(kX86CpuFeatureMMX2); + if (regs.edx & 0x04000000U) cpuInfo->addFeature(kX86CpuFeatureSSE).addFeature(kX86CpuFeatureSSE2); + if (regs.edx & 0x10000000U) cpuInfo->addFeature(kX86CpuFeatureMT); - if (cpuInfo->_vendorId == kCpuVendorAmd && (regs.edx & 0x10000000U)) { - // AMD sets Multithreading to ON if it has more cores. - if (cpuInfo->_hwThreadsCount == 1) + // AMD sets Multithreading to ON if it has two or more cores. + if (cpuInfo->_hwThreadsCount == 1 && cpuInfo->_vendorId == kCpuVendorAmd && (regs.edx & 0x10000000U)) { cpuInfo->_hwThreadsCount = 2; + } + + // Get the content of XCR0 if supported by CPU and enabled by OS. + if ((regs.ecx & 0x0C000000U) == 0x0C000000U) { + callXGetBV(0, &xcr0); + } + + // Detect AVX+. + if (regs.ecx & 0x10000000U) { + // - XCR0[2:1] == 11b + // XMM & YMM states are enabled by OS. + if ((xcr0.eax & 0x00000006U) == 0x00000006U) { + cpuInfo->addFeature(kX86CpuFeatureAVX); + + if (regs.ecx & 0x00000800U) cpuInfo->addFeature(kX86CpuFeatureXOP); + if (regs.ecx & 0x00004000U) cpuInfo->addFeature(kX86CpuFeatureFMA3); + if (regs.ecx & 0x00010000U) cpuInfo->addFeature(kX86CpuFeatureFMA4); + if (regs.ecx & 0x20000000U) cpuInfo->addFeature(kX86CpuFeatureF16C); + } + } } - // Detect AVX. - if (regs.ecx & 0x10000000U) { - cpuInfo->addFeature(kX86CpuFeatureAvx); - - if (regs.ecx & 0x00000800U) cpuInfo->addFeature(kX86CpuFeatureXop); - if (regs.ecx & 0x00004000U) cpuInfo->addFeature(kX86CpuFeatureFma3); - if (regs.ecx & 0x00010000U) cpuInfo->addFeature(kX86CpuFeatureFma4); - if (regs.ecx & 0x20000000U) cpuInfo->addFeature(kX86CpuFeatureF16C); - } + // -------------------------------------------------------------------------- + // [CPUID EAX=0x7 ECX=0x0] + // -------------------------------------------------------------------------- // Detect new features if the processor supports CPUID-07. - if (maxId >= 7) { - callCpuId(7, 0, ®s); + if (maxBaseId >= 0x7) { + callCpuId(0x7, 0x0, ®s); - if (regs.ebx & 0x00000001) cpuInfo->addFeature(kX86CpuFeatureFsGsBase); - if (regs.ebx & 0x00000008) cpuInfo->addFeature(kX86CpuFeatureBmi); - if (regs.ebx & 0x00000010) cpuInfo->addFeature(kX86CpuFeatureHle); - if (regs.ebx & 0x00000100) cpuInfo->addFeature(kX86CpuFeatureBmi2); - if (regs.ebx & 0x00000200) cpuInfo->addFeature(kX86CpuFeatureRepMovsbStosbExt); - if (regs.ebx & 0x00000800) cpuInfo->addFeature(kX86CpuFeatureRtm); + if (regs.ebx & 0x00000001U) cpuInfo->addFeature(kX86CpuFeatureFSGSBase); + if (regs.ebx & 0x00000008U) cpuInfo->addFeature(kX86CpuFeatureBMI); + if (regs.ebx & 0x00000010U) cpuInfo->addFeature(kX86CpuFeatureHLE); + if (regs.ebx & 0x00000100U) cpuInfo->addFeature(kX86CpuFeatureBMI2); + if (regs.ebx & 0x00000200U) cpuInfo->addFeature(kX86CpuFeatureMOVSBSTOSBOpt); + if (regs.ebx & 0x00000800U) cpuInfo->addFeature(kX86CpuFeatureRTM); + if (regs.ebx & 0x00004000U) maybeMPX = true; + if (regs.ebx & 0x00040000U) cpuInfo->addFeature(kX86CpuFeatureRDSEED); + if (regs.ebx & 0x00080000U) cpuInfo->addFeature(kX86CpuFeatureADX); + if (regs.ebx & 0x00800000U) cpuInfo->addFeature(kX86CpuFeatureCLFLUSHOpt); + if (regs.ebx & 0x20000000U) cpuInfo->addFeature(kX86CpuFeatureSHA); - // AVX2 depends on AVX. - if (cpuInfo->hasFeature(kX86CpuFeatureAvx)) { - if (regs.ebx & 0x00000020) cpuInfo->addFeature(kX86CpuFeatureAvx2); + if (regs.ecx & 0x00000001U) cpuInfo->addFeature(kX86CpuFeaturePREFETCHWT1); + + // Detect AVX2. + if (cpuInfo->hasFeature(kX86CpuFeatureAVX)) { + if (regs.ebx & 0x00000020U) cpuInfo->addFeature(kX86CpuFeatureAVX2); + } + + // Detect AVX-512+. + if (regs.ebx & 0x00010000U) { + // - XCR0[2:1] == 11b + // XMM & YMM states are enabled by OS. + // - XCR0[7:5] == 111b + // Upper 256-bit of ZMM0-XMM15 and ZMM16-ZMM31 state are enabled by OS. + if ((xcr0.eax & 0x00000076U) == 0x00000076U) { + cpuInfo->addFeature(kX86CpuFeatureAVX512F); + + if (regs.ebx & 0x00020000U) cpuInfo->addFeature(kX86CpuFeatureAVX512DQ); + if (regs.ebx & 0x04000000U) cpuInfo->addFeature(kX86CpuFeatureAVX512PF); + if (regs.ebx & 0x08000000U) cpuInfo->addFeature(kX86CpuFeatureAVX512ER); + if (regs.ebx & 0x10000000U) cpuInfo->addFeature(kX86CpuFeatureAVX512CD); + if (regs.ebx & 0x40000000U) cpuInfo->addFeature(kX86CpuFeatureAVX512BW); + if (regs.ebx & 0x80000000U) cpuInfo->addFeature(kX86CpuFeatureAVX512VL); + } + } + } + + // -------------------------------------------------------------------------- + // [CPUID EAX=0xD, ECX=0x0] + // -------------------------------------------------------------------------- + + if (maxBaseId >= 0xD && maybeMPX) { + callCpuId(0xD, 0x0, ®s); + + // Both CPUID result and XCR0 has to be enabled to have support for MPX. + if (((regs.eax & xcr0.eax) & 0x00000018U) == 0x00000018U) { + cpuInfo->addFeature(kX86CpuFeatureMPX); } } @@ -250,28 +349,28 @@ void X86CpuUtil::detect(X86CpuInfo* cpuInfo) { // Calling cpuid with 0x80000000 as the in argument gets the number of valid // extended IDs. - callCpuId(0x80000000, 0, ®s); + callCpuId(0x80000000, 0x0, ®s); uint32_t maxExtId = IntUtil::iMin(regs.eax, 0x80000004); uint32_t* brand = reinterpret_cast(cpuInfo->_brandString); for (i = 0x80000001; i <= maxExtId; i++) { - callCpuId(i, 0, ®s); + callCpuId(i, 0x0, ®s); switch (i) { case 0x80000001: if (regs.ecx & 0x00000001U) cpuInfo->addFeature(kX86CpuFeatureLahfSahf); - if (regs.ecx & 0x00000020U) cpuInfo->addFeature(kX86CpuFeatureLzcnt); - if (regs.ecx & 0x00000040U) cpuInfo->addFeature(kX86CpuFeatureSse4A); - if (regs.ecx & 0x00000080U) cpuInfo->addFeature(kX86CpuFeatureMsse); - if (regs.ecx & 0x00000100U) cpuInfo->addFeature(kX86CpuFeaturePrefetch); + if (regs.ecx & 0x00000020U) cpuInfo->addFeature(kX86CpuFeatureLZCNT); + if (regs.ecx & 0x00000040U) cpuInfo->addFeature(kX86CpuFeatureSSE4A); + if (regs.ecx & 0x00000080U) cpuInfo->addFeature(kX86CpuFeatureMSSE); + if (regs.ecx & 0x00000100U) cpuInfo->addFeature(kX86CpuFeaturePREFETCH); - if (regs.edx & 0x00100000U) cpuInfo->addFeature(kX86CpuFeatureExecuteDisableBit); - if (regs.edx & 0x00200000U) cpuInfo->addFeature(kX86CpuFeatureFfxsr); - if (regs.edx & 0x00400000U) cpuInfo->addFeature(kX86CpuFeatureMmxExt); - if (regs.edx & 0x08000000U) cpuInfo->addFeature(kX86CpuFeatureRdtscp); - if (regs.edx & 0x40000000U) cpuInfo->addFeature(kX86CpuFeature3dNowExt).addFeature(kX86CpuFeatureMmxExt); - if (regs.edx & 0x80000000U) cpuInfo->addFeature(kX86CpuFeature3dNow); + if (regs.edx & 0x00100000U) cpuInfo->addFeature(kX86CpuFeatureNX); + if (regs.edx & 0x00200000U) cpuInfo->addFeature(kX86CpuFeatureFXSROpt); + if (regs.edx & 0x00400000U) cpuInfo->addFeature(kX86CpuFeatureMMX2); + if (regs.edx & 0x08000000U) cpuInfo->addFeature(kX86CpuFeatureRDTSCP); + if (regs.edx & 0x40000000U) cpuInfo->addFeature(kX86CpuFeature3DNOW2).addFeature(kX86CpuFeatureMMX2); + if (regs.edx & 0x80000000U) cpuInfo->addFeature(kX86CpuFeature3DNOW); break; case 0x80000002: diff --git a/src/asmjit/x86/x86cpuinfo.h b/src/asmjit/x86/x86cpuinfo.h index 7e71f2c..47c3e41 100644 --- a/src/asmjit/x86/x86cpuinfo.h +++ b/src/asmjit/x86/x86cpuinfo.h @@ -31,92 +31,123 @@ struct X86CpuInfo; //! X86 CPU features. ASMJIT_ENUM(kX86CpuFeature) { + //! Cpu has Not-Execute-Bit. + kX86CpuFeatureNX = 0, //! Cpu has multithreading. - kX86CpuFeatureMultithreading = 1, - //! Cpu has execute disable bit. - kX86CpuFeatureExecuteDisableBit, + kX86CpuFeatureMT, //! Cpu has RDTSC. - kX86CpuFeatureRdtsc, + kX86CpuFeatureRDTSC, //! Cpu has RDTSCP. - kX86CpuFeatureRdtscp, + kX86CpuFeatureRDTSCP, //! Cpu has CMOV. - kX86CpuFeatureCmov, + kX86CpuFeatureCMOV, //! Cpu has CMPXCHG8B. - kX86CpuFeatureCmpXchg8B, - //! Cpu has CMPXCHG16B (x64). - kX86CpuFeatureCmpXchg16B, + kX86CpuFeatureCMPXCHG8B, + //! Cpu has CMPXCHG16B (X64). + kX86CpuFeatureCMPXCHG16B, //! Cpu has CLFUSH. - kX86CpuFeatureClflush, + kX86CpuFeatureCLFLUSH, + //! Cpu has CLFUSH (Optimized). + kX86CpuFeatureCLFLUSHOpt, //! Cpu has PREFETCH. - kX86CpuFeaturePrefetch, + kX86CpuFeaturePREFETCH, + //! Cpu has PREFETCHWT1. + kX86CpuFeaturePREFETCHWT1, //! Cpu has LAHF/SAHF. kX86CpuFeatureLahfSahf, //! Cpu has FXSAVE/FXRSTOR. - kX86CpuFeatureFxsr, - //! Cpu has FXSAVE/FXRSTOR optimizations. - kX86CpuFeatureFfxsr, + kX86CpuFeatureFXSR, + //! Cpu has FXSAVE/FXRSTOR (Optimized). + kX86CpuFeatureFXSROpt, //! Cpu has MMX. - kX86CpuFeatureMmx, + kX86CpuFeatureMMX, //! Cpu has extended MMX. - kX86CpuFeatureMmxExt, + kX86CpuFeatureMMX2, //! Cpu has 3dNow! - kX86CpuFeature3dNow, + kX86CpuFeature3DNOW, //! Cpu has enchanced 3dNow! - kX86CpuFeature3dNowExt, + kX86CpuFeature3DNOW2, //! Cpu has SSE. - kX86CpuFeatureSse, + kX86CpuFeatureSSE, //! Cpu has SSE2. - kX86CpuFeatureSse2, + kX86CpuFeatureSSE2, //! Cpu has SSE3. - kX86CpuFeatureSse3, - //! Cpu has Supplemental SSE3 (SSSE3). - kX86CpuFeatureSsse3, + kX86CpuFeatureSSE3, + //! Cpu has SSSE3. + kX86CpuFeatureSSSE3, //! Cpu has SSE4.A. - kX86CpuFeatureSse4A, + kX86CpuFeatureSSE4A, //! Cpu has SSE4.1. - kX86CpuFeatureSse41, + kX86CpuFeatureSSE4_1, //! Cpu has SSE4.2. - kX86CpuFeatureSse42, + kX86CpuFeatureSSE4_2, //! Cpu has Misaligned SSE (MSSE). - kX86CpuFeatureMsse, + kX86CpuFeatureMSSE, //! Cpu has MONITOR and MWAIT. - kX86CpuFeatureMonitorMWait, + kX86CpuFeatureMONITOR, //! Cpu has MOVBE. - kX86CpuFeatureMovbe, + kX86CpuFeatureMOVBE, //! Cpu has POPCNT. - kX86CpuFeaturePopcnt, + kX86CpuFeaturePOPCNT, //! Cpu has LZCNT. - kX86CpuFeatureLzcnt, + kX86CpuFeatureLZCNT, //! Cpu has AESNI. - kX86CpuFeatureAesni, + kX86CpuFeatureAESNI, //! Cpu has PCLMULQDQ. - kX86CpuFeaturePclmulqdq, + kX86CpuFeaturePCLMULQDQ, //! Cpu has RDRAND. - kX86CpuFeatureRdrand, + kX86CpuFeatureRDRAND, + //! Cpu has RDSEED. + kX86CpuFeatureRDSEED, + //! Cpu has SHA-1 and SHA-256. + kX86CpuFeatureSHA, + //! Cpu has XSAVE support - XSAVE/XRSTOR, XSETBV/XGETBV, and XCR0. + kX86CpuFeatureXSave, + //! OS has enabled XSAVE, you can call XGETBV to get value of XCR0. + kX86CpuFeatureXSaveOS, //! Cpu has AVX. - kX86CpuFeatureAvx, + kX86CpuFeatureAVX, //! Cpu has AVX2. - kX86CpuFeatureAvx2, + kX86CpuFeatureAVX2, //! Cpu has F16C. kX86CpuFeatureF16C, //! Cpu has FMA3. - kX86CpuFeatureFma3, + kX86CpuFeatureFMA3, //! Cpu has FMA4. - kX86CpuFeatureFma4, + kX86CpuFeatureFMA4, //! Cpu has XOP. - kX86CpuFeatureXop, + kX86CpuFeatureXOP, //! Cpu has BMI. - kX86CpuFeatureBmi, + kX86CpuFeatureBMI, //! Cpu has BMI2. - kX86CpuFeatureBmi2, + kX86CpuFeatureBMI2, //! Cpu has HLE. - kX86CpuFeatureHle, + kX86CpuFeatureHLE, //! Cpu has RTM. - kX86CpuFeatureRtm, + kX86CpuFeatureRTM, + //! Cpu has ADX. + kX86CpuFeatureADX, + //! Cpu has MPX (Memory Protection Extensions). + kX86CpuFeatureMPX, //! Cpu has FSGSBASE. - kX86CpuFeatureFsGsBase, - //! Cpu has enhanced REP MOVSB/STOSB. - kX86CpuFeatureRepMovsbStosbExt, + kX86CpuFeatureFSGSBase, + //! Cpu has optimized REP MOVSB/STOSB. + kX86CpuFeatureMOVSBSTOSBOpt, + + //! Cpu has AVX-512F (Foundation). + kX86CpuFeatureAVX512F, + //! Cpu has AVX-512CD (Conflict Detection). + kX86CpuFeatureAVX512CD, + //! Cpu has AVX-512PF (Prefetch Instructions). + kX86CpuFeatureAVX512PF, + //! Cpu has AVX-512ER (Exponential and Reciprocal Instructions). + kX86CpuFeatureAVX512ER, + //! Cpu has AVX-512DQ (DWord/QWord). + kX86CpuFeatureAVX512DQ, + //! Cpu has AVX-512BW (Byte/Word). + kX86CpuFeatureAVX512BW, + //! Cpu has AVX VL (Vector Length Excensions). + kX86CpuFeatureAVX512VL, //! Count of X86/X64 Cpu features. kX86CpuFeatureCount diff --git a/src/asmjit/x86/x86inst.cpp b/src/asmjit/x86/x86inst.cpp index 39beacc..3a27b05 100644 --- a/src/asmjit/x86/x86inst.cpp +++ b/src/asmjit/x86/x86inst.cpp @@ -19,6 +19,79 @@ namespace asmjit { +// ============================================================================ +// [Enums (Internal)] +// ============================================================================ + +//! \internal +enum { + kX86InstTable_L__ = (0) << kX86InstOpCode_L_Shift, + kX86InstTable_L_I = (0) << kX86InstOpCode_L_Shift, + kX86InstTable_L_0 = (0) << kX86InstOpCode_L_Shift, + kX86InstTable_L_L = (1) << kX86InstOpCode_L_Shift, + + kX86InstTable_W__ = (0) << kX86InstOpCode_W_Shift, + kX86InstTable_W_I = (0) << kX86InstOpCode_W_Shift, + kX86InstTable_W_0 = (0) << kX86InstOpCode_W_Shift, + kX86InstTable_W_1 = (1) << kX86InstOpCode_W_Shift, + kX86InstTable_W_W = (1) << kX86InstOpCode_W_Shift, + + kX86InstTable_E__ = (0) << kX86InstOpCode_EW_Shift, + kX86InstTable_E_I = (0) << kX86InstOpCode_EW_Shift, + kX86InstTable_E_0 = (0) << kX86InstOpCode_EW_Shift, + kX86InstTable_E_1 = (1) << kX86InstOpCode_EW_Shift +}; + +//! \internal +//! +//! Combined flags. +enum kX86InstOpInternal { + kX86InstOpI = kX86InstOpImm, + kX86InstOpL = kX86InstOpLabel, + kX86InstOpLbImm = kX86InstOpLabel | kX86InstOpImm, + + kX86InstOpGwb = kX86InstOpGw | kX86InstOpGb, + kX86InstOpGqd = kX86InstOpGq | kX86InstOpGd, + kX86InstOpGqdw = kX86InstOpGq | kX86InstOpGd | kX86InstOpGw, + kX86InstOpGqdwb = kX86InstOpGq | kX86InstOpGd | kX86InstOpGw | kX86InstOpGb, + + kX86InstOpGbMem = kX86InstOpGb | kX86InstOpMem, + kX86InstOpGwMem = kX86InstOpGw | kX86InstOpMem, + kX86InstOpGdMem = kX86InstOpGd | kX86InstOpMem, + kX86InstOpGqMem = kX86InstOpGq | kX86InstOpMem, + kX86InstOpGwbMem = kX86InstOpGwb | kX86InstOpMem, + kX86InstOpGqdMem = kX86InstOpGqd | kX86InstOpMem, + kX86InstOpGqdwMem = kX86InstOpGqdw | kX86InstOpMem, + kX86InstOpGqdwbMem = kX86InstOpGqdwb | kX86InstOpMem, + + kX86InstOpFpMem = kX86InstOpFp | kX86InstOpMem, + kX86InstOpMmMem = kX86InstOpMm | kX86InstOpMem, + kX86InstOpKMem = kX86InstOpK | kX86InstOpMem, + kX86InstOpXmmMem = kX86InstOpXmm | kX86InstOpMem, + kX86InstOpYmmMem = kX86InstOpYmm | kX86InstOpMem, + kX86InstOpZmmMem = kX86InstOpZmm | kX86InstOpMem, + + kX86InstOpMmXmm = kX86InstOpMm | kX86InstOpXmm, + kX86InstOpMmXmmMem = kX86InstOpMmXmm | kX86InstOpMem, + + kX86InstOpXy = kX86InstOpXmm | kX86InstOpYmm, + kX86InstOpXyMem = kX86InstOpXy | kX86InstOpMem, + + kX86InstOpXyz = kX86InstOpXy | kX86InstOpZmm, + kX86InstOpXyzMem = kX86InstOpXyz | kX86InstOpMem +}; + +//! \internal +//! +//! X86/X64 Instruction AVX-512 flags (combined). +ASMJIT_ENUM(kX86InstFlagsInternal) { + // FPU. + kX86InstFlagMem2_4 = kX86InstFlagMem2 | kX86InstFlagMem4, + kX86InstFlagMem2_4_8 = kX86InstFlagMem2_4 | kX86InstFlagMem8, + kX86InstFlagMem4_8 = kX86InstFlagMem4 | kX86InstFlagMem8, + kX86InstFlagMem4_8_10 = kX86InstFlagMem4_8 | kX86InstFlagMem10 +}; + // ============================================================================ // [Macros] // ============================================================================ @@ -29,47 +102,54 @@ namespace asmjit { # define INST_NAME_INDEX(_Code_) 0 #endif -#define G(_Group_) kX86InstGroup##_Group_ -#define F(_Flags_) kX86InstFlag##_Flags_ -#define O(_Op_) kX86InstOp##_Op_ -#define E(_Flags_) 0 - +// Undefined. Used to distinguish between zero and field that is not used. #define U 0 -#define L kX86InstOpCode_L_True -#define O_000000(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_000F00(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_000F01(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F01 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_000F0F(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_000F38(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_000F3A(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_660000(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_660F00(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_660F38(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_660F3A(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_9B0000(_OpCode_, _R_) (kX86InstOpCode_PP_9B | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F20000(_OpCode_, _R_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F20F00(_OpCode_, _R_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F20F38(_OpCode_, _R_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F20F3A(_OpCode_, _R_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F30000(_OpCode_, _R_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F30F00(_OpCode_, _R_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F30F38(_OpCode_, _R_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_F30F3A(_OpCode_, _R_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) +// Instruction opcodes. +#define O_000000(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_000F00(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_000F01(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F01 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_000F0F(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_000F38(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_000F3A(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_660000(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_660F00(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_660F38(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_660F3A(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_9B0000(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_9B | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F20000(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F20F00(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F20F38(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F20F3A(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F2 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F30000(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F30F00(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F30F38(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F38 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_F30F3A(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_F3 | kX86InstOpCode_MM_0F3A | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) -#define O_00_M03(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_00011| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_00_M08(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_01000| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_00_M09(_OpCode_, _R_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_01001| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) +#define O_00_M08(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_01000| (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_00_M09(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_00 | kX86InstOpCode_MM_01001| (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) +#define O_66_M03(_OpCode_, _O_, _L_, _W_, _EVEX_W_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_00011| (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift) | kX86InstTable_L_##_L_ | kX86InstTable_W_##_W_ | kX86InstTable_E_##_EVEX_W_) -#define O_66_M03(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_00011| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_66_M08(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_01000| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_66_M09(_OpCode_, _R_) (kX86InstOpCode_PP_66 | kX86InstOpCode_MM_01001| (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) +#define O_00_X(_OpCode_, _O_) (kX86InstOpCode_PP_00 | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift)) +#define O_9B_X(_OpCode_, _O_) (kX86InstOpCode_PP_9B | (0x##_OpCode_) | ((_O_) << kX86InstOpCode_O_Shift)) -#define O_00_X(_OpCode_, _R_) (kX86InstOpCode_PP_00 | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) -#define O_9B_X(_OpCode_, _R_) (kX86InstOpCode_PP_9B | (0x##_OpCode_) | ((_R_) << kX86InstOpCode_O_Shift)) +// Instruction Encoding `Enc(...)`. +#define Enc(_Id_) kX86InstEncodingId##_Id_ -#define INST(_Code_, _Name_, _Group_, _Flags_, _MoveSize_, _OpFlags0_, _OpFlags1_, _OpFlags2_, _OpFlags3_, _EFlags_, _OpCode0_, _OpCode1_) \ - { INST_NAME_INDEX(_Code_), _Code_##_ExtendedIndex, _OpCode0_ } +// Instruction Flags `F(...)` and AVX-512 `AVX(...)`flags. +#define F(_Flags_) kX86InstFlag##_Flags_ + +#define A(_Flags_) kX86InstFlagAvx512##_Flags_ + +// Instruction EFLAGS `E(OSZAPCDX)`. +#define EF(_Flags_) 0 + +// Instruction Operands' Flags `O(...)`. +#define O(_Op_) kX86InstOp##_Op_ + +// Defines an X86/X64 instruction. +#define INST(_Id_, _Name_, _OpCode0_, _OpCode1_, _Encoding_, _IFlags_, _EFlags_, _WriteIndex_, _WriteSize_, _Op0_, _Op_, _Op2_, _Op3_, _Op4_) \ + { INST_NAME_INDEX(_Id_), _Id_##_ExtendedIndex, _OpCode0_ } // ============================================================================ // [asmjit::X86Inst] @@ -208,6 +288,7 @@ const char _x86InstName[] = "emms\0" "enter\0" "extractps\0" + "extrq\0" "f2xm1\0" "fabs\0" "fadd\0" @@ -312,6 +393,7 @@ const char _x86InstName[] = "imul\0" "inc\0" "insertps\0" + "insertq\0" "int\0" "ja\0" "jae\0" @@ -392,6 +474,8 @@ const char _x86InstName[] = "movntpd\0" "movntps\0" "movntq\0" + "movntsd\0" + "movntss\0" "movq\0" "movq2dq\0" "movs_b\0" @@ -1126,9 +1210,17 @@ const char _x86InstName[] = "wrgsbase\0" "xadd\0" "xchg\0" + "xgetbv\0" "xor\0" "xorpd\0" - "xorps\0"; + "xorps\0" + "xrstor\0" + "xrstor64\0" + "xsave\0" + "xsave64\0" + "xsaveopt\0" + "xsaveopt64\0" + "xsetbv\0"; // Automatically generated, do not edit. enum kX86InstAlphaIndex { @@ -1298,1220 +1390,1226 @@ enum kX86InstData_NameIndex { kX86InstIdEmms_NameIndex = 856, kX86InstIdEnter_NameIndex = 861, kX86InstIdExtractps_NameIndex = 867, - kX86InstIdF2xm1_NameIndex = 877, - kX86InstIdFabs_NameIndex = 883, - kX86InstIdFadd_NameIndex = 888, - kX86InstIdFaddp_NameIndex = 893, - kX86InstIdFbld_NameIndex = 899, - kX86InstIdFbstp_NameIndex = 904, - kX86InstIdFchs_NameIndex = 910, - kX86InstIdFclex_NameIndex = 915, - kX86InstIdFcmovb_NameIndex = 921, - kX86InstIdFcmovbe_NameIndex = 928, - kX86InstIdFcmove_NameIndex = 936, - kX86InstIdFcmovnb_NameIndex = 943, - kX86InstIdFcmovnbe_NameIndex = 951, - kX86InstIdFcmovne_NameIndex = 960, - kX86InstIdFcmovnu_NameIndex = 968, - kX86InstIdFcmovu_NameIndex = 976, - kX86InstIdFcom_NameIndex = 983, - kX86InstIdFcomi_NameIndex = 988, - kX86InstIdFcomip_NameIndex = 994, - kX86InstIdFcomp_NameIndex = 1001, - kX86InstIdFcompp_NameIndex = 1007, - kX86InstIdFcos_NameIndex = 1014, - kX86InstIdFdecstp_NameIndex = 1019, - kX86InstIdFdiv_NameIndex = 1027, - kX86InstIdFdivp_NameIndex = 1032, - kX86InstIdFdivr_NameIndex = 1038, - kX86InstIdFdivrp_NameIndex = 1044, - kX86InstIdFemms_NameIndex = 1051, - kX86InstIdFfree_NameIndex = 1057, - kX86InstIdFiadd_NameIndex = 1063, - kX86InstIdFicom_NameIndex = 1069, - kX86InstIdFicomp_NameIndex = 1075, - kX86InstIdFidiv_NameIndex = 1082, - kX86InstIdFidivr_NameIndex = 1088, - kX86InstIdFild_NameIndex = 1095, - kX86InstIdFimul_NameIndex = 1100, - kX86InstIdFincstp_NameIndex = 1106, - kX86InstIdFinit_NameIndex = 1114, - kX86InstIdFist_NameIndex = 1120, - kX86InstIdFistp_NameIndex = 1125, - kX86InstIdFisttp_NameIndex = 1131, - kX86InstIdFisub_NameIndex = 1138, - kX86InstIdFisubr_NameIndex = 1144, - kX86InstIdFld_NameIndex = 1151, - kX86InstIdFld1_NameIndex = 1155, - kX86InstIdFldcw_NameIndex = 1160, - kX86InstIdFldenv_NameIndex = 1166, - kX86InstIdFldl2e_NameIndex = 1173, - kX86InstIdFldl2t_NameIndex = 1180, - kX86InstIdFldlg2_NameIndex = 1187, - kX86InstIdFldln2_NameIndex = 1194, - kX86InstIdFldpi_NameIndex = 1201, - kX86InstIdFldz_NameIndex = 1207, - kX86InstIdFmul_NameIndex = 1212, - kX86InstIdFmulp_NameIndex = 1217, - kX86InstIdFnclex_NameIndex = 1223, - kX86InstIdFninit_NameIndex = 1230, - kX86InstIdFnop_NameIndex = 1237, - kX86InstIdFnsave_NameIndex = 1242, - kX86InstIdFnstcw_NameIndex = 1249, - kX86InstIdFnstenv_NameIndex = 1256, - kX86InstIdFnstsw_NameIndex = 1264, - kX86InstIdFpatan_NameIndex = 1271, - kX86InstIdFprem_NameIndex = 1278, - kX86InstIdFprem1_NameIndex = 1284, - kX86InstIdFptan_NameIndex = 1291, - kX86InstIdFrndint_NameIndex = 1297, - kX86InstIdFrstor_NameIndex = 1305, - kX86InstIdFsave_NameIndex = 1312, - kX86InstIdFscale_NameIndex = 1318, - kX86InstIdFsin_NameIndex = 1325, - kX86InstIdFsincos_NameIndex = 1330, - kX86InstIdFsqrt_NameIndex = 1338, - kX86InstIdFst_NameIndex = 1344, - kX86InstIdFstcw_NameIndex = 1348, - kX86InstIdFstenv_NameIndex = 1354, - kX86InstIdFstp_NameIndex = 1361, - kX86InstIdFstsw_NameIndex = 1366, - kX86InstIdFsub_NameIndex = 1372, - kX86InstIdFsubp_NameIndex = 1377, - kX86InstIdFsubr_NameIndex = 1383, - kX86InstIdFsubrp_NameIndex = 1389, - kX86InstIdFtst_NameIndex = 1396, - kX86InstIdFucom_NameIndex = 1401, - kX86InstIdFucomi_NameIndex = 1407, - kX86InstIdFucomip_NameIndex = 1414, - kX86InstIdFucomp_NameIndex = 1422, - kX86InstIdFucompp_NameIndex = 1429, - kX86InstIdFwait_NameIndex = 1437, - kX86InstIdFxam_NameIndex = 1443, - kX86InstIdFxch_NameIndex = 1448, - kX86InstIdFxrstor_NameIndex = 1453, - kX86InstIdFxsave_NameIndex = 1461, - kX86InstIdFxtract_NameIndex = 1468, - kX86InstIdFyl2x_NameIndex = 1476, - kX86InstIdFyl2xp1_NameIndex = 1482, - kX86InstIdHaddpd_NameIndex = 1490, - kX86InstIdHaddps_NameIndex = 1497, - kX86InstIdHsubpd_NameIndex = 1504, - kX86InstIdHsubps_NameIndex = 1511, - kX86InstIdIdiv_NameIndex = 1518, - kX86InstIdImul_NameIndex = 1523, - kX86InstIdInc_NameIndex = 1528, - kX86InstIdInsertps_NameIndex = 1532, - kX86InstIdInt_NameIndex = 1541, - kX86InstIdJa_NameIndex = 1545, - kX86InstIdJae_NameIndex = 1548, - kX86InstIdJb_NameIndex = 1552, - kX86InstIdJbe_NameIndex = 1555, - kX86InstIdJc_NameIndex = 1559, - kX86InstIdJe_NameIndex = 1562, - kX86InstIdJg_NameIndex = 1565, - kX86InstIdJge_NameIndex = 1568, - kX86InstIdJl_NameIndex = 1572, - kX86InstIdJle_NameIndex = 1575, - kX86InstIdJna_NameIndex = 1579, - kX86InstIdJnae_NameIndex = 1583, - kX86InstIdJnb_NameIndex = 1588, - kX86InstIdJnbe_NameIndex = 1592, - kX86InstIdJnc_NameIndex = 1597, - kX86InstIdJne_NameIndex = 1601, - kX86InstIdJng_NameIndex = 1605, - kX86InstIdJnge_NameIndex = 1609, - kX86InstIdJnl_NameIndex = 1614, - kX86InstIdJnle_NameIndex = 1618, - kX86InstIdJno_NameIndex = 1623, - kX86InstIdJnp_NameIndex = 1627, - kX86InstIdJns_NameIndex = 1631, - kX86InstIdJnz_NameIndex = 1635, - kX86InstIdJo_NameIndex = 1639, - kX86InstIdJp_NameIndex = 1642, - kX86InstIdJpe_NameIndex = 1645, - kX86InstIdJpo_NameIndex = 1649, - kX86InstIdJs_NameIndex = 1653, - kX86InstIdJz_NameIndex = 1656, - kX86InstIdJecxz_NameIndex = 1659, - kX86InstIdJmp_NameIndex = 1665, - kX86InstIdLahf_NameIndex = 1669, - kX86InstIdLddqu_NameIndex = 1674, - kX86InstIdLdmxcsr_NameIndex = 1680, - kX86InstIdLea_NameIndex = 1688, - kX86InstIdLeave_NameIndex = 1692, - kX86InstIdLfence_NameIndex = 1698, - kX86InstIdLodsB_NameIndex = 1705, - kX86InstIdLodsD_NameIndex = 1712, - kX86InstIdLodsQ_NameIndex = 1719, - kX86InstIdLodsW_NameIndex = 1726, - kX86InstIdLzcnt_NameIndex = 1733, - kX86InstIdMaskmovdqu_NameIndex = 1739, - kX86InstIdMaskmovq_NameIndex = 1750, - kX86InstIdMaxpd_NameIndex = 1759, - kX86InstIdMaxps_NameIndex = 1765, - kX86InstIdMaxsd_NameIndex = 1771, - kX86InstIdMaxss_NameIndex = 1777, - kX86InstIdMfence_NameIndex = 1783, - kX86InstIdMinpd_NameIndex = 1790, - kX86InstIdMinps_NameIndex = 1796, - kX86InstIdMinsd_NameIndex = 1802, - kX86InstIdMinss_NameIndex = 1808, - kX86InstIdMonitor_NameIndex = 1814, - kX86InstIdMov_NameIndex = 1822, - kX86InstIdMovPtr_NameIndex = 1826, - kX86InstIdMovapd_NameIndex = 1834, - kX86InstIdMovaps_NameIndex = 1841, - kX86InstIdMovbe_NameIndex = 1848, - kX86InstIdMovd_NameIndex = 1854, - kX86InstIdMovddup_NameIndex = 1859, - kX86InstIdMovdq2q_NameIndex = 1867, - kX86InstIdMovdqa_NameIndex = 1875, - kX86InstIdMovdqu_NameIndex = 1882, - kX86InstIdMovhlps_NameIndex = 1889, - kX86InstIdMovhpd_NameIndex = 1897, - kX86InstIdMovhps_NameIndex = 1904, - kX86InstIdMovlhps_NameIndex = 1911, - kX86InstIdMovlpd_NameIndex = 1919, - kX86InstIdMovlps_NameIndex = 1926, - kX86InstIdMovmskpd_NameIndex = 1933, - kX86InstIdMovmskps_NameIndex = 1942, - kX86InstIdMovntdq_NameIndex = 1951, - kX86InstIdMovntdqa_NameIndex = 1959, - kX86InstIdMovnti_NameIndex = 1968, - kX86InstIdMovntpd_NameIndex = 1975, - kX86InstIdMovntps_NameIndex = 1983, - kX86InstIdMovntq_NameIndex = 1991, - kX86InstIdMovq_NameIndex = 1998, - kX86InstIdMovq2dq_NameIndex = 2003, - kX86InstIdMovsB_NameIndex = 2011, - kX86InstIdMovsD_NameIndex = 2018, - kX86InstIdMovsQ_NameIndex = 2025, - kX86InstIdMovsW_NameIndex = 2032, - kX86InstIdMovsd_NameIndex = 2039, - kX86InstIdMovshdup_NameIndex = 2045, - kX86InstIdMovsldup_NameIndex = 2054, - kX86InstIdMovss_NameIndex = 2063, - kX86InstIdMovsx_NameIndex = 2069, - kX86InstIdMovsxd_NameIndex = 2075, - kX86InstIdMovupd_NameIndex = 2082, - kX86InstIdMovups_NameIndex = 2089, - kX86InstIdMovzx_NameIndex = 2096, - kX86InstIdMpsadbw_NameIndex = 2102, - kX86InstIdMul_NameIndex = 2110, - kX86InstIdMulpd_NameIndex = 2114, - kX86InstIdMulps_NameIndex = 2120, - kX86InstIdMulsd_NameIndex = 2126, - kX86InstIdMulss_NameIndex = 2132, - kX86InstIdMulx_NameIndex = 2138, - kX86InstIdMwait_NameIndex = 2143, - kX86InstIdNeg_NameIndex = 2149, - kX86InstIdNop_NameIndex = 2153, - kX86InstIdNot_NameIndex = 2157, - kX86InstIdOr_NameIndex = 2161, - kX86InstIdOrpd_NameIndex = 2164, - kX86InstIdOrps_NameIndex = 2169, - kX86InstIdPabsb_NameIndex = 2174, - kX86InstIdPabsd_NameIndex = 2180, - kX86InstIdPabsw_NameIndex = 2186, - kX86InstIdPackssdw_NameIndex = 2192, - kX86InstIdPacksswb_NameIndex = 2201, - kX86InstIdPackusdw_NameIndex = 2210, - kX86InstIdPackuswb_NameIndex = 2219, - kX86InstIdPaddb_NameIndex = 2228, - kX86InstIdPaddd_NameIndex = 2234, - kX86InstIdPaddq_NameIndex = 2240, - kX86InstIdPaddsb_NameIndex = 2246, - kX86InstIdPaddsw_NameIndex = 2253, - kX86InstIdPaddusb_NameIndex = 2260, - kX86InstIdPaddusw_NameIndex = 2268, - kX86InstIdPaddw_NameIndex = 2276, - kX86InstIdPalignr_NameIndex = 2282, - kX86InstIdPand_NameIndex = 2290, - kX86InstIdPandn_NameIndex = 2295, - kX86InstIdPause_NameIndex = 2301, - kX86InstIdPavgb_NameIndex = 2307, - kX86InstIdPavgw_NameIndex = 2313, - kX86InstIdPblendvb_NameIndex = 2319, - kX86InstIdPblendw_NameIndex = 2328, - kX86InstIdPclmulqdq_NameIndex = 2336, - kX86InstIdPcmpeqb_NameIndex = 2346, - kX86InstIdPcmpeqd_NameIndex = 2354, - kX86InstIdPcmpeqq_NameIndex = 2362, - kX86InstIdPcmpeqw_NameIndex = 2370, - kX86InstIdPcmpestri_NameIndex = 2378, - kX86InstIdPcmpestrm_NameIndex = 2388, - kX86InstIdPcmpgtb_NameIndex = 2398, - kX86InstIdPcmpgtd_NameIndex = 2406, - kX86InstIdPcmpgtq_NameIndex = 2414, - kX86InstIdPcmpgtw_NameIndex = 2422, - kX86InstIdPcmpistri_NameIndex = 2430, - kX86InstIdPcmpistrm_NameIndex = 2440, - kX86InstIdPdep_NameIndex = 2450, - kX86InstIdPext_NameIndex = 2455, - kX86InstIdPextrb_NameIndex = 2460, - kX86InstIdPextrd_NameIndex = 2467, - kX86InstIdPextrq_NameIndex = 2474, - kX86InstIdPextrw_NameIndex = 2481, - kX86InstIdPf2id_NameIndex = 2488, - kX86InstIdPf2iw_NameIndex = 2494, - kX86InstIdPfacc_NameIndex = 2500, - kX86InstIdPfadd_NameIndex = 2506, - kX86InstIdPfcmpeq_NameIndex = 2512, - kX86InstIdPfcmpge_NameIndex = 2520, - kX86InstIdPfcmpgt_NameIndex = 2528, - kX86InstIdPfmax_NameIndex = 2536, - kX86InstIdPfmin_NameIndex = 2542, - kX86InstIdPfmul_NameIndex = 2548, - kX86InstIdPfnacc_NameIndex = 2554, - kX86InstIdPfpnacc_NameIndex = 2561, - kX86InstIdPfrcp_NameIndex = 2569, - kX86InstIdPfrcpit1_NameIndex = 2575, - kX86InstIdPfrcpit2_NameIndex = 2584, - kX86InstIdPfrsqit1_NameIndex = 2593, - kX86InstIdPfrsqrt_NameIndex = 2602, - kX86InstIdPfsub_NameIndex = 2610, - kX86InstIdPfsubr_NameIndex = 2616, - kX86InstIdPhaddd_NameIndex = 2623, - kX86InstIdPhaddsw_NameIndex = 2630, - kX86InstIdPhaddw_NameIndex = 2638, - kX86InstIdPhminposuw_NameIndex = 2645, - kX86InstIdPhsubd_NameIndex = 2656, - kX86InstIdPhsubsw_NameIndex = 2663, - kX86InstIdPhsubw_NameIndex = 2671, - kX86InstIdPi2fd_NameIndex = 2678, - kX86InstIdPi2fw_NameIndex = 2684, - kX86InstIdPinsrb_NameIndex = 2690, - kX86InstIdPinsrd_NameIndex = 2697, - kX86InstIdPinsrq_NameIndex = 2704, - kX86InstIdPinsrw_NameIndex = 2711, - kX86InstIdPmaddubsw_NameIndex = 2718, - kX86InstIdPmaddwd_NameIndex = 2728, - kX86InstIdPmaxsb_NameIndex = 2736, - kX86InstIdPmaxsd_NameIndex = 2743, - kX86InstIdPmaxsw_NameIndex = 2750, - kX86InstIdPmaxub_NameIndex = 2757, - kX86InstIdPmaxud_NameIndex = 2764, - kX86InstIdPmaxuw_NameIndex = 2771, - kX86InstIdPminsb_NameIndex = 2778, - kX86InstIdPminsd_NameIndex = 2785, - kX86InstIdPminsw_NameIndex = 2792, - kX86InstIdPminub_NameIndex = 2799, - kX86InstIdPminud_NameIndex = 2806, - kX86InstIdPminuw_NameIndex = 2813, - kX86InstIdPmovmskb_NameIndex = 2820, - kX86InstIdPmovsxbd_NameIndex = 2829, - kX86InstIdPmovsxbq_NameIndex = 2838, - kX86InstIdPmovsxbw_NameIndex = 2847, - kX86InstIdPmovsxdq_NameIndex = 2856, - kX86InstIdPmovsxwd_NameIndex = 2865, - kX86InstIdPmovsxwq_NameIndex = 2874, - kX86InstIdPmovzxbd_NameIndex = 2883, - kX86InstIdPmovzxbq_NameIndex = 2892, - kX86InstIdPmovzxbw_NameIndex = 2901, - kX86InstIdPmovzxdq_NameIndex = 2910, - kX86InstIdPmovzxwd_NameIndex = 2919, - kX86InstIdPmovzxwq_NameIndex = 2928, - kX86InstIdPmuldq_NameIndex = 2937, - kX86InstIdPmulhrsw_NameIndex = 2944, - kX86InstIdPmulhuw_NameIndex = 2953, - kX86InstIdPmulhw_NameIndex = 2961, - kX86InstIdPmulld_NameIndex = 2968, - kX86InstIdPmullw_NameIndex = 2975, - kX86InstIdPmuludq_NameIndex = 2982, - kX86InstIdPop_NameIndex = 2990, - kX86InstIdPopa_NameIndex = 2994, - kX86InstIdPopcnt_NameIndex = 2999, - kX86InstIdPopf_NameIndex = 3006, - kX86InstIdPor_NameIndex = 3011, - kX86InstIdPrefetch_NameIndex = 3015, - kX86InstIdPrefetch3dNow_NameIndex = 3024, - kX86InstIdPrefetchw3dNow_NameIndex = 3039, - kX86InstIdPsadbw_NameIndex = 3055, - kX86InstIdPshufb_NameIndex = 3062, - kX86InstIdPshufd_NameIndex = 3069, - kX86InstIdPshufhw_NameIndex = 3076, - kX86InstIdPshuflw_NameIndex = 3084, - kX86InstIdPshufw_NameIndex = 3092, - kX86InstIdPsignb_NameIndex = 3099, - kX86InstIdPsignd_NameIndex = 3106, - kX86InstIdPsignw_NameIndex = 3113, - kX86InstIdPslld_NameIndex = 3120, - kX86InstIdPslldq_NameIndex = 3126, - kX86InstIdPsllq_NameIndex = 3133, - kX86InstIdPsllw_NameIndex = 3139, - kX86InstIdPsrad_NameIndex = 3145, - kX86InstIdPsraw_NameIndex = 3151, - kX86InstIdPsrld_NameIndex = 3157, - kX86InstIdPsrldq_NameIndex = 3163, - kX86InstIdPsrlq_NameIndex = 3170, - kX86InstIdPsrlw_NameIndex = 3176, - kX86InstIdPsubb_NameIndex = 3182, - kX86InstIdPsubd_NameIndex = 3188, - kX86InstIdPsubq_NameIndex = 3194, - kX86InstIdPsubsb_NameIndex = 3200, - kX86InstIdPsubsw_NameIndex = 3207, - kX86InstIdPsubusb_NameIndex = 3214, - kX86InstIdPsubusw_NameIndex = 3222, - kX86InstIdPsubw_NameIndex = 3230, - kX86InstIdPswapd_NameIndex = 3236, - kX86InstIdPtest_NameIndex = 3243, - kX86InstIdPunpckhbw_NameIndex = 3249, - kX86InstIdPunpckhdq_NameIndex = 3259, - kX86InstIdPunpckhqdq_NameIndex = 3269, - kX86InstIdPunpckhwd_NameIndex = 3280, - kX86InstIdPunpcklbw_NameIndex = 3290, - kX86InstIdPunpckldq_NameIndex = 3300, - kX86InstIdPunpcklqdq_NameIndex = 3310, - kX86InstIdPunpcklwd_NameIndex = 3321, - kX86InstIdPush_NameIndex = 3331, - kX86InstIdPusha_NameIndex = 3336, - kX86InstIdPushf_NameIndex = 3342, - kX86InstIdPxor_NameIndex = 3348, - kX86InstIdRcl_NameIndex = 3353, - kX86InstIdRcpps_NameIndex = 3357, - kX86InstIdRcpss_NameIndex = 3363, - kX86InstIdRcr_NameIndex = 3369, - kX86InstIdRdfsbase_NameIndex = 3373, - kX86InstIdRdgsbase_NameIndex = 3382, - kX86InstIdRdrand_NameIndex = 3391, - kX86InstIdRdtsc_NameIndex = 3398, - kX86InstIdRdtscp_NameIndex = 3404, - kX86InstIdRepLodsB_NameIndex = 3411, - kX86InstIdRepLodsD_NameIndex = 3422, - kX86InstIdRepLodsQ_NameIndex = 3433, - kX86InstIdRepLodsW_NameIndex = 3444, - kX86InstIdRepMovsB_NameIndex = 3455, - kX86InstIdRepMovsD_NameIndex = 3466, - kX86InstIdRepMovsQ_NameIndex = 3477, - kX86InstIdRepMovsW_NameIndex = 3488, - kX86InstIdRepStosB_NameIndex = 3499, - kX86InstIdRepStosD_NameIndex = 3510, - kX86InstIdRepStosQ_NameIndex = 3521, - kX86InstIdRepStosW_NameIndex = 3532, - kX86InstIdRepeCmpsB_NameIndex = 3543, - kX86InstIdRepeCmpsD_NameIndex = 3555, - kX86InstIdRepeCmpsQ_NameIndex = 3567, - kX86InstIdRepeCmpsW_NameIndex = 3579, - kX86InstIdRepeScasB_NameIndex = 3591, - kX86InstIdRepeScasD_NameIndex = 3603, - kX86InstIdRepeScasQ_NameIndex = 3615, - kX86InstIdRepeScasW_NameIndex = 3627, - kX86InstIdRepneCmpsB_NameIndex = 3639, - kX86InstIdRepneCmpsD_NameIndex = 3652, - kX86InstIdRepneCmpsQ_NameIndex = 3665, - kX86InstIdRepneCmpsW_NameIndex = 3678, - kX86InstIdRepneScasB_NameIndex = 3691, - kX86InstIdRepneScasD_NameIndex = 3704, - kX86InstIdRepneScasQ_NameIndex = 3717, - kX86InstIdRepneScasW_NameIndex = 3730, - kX86InstIdRet_NameIndex = 3743, - kX86InstIdRol_NameIndex = 3747, - kX86InstIdRor_NameIndex = 3751, - kX86InstIdRorx_NameIndex = 3755, - kX86InstIdRoundpd_NameIndex = 3760, - kX86InstIdRoundps_NameIndex = 3768, - kX86InstIdRoundsd_NameIndex = 3776, - kX86InstIdRoundss_NameIndex = 3784, - kX86InstIdRsqrtps_NameIndex = 3792, - kX86InstIdRsqrtss_NameIndex = 3800, - kX86InstIdSahf_NameIndex = 3808, - kX86InstIdSal_NameIndex = 3813, - kX86InstIdSar_NameIndex = 3817, - kX86InstIdSarx_NameIndex = 3821, - kX86InstIdSbb_NameIndex = 3826, - kX86InstIdScasB_NameIndex = 3830, - kX86InstIdScasD_NameIndex = 3837, - kX86InstIdScasQ_NameIndex = 3844, - kX86InstIdScasW_NameIndex = 3851, - kX86InstIdSeta_NameIndex = 3858, - kX86InstIdSetae_NameIndex = 3863, - kX86InstIdSetb_NameIndex = 3869, - kX86InstIdSetbe_NameIndex = 3874, - kX86InstIdSetc_NameIndex = 3880, - kX86InstIdSete_NameIndex = 3885, - kX86InstIdSetg_NameIndex = 3890, - kX86InstIdSetge_NameIndex = 3895, - kX86InstIdSetl_NameIndex = 3901, - kX86InstIdSetle_NameIndex = 3906, - kX86InstIdSetna_NameIndex = 3912, - kX86InstIdSetnae_NameIndex = 3918, - kX86InstIdSetnb_NameIndex = 3925, - kX86InstIdSetnbe_NameIndex = 3931, - kX86InstIdSetnc_NameIndex = 3938, - kX86InstIdSetne_NameIndex = 3944, - kX86InstIdSetng_NameIndex = 3950, - kX86InstIdSetnge_NameIndex = 3956, - kX86InstIdSetnl_NameIndex = 3963, - kX86InstIdSetnle_NameIndex = 3969, - kX86InstIdSetno_NameIndex = 3976, - kX86InstIdSetnp_NameIndex = 3982, - kX86InstIdSetns_NameIndex = 3988, - kX86InstIdSetnz_NameIndex = 3994, - kX86InstIdSeto_NameIndex = 4000, - kX86InstIdSetp_NameIndex = 4005, - kX86InstIdSetpe_NameIndex = 4010, - kX86InstIdSetpo_NameIndex = 4016, - kX86InstIdSets_NameIndex = 4022, - kX86InstIdSetz_NameIndex = 4027, - kX86InstIdSfence_NameIndex = 4032, - kX86InstIdShl_NameIndex = 4039, - kX86InstIdShld_NameIndex = 4043, - kX86InstIdShlx_NameIndex = 4048, - kX86InstIdShr_NameIndex = 4053, - kX86InstIdShrd_NameIndex = 4057, - kX86InstIdShrx_NameIndex = 4062, - kX86InstIdShufpd_NameIndex = 4067, - kX86InstIdShufps_NameIndex = 4074, - kX86InstIdSqrtpd_NameIndex = 4081, - kX86InstIdSqrtps_NameIndex = 4088, - kX86InstIdSqrtsd_NameIndex = 4095, - kX86InstIdSqrtss_NameIndex = 4102, - kX86InstIdStc_NameIndex = 4109, - kX86InstIdStd_NameIndex = 4113, - kX86InstIdStmxcsr_NameIndex = 4117, - kX86InstIdStosB_NameIndex = 4125, - kX86InstIdStosD_NameIndex = 4132, - kX86InstIdStosQ_NameIndex = 4139, - kX86InstIdStosW_NameIndex = 4146, - kX86InstIdSub_NameIndex = 4153, - kX86InstIdSubpd_NameIndex = 4157, - kX86InstIdSubps_NameIndex = 4163, - kX86InstIdSubsd_NameIndex = 4169, - kX86InstIdSubss_NameIndex = 4175, - kX86InstIdTest_NameIndex = 4181, - kX86InstIdTzcnt_NameIndex = 4186, - kX86InstIdUcomisd_NameIndex = 4192, - kX86InstIdUcomiss_NameIndex = 4200, - kX86InstIdUd2_NameIndex = 4208, - kX86InstIdUnpckhpd_NameIndex = 4212, - kX86InstIdUnpckhps_NameIndex = 4221, - kX86InstIdUnpcklpd_NameIndex = 4230, - kX86InstIdUnpcklps_NameIndex = 4239, - kX86InstIdVaddpd_NameIndex = 4248, - kX86InstIdVaddps_NameIndex = 4255, - kX86InstIdVaddsd_NameIndex = 4262, - kX86InstIdVaddss_NameIndex = 4269, - kX86InstIdVaddsubpd_NameIndex = 4276, - kX86InstIdVaddsubps_NameIndex = 4286, - kX86InstIdVaesdec_NameIndex = 4296, - kX86InstIdVaesdeclast_NameIndex = 4304, - kX86InstIdVaesenc_NameIndex = 4316, - kX86InstIdVaesenclast_NameIndex = 4324, - kX86InstIdVaesimc_NameIndex = 4336, - kX86InstIdVaeskeygenassist_NameIndex = 4344, - kX86InstIdVandnpd_NameIndex = 4361, - kX86InstIdVandnps_NameIndex = 4369, - kX86InstIdVandpd_NameIndex = 4377, - kX86InstIdVandps_NameIndex = 4384, - kX86InstIdVblendpd_NameIndex = 4391, - kX86InstIdVblendps_NameIndex = 4400, - kX86InstIdVblendvpd_NameIndex = 4409, - kX86InstIdVblendvps_NameIndex = 4419, - kX86InstIdVbroadcastf128_NameIndex = 4429, - kX86InstIdVbroadcasti128_NameIndex = 4444, - kX86InstIdVbroadcastsd_NameIndex = 4459, - kX86InstIdVbroadcastss_NameIndex = 4472, - kX86InstIdVcmppd_NameIndex = 4485, - kX86InstIdVcmpps_NameIndex = 4492, - kX86InstIdVcmpsd_NameIndex = 4499, - kX86InstIdVcmpss_NameIndex = 4506, - kX86InstIdVcomisd_NameIndex = 4513, - kX86InstIdVcomiss_NameIndex = 4521, - kX86InstIdVcvtdq2pd_NameIndex = 4529, - kX86InstIdVcvtdq2ps_NameIndex = 4539, - kX86InstIdVcvtpd2dq_NameIndex = 4549, - kX86InstIdVcvtpd2ps_NameIndex = 4559, - kX86InstIdVcvtph2ps_NameIndex = 4569, - kX86InstIdVcvtps2dq_NameIndex = 4579, - kX86InstIdVcvtps2pd_NameIndex = 4589, - kX86InstIdVcvtps2ph_NameIndex = 4599, - kX86InstIdVcvtsd2si_NameIndex = 4609, - kX86InstIdVcvtsd2ss_NameIndex = 4619, - kX86InstIdVcvtsi2sd_NameIndex = 4629, - kX86InstIdVcvtsi2ss_NameIndex = 4639, - kX86InstIdVcvtss2sd_NameIndex = 4649, - kX86InstIdVcvtss2si_NameIndex = 4659, - kX86InstIdVcvttpd2dq_NameIndex = 4669, - kX86InstIdVcvttps2dq_NameIndex = 4680, - kX86InstIdVcvttsd2si_NameIndex = 4691, - kX86InstIdVcvttss2si_NameIndex = 4702, - kX86InstIdVdivpd_NameIndex = 4713, - kX86InstIdVdivps_NameIndex = 4720, - kX86InstIdVdivsd_NameIndex = 4727, - kX86InstIdVdivss_NameIndex = 4734, - kX86InstIdVdppd_NameIndex = 4741, - kX86InstIdVdpps_NameIndex = 4747, - kX86InstIdVextractf128_NameIndex = 4753, - kX86InstIdVextracti128_NameIndex = 4766, - kX86InstIdVextractps_NameIndex = 4779, - kX86InstIdVfmadd132pd_NameIndex = 4790, - kX86InstIdVfmadd132ps_NameIndex = 4802, - kX86InstIdVfmadd132sd_NameIndex = 4814, - kX86InstIdVfmadd132ss_NameIndex = 4826, - kX86InstIdVfmadd213pd_NameIndex = 4838, - kX86InstIdVfmadd213ps_NameIndex = 4850, - kX86InstIdVfmadd213sd_NameIndex = 4862, - kX86InstIdVfmadd213ss_NameIndex = 4874, - kX86InstIdVfmadd231pd_NameIndex = 4886, - kX86InstIdVfmadd231ps_NameIndex = 4898, - kX86InstIdVfmadd231sd_NameIndex = 4910, - kX86InstIdVfmadd231ss_NameIndex = 4922, - kX86InstIdVfmaddpd_NameIndex = 4934, - kX86InstIdVfmaddps_NameIndex = 4943, - kX86InstIdVfmaddsd_NameIndex = 4952, - kX86InstIdVfmaddss_NameIndex = 4961, - kX86InstIdVfmaddsub132pd_NameIndex = 4970, - kX86InstIdVfmaddsub132ps_NameIndex = 4985, - kX86InstIdVfmaddsub213pd_NameIndex = 5000, - kX86InstIdVfmaddsub213ps_NameIndex = 5015, - kX86InstIdVfmaddsub231pd_NameIndex = 5030, - kX86InstIdVfmaddsub231ps_NameIndex = 5045, - kX86InstIdVfmaddsubpd_NameIndex = 5060, - kX86InstIdVfmaddsubps_NameIndex = 5072, - kX86InstIdVfmsub132pd_NameIndex = 5084, - kX86InstIdVfmsub132ps_NameIndex = 5096, - kX86InstIdVfmsub132sd_NameIndex = 5108, - kX86InstIdVfmsub132ss_NameIndex = 5120, - kX86InstIdVfmsub213pd_NameIndex = 5132, - kX86InstIdVfmsub213ps_NameIndex = 5144, - kX86InstIdVfmsub213sd_NameIndex = 5156, - kX86InstIdVfmsub213ss_NameIndex = 5168, - kX86InstIdVfmsub231pd_NameIndex = 5180, - kX86InstIdVfmsub231ps_NameIndex = 5192, - kX86InstIdVfmsub231sd_NameIndex = 5204, - kX86InstIdVfmsub231ss_NameIndex = 5216, - kX86InstIdVfmsubadd132pd_NameIndex = 5228, - kX86InstIdVfmsubadd132ps_NameIndex = 5243, - kX86InstIdVfmsubadd213pd_NameIndex = 5258, - kX86InstIdVfmsubadd213ps_NameIndex = 5273, - kX86InstIdVfmsubadd231pd_NameIndex = 5288, - kX86InstIdVfmsubadd231ps_NameIndex = 5303, - kX86InstIdVfmsubaddpd_NameIndex = 5318, - kX86InstIdVfmsubaddps_NameIndex = 5330, - kX86InstIdVfmsubpd_NameIndex = 5342, - kX86InstIdVfmsubps_NameIndex = 5351, - kX86InstIdVfmsubsd_NameIndex = 5360, - kX86InstIdVfmsubss_NameIndex = 5369, - kX86InstIdVfnmadd132pd_NameIndex = 5378, - kX86InstIdVfnmadd132ps_NameIndex = 5391, - kX86InstIdVfnmadd132sd_NameIndex = 5404, - kX86InstIdVfnmadd132ss_NameIndex = 5417, - kX86InstIdVfnmadd213pd_NameIndex = 5430, - kX86InstIdVfnmadd213ps_NameIndex = 5443, - kX86InstIdVfnmadd213sd_NameIndex = 5456, - kX86InstIdVfnmadd213ss_NameIndex = 5469, - kX86InstIdVfnmadd231pd_NameIndex = 5482, - kX86InstIdVfnmadd231ps_NameIndex = 5495, - kX86InstIdVfnmadd231sd_NameIndex = 5508, - kX86InstIdVfnmadd231ss_NameIndex = 5521, - kX86InstIdVfnmaddpd_NameIndex = 5534, - kX86InstIdVfnmaddps_NameIndex = 5544, - kX86InstIdVfnmaddsd_NameIndex = 5554, - kX86InstIdVfnmaddss_NameIndex = 5564, - kX86InstIdVfnmsub132pd_NameIndex = 5574, - kX86InstIdVfnmsub132ps_NameIndex = 5587, - kX86InstIdVfnmsub132sd_NameIndex = 5600, - kX86InstIdVfnmsub132ss_NameIndex = 5613, - kX86InstIdVfnmsub213pd_NameIndex = 5626, - kX86InstIdVfnmsub213ps_NameIndex = 5639, - kX86InstIdVfnmsub213sd_NameIndex = 5652, - kX86InstIdVfnmsub213ss_NameIndex = 5665, - kX86InstIdVfnmsub231pd_NameIndex = 5678, - kX86InstIdVfnmsub231ps_NameIndex = 5691, - kX86InstIdVfnmsub231sd_NameIndex = 5704, - kX86InstIdVfnmsub231ss_NameIndex = 5717, - kX86InstIdVfnmsubpd_NameIndex = 5730, - kX86InstIdVfnmsubps_NameIndex = 5740, - kX86InstIdVfnmsubsd_NameIndex = 5750, - kX86InstIdVfnmsubss_NameIndex = 5760, - kX86InstIdVfrczpd_NameIndex = 5770, - kX86InstIdVfrczps_NameIndex = 5778, - kX86InstIdVfrczsd_NameIndex = 5786, - kX86InstIdVfrczss_NameIndex = 5794, - kX86InstIdVgatherdpd_NameIndex = 5802, - kX86InstIdVgatherdps_NameIndex = 5813, - kX86InstIdVgatherqpd_NameIndex = 5824, - kX86InstIdVgatherqps_NameIndex = 5835, - kX86InstIdVhaddpd_NameIndex = 5846, - kX86InstIdVhaddps_NameIndex = 5854, - kX86InstIdVhsubpd_NameIndex = 5862, - kX86InstIdVhsubps_NameIndex = 5870, - kX86InstIdVinsertf128_NameIndex = 5878, - kX86InstIdVinserti128_NameIndex = 5890, - kX86InstIdVinsertps_NameIndex = 5902, - kX86InstIdVlddqu_NameIndex = 5912, - kX86InstIdVldmxcsr_NameIndex = 5919, - kX86InstIdVmaskmovdqu_NameIndex = 5928, - kX86InstIdVmaskmovpd_NameIndex = 5940, - kX86InstIdVmaskmovps_NameIndex = 5951, - kX86InstIdVmaxpd_NameIndex = 5962, - kX86InstIdVmaxps_NameIndex = 5969, - kX86InstIdVmaxsd_NameIndex = 5976, - kX86InstIdVmaxss_NameIndex = 5983, - kX86InstIdVminpd_NameIndex = 5990, - kX86InstIdVminps_NameIndex = 5997, - kX86InstIdVminsd_NameIndex = 6004, - kX86InstIdVminss_NameIndex = 6011, - kX86InstIdVmovapd_NameIndex = 6018, - kX86InstIdVmovaps_NameIndex = 6026, - kX86InstIdVmovd_NameIndex = 6034, - kX86InstIdVmovddup_NameIndex = 6040, - kX86InstIdVmovdqa_NameIndex = 6049, - kX86InstIdVmovdqu_NameIndex = 6057, - kX86InstIdVmovhlps_NameIndex = 6065, - kX86InstIdVmovhpd_NameIndex = 6074, - kX86InstIdVmovhps_NameIndex = 6082, - kX86InstIdVmovlhps_NameIndex = 6090, - kX86InstIdVmovlpd_NameIndex = 6099, - kX86InstIdVmovlps_NameIndex = 6107, - kX86InstIdVmovmskpd_NameIndex = 6115, - kX86InstIdVmovmskps_NameIndex = 6125, - kX86InstIdVmovntdq_NameIndex = 6135, - kX86InstIdVmovntdqa_NameIndex = 6144, - kX86InstIdVmovntpd_NameIndex = 6154, - kX86InstIdVmovntps_NameIndex = 6163, - kX86InstIdVmovq_NameIndex = 6172, - kX86InstIdVmovsd_NameIndex = 6178, - kX86InstIdVmovshdup_NameIndex = 6185, - kX86InstIdVmovsldup_NameIndex = 6195, - kX86InstIdVmovss_NameIndex = 6205, - kX86InstIdVmovupd_NameIndex = 6212, - kX86InstIdVmovups_NameIndex = 6220, - kX86InstIdVmpsadbw_NameIndex = 6228, - kX86InstIdVmulpd_NameIndex = 6237, - kX86InstIdVmulps_NameIndex = 6244, - kX86InstIdVmulsd_NameIndex = 6251, - kX86InstIdVmulss_NameIndex = 6258, - kX86InstIdVorpd_NameIndex = 6265, - kX86InstIdVorps_NameIndex = 6271, - kX86InstIdVpabsb_NameIndex = 6277, - kX86InstIdVpabsd_NameIndex = 6284, - kX86InstIdVpabsw_NameIndex = 6291, - kX86InstIdVpackssdw_NameIndex = 6298, - kX86InstIdVpacksswb_NameIndex = 6308, - kX86InstIdVpackusdw_NameIndex = 6318, - kX86InstIdVpackuswb_NameIndex = 6328, - kX86InstIdVpaddb_NameIndex = 6338, - kX86InstIdVpaddd_NameIndex = 6345, - kX86InstIdVpaddq_NameIndex = 6352, - kX86InstIdVpaddsb_NameIndex = 6359, - kX86InstIdVpaddsw_NameIndex = 6367, - kX86InstIdVpaddusb_NameIndex = 6375, - kX86InstIdVpaddusw_NameIndex = 6384, - kX86InstIdVpaddw_NameIndex = 6393, - kX86InstIdVpalignr_NameIndex = 6400, - kX86InstIdVpand_NameIndex = 6409, - kX86InstIdVpandn_NameIndex = 6415, - kX86InstIdVpavgb_NameIndex = 6422, - kX86InstIdVpavgw_NameIndex = 6429, - kX86InstIdVpblendd_NameIndex = 6436, - kX86InstIdVpblendvb_NameIndex = 6445, - kX86InstIdVpblendw_NameIndex = 6455, - kX86InstIdVpbroadcastb_NameIndex = 6464, - kX86InstIdVpbroadcastd_NameIndex = 6477, - kX86InstIdVpbroadcastq_NameIndex = 6490, - kX86InstIdVpbroadcastw_NameIndex = 6503, - kX86InstIdVpclmulqdq_NameIndex = 6516, - kX86InstIdVpcmov_NameIndex = 6527, - kX86InstIdVpcmpeqb_NameIndex = 6534, - kX86InstIdVpcmpeqd_NameIndex = 6543, - kX86InstIdVpcmpeqq_NameIndex = 6552, - kX86InstIdVpcmpeqw_NameIndex = 6561, - kX86InstIdVpcmpestri_NameIndex = 6570, - kX86InstIdVpcmpestrm_NameIndex = 6581, - kX86InstIdVpcmpgtb_NameIndex = 6592, - kX86InstIdVpcmpgtd_NameIndex = 6601, - kX86InstIdVpcmpgtq_NameIndex = 6610, - kX86InstIdVpcmpgtw_NameIndex = 6619, - kX86InstIdVpcmpistri_NameIndex = 6628, - kX86InstIdVpcmpistrm_NameIndex = 6639, - kX86InstIdVpcomb_NameIndex = 6650, - kX86InstIdVpcomd_NameIndex = 6657, - kX86InstIdVpcomq_NameIndex = 6664, - kX86InstIdVpcomub_NameIndex = 6671, - kX86InstIdVpcomud_NameIndex = 6679, - kX86InstIdVpcomuq_NameIndex = 6687, - kX86InstIdVpcomuw_NameIndex = 6695, - kX86InstIdVpcomw_NameIndex = 6703, - kX86InstIdVperm2f128_NameIndex = 6710, - kX86InstIdVperm2i128_NameIndex = 6721, - kX86InstIdVpermd_NameIndex = 6732, - kX86InstIdVpermil2pd_NameIndex = 6739, - kX86InstIdVpermil2ps_NameIndex = 6750, - kX86InstIdVpermilpd_NameIndex = 6761, - kX86InstIdVpermilps_NameIndex = 6771, - kX86InstIdVpermpd_NameIndex = 6781, - kX86InstIdVpermps_NameIndex = 6789, - kX86InstIdVpermq_NameIndex = 6797, - kX86InstIdVpextrb_NameIndex = 6804, - kX86InstIdVpextrd_NameIndex = 6812, - kX86InstIdVpextrq_NameIndex = 6820, - kX86InstIdVpextrw_NameIndex = 6828, - kX86InstIdVpgatherdd_NameIndex = 6836, - kX86InstIdVpgatherdq_NameIndex = 6847, - kX86InstIdVpgatherqd_NameIndex = 6858, - kX86InstIdVpgatherqq_NameIndex = 6869, - kX86InstIdVphaddbd_NameIndex = 6880, - kX86InstIdVphaddbq_NameIndex = 6889, - kX86InstIdVphaddbw_NameIndex = 6898, - kX86InstIdVphaddd_NameIndex = 6907, - kX86InstIdVphadddq_NameIndex = 6915, - kX86InstIdVphaddsw_NameIndex = 6924, - kX86InstIdVphaddubd_NameIndex = 6933, - kX86InstIdVphaddubq_NameIndex = 6943, - kX86InstIdVphaddubw_NameIndex = 6953, - kX86InstIdVphaddudq_NameIndex = 6963, - kX86InstIdVphadduwd_NameIndex = 6973, - kX86InstIdVphadduwq_NameIndex = 6983, - kX86InstIdVphaddw_NameIndex = 6993, - kX86InstIdVphaddwd_NameIndex = 7001, - kX86InstIdVphaddwq_NameIndex = 7010, - kX86InstIdVphminposuw_NameIndex = 7019, - kX86InstIdVphsubbw_NameIndex = 7031, - kX86InstIdVphsubd_NameIndex = 7040, - kX86InstIdVphsubdq_NameIndex = 7048, - kX86InstIdVphsubsw_NameIndex = 7057, - kX86InstIdVphsubw_NameIndex = 7066, - kX86InstIdVphsubwd_NameIndex = 7074, - kX86InstIdVpinsrb_NameIndex = 7083, - kX86InstIdVpinsrd_NameIndex = 7091, - kX86InstIdVpinsrq_NameIndex = 7099, - kX86InstIdVpinsrw_NameIndex = 7107, - kX86InstIdVpmacsdd_NameIndex = 7115, - kX86InstIdVpmacsdqh_NameIndex = 7124, - kX86InstIdVpmacsdql_NameIndex = 7134, - kX86InstIdVpmacssdd_NameIndex = 7144, - kX86InstIdVpmacssdqh_NameIndex = 7154, - kX86InstIdVpmacssdql_NameIndex = 7165, - kX86InstIdVpmacsswd_NameIndex = 7176, - kX86InstIdVpmacssww_NameIndex = 7186, - kX86InstIdVpmacswd_NameIndex = 7196, - kX86InstIdVpmacsww_NameIndex = 7205, - kX86InstIdVpmadcsswd_NameIndex = 7214, - kX86InstIdVpmadcswd_NameIndex = 7225, - kX86InstIdVpmaddubsw_NameIndex = 7235, - kX86InstIdVpmaddwd_NameIndex = 7246, - kX86InstIdVpmaskmovd_NameIndex = 7255, - kX86InstIdVpmaskmovq_NameIndex = 7266, - kX86InstIdVpmaxsb_NameIndex = 7277, - kX86InstIdVpmaxsd_NameIndex = 7285, - kX86InstIdVpmaxsw_NameIndex = 7293, - kX86InstIdVpmaxub_NameIndex = 7301, - kX86InstIdVpmaxud_NameIndex = 7309, - kX86InstIdVpmaxuw_NameIndex = 7317, - kX86InstIdVpminsb_NameIndex = 7325, - kX86InstIdVpminsd_NameIndex = 7333, - kX86InstIdVpminsw_NameIndex = 7341, - kX86InstIdVpminub_NameIndex = 7349, - kX86InstIdVpminud_NameIndex = 7357, - kX86InstIdVpminuw_NameIndex = 7365, - kX86InstIdVpmovmskb_NameIndex = 7373, - kX86InstIdVpmovsxbd_NameIndex = 7383, - kX86InstIdVpmovsxbq_NameIndex = 7393, - kX86InstIdVpmovsxbw_NameIndex = 7403, - kX86InstIdVpmovsxdq_NameIndex = 7413, - kX86InstIdVpmovsxwd_NameIndex = 7423, - kX86InstIdVpmovsxwq_NameIndex = 7433, - kX86InstIdVpmovzxbd_NameIndex = 7443, - kX86InstIdVpmovzxbq_NameIndex = 7453, - kX86InstIdVpmovzxbw_NameIndex = 7463, - kX86InstIdVpmovzxdq_NameIndex = 7473, - kX86InstIdVpmovzxwd_NameIndex = 7483, - kX86InstIdVpmovzxwq_NameIndex = 7493, - kX86InstIdVpmuldq_NameIndex = 7503, - kX86InstIdVpmulhrsw_NameIndex = 7511, - kX86InstIdVpmulhuw_NameIndex = 7521, - kX86InstIdVpmulhw_NameIndex = 7530, - kX86InstIdVpmulld_NameIndex = 7538, - kX86InstIdVpmullw_NameIndex = 7546, - kX86InstIdVpmuludq_NameIndex = 7554, - kX86InstIdVpor_NameIndex = 7563, - kX86InstIdVpperm_NameIndex = 7568, - kX86InstIdVprotb_NameIndex = 7575, - kX86InstIdVprotd_NameIndex = 7582, - kX86InstIdVprotq_NameIndex = 7589, - kX86InstIdVprotw_NameIndex = 7596, - kX86InstIdVpsadbw_NameIndex = 7603, - kX86InstIdVpshab_NameIndex = 7611, - kX86InstIdVpshad_NameIndex = 7618, - kX86InstIdVpshaq_NameIndex = 7625, - kX86InstIdVpshaw_NameIndex = 7632, - kX86InstIdVpshlb_NameIndex = 7639, - kX86InstIdVpshld_NameIndex = 7646, - kX86InstIdVpshlq_NameIndex = 7653, - kX86InstIdVpshlw_NameIndex = 7660, - kX86InstIdVpshufb_NameIndex = 7667, - kX86InstIdVpshufd_NameIndex = 7675, - kX86InstIdVpshufhw_NameIndex = 7683, - kX86InstIdVpshuflw_NameIndex = 7692, - kX86InstIdVpsignb_NameIndex = 7701, - kX86InstIdVpsignd_NameIndex = 7709, - kX86InstIdVpsignw_NameIndex = 7717, - kX86InstIdVpslld_NameIndex = 7725, - kX86InstIdVpslldq_NameIndex = 7732, - kX86InstIdVpsllq_NameIndex = 7740, - kX86InstIdVpsllvd_NameIndex = 7747, - kX86InstIdVpsllvq_NameIndex = 7755, - kX86InstIdVpsllw_NameIndex = 7763, - kX86InstIdVpsrad_NameIndex = 7770, - kX86InstIdVpsravd_NameIndex = 7777, - kX86InstIdVpsraw_NameIndex = 7785, - kX86InstIdVpsrld_NameIndex = 7792, - kX86InstIdVpsrldq_NameIndex = 7799, - kX86InstIdVpsrlq_NameIndex = 7807, - kX86InstIdVpsrlvd_NameIndex = 7814, - kX86InstIdVpsrlvq_NameIndex = 7822, - kX86InstIdVpsrlw_NameIndex = 7830, - kX86InstIdVpsubb_NameIndex = 7837, - kX86InstIdVpsubd_NameIndex = 7844, - kX86InstIdVpsubq_NameIndex = 7851, - kX86InstIdVpsubsb_NameIndex = 7858, - kX86InstIdVpsubsw_NameIndex = 7866, - kX86InstIdVpsubusb_NameIndex = 7874, - kX86InstIdVpsubusw_NameIndex = 7883, - kX86InstIdVpsubw_NameIndex = 7892, - kX86InstIdVptest_NameIndex = 7899, - kX86InstIdVpunpckhbw_NameIndex = 7906, - kX86InstIdVpunpckhdq_NameIndex = 7917, - kX86InstIdVpunpckhqdq_NameIndex = 7928, - kX86InstIdVpunpckhwd_NameIndex = 7940, - kX86InstIdVpunpcklbw_NameIndex = 7951, - kX86InstIdVpunpckldq_NameIndex = 7962, - kX86InstIdVpunpcklqdq_NameIndex = 7973, - kX86InstIdVpunpcklwd_NameIndex = 7985, - kX86InstIdVpxor_NameIndex = 7996, - kX86InstIdVrcpps_NameIndex = 8002, - kX86InstIdVrcpss_NameIndex = 8009, - kX86InstIdVroundpd_NameIndex = 8016, - kX86InstIdVroundps_NameIndex = 8025, - kX86InstIdVroundsd_NameIndex = 8034, - kX86InstIdVroundss_NameIndex = 8043, - kX86InstIdVrsqrtps_NameIndex = 8052, - kX86InstIdVrsqrtss_NameIndex = 8061, - kX86InstIdVshufpd_NameIndex = 8070, - kX86InstIdVshufps_NameIndex = 8078, - kX86InstIdVsqrtpd_NameIndex = 8086, - kX86InstIdVsqrtps_NameIndex = 8094, - kX86InstIdVsqrtsd_NameIndex = 8102, - kX86InstIdVsqrtss_NameIndex = 8110, - kX86InstIdVstmxcsr_NameIndex = 8118, - kX86InstIdVsubpd_NameIndex = 8127, - kX86InstIdVsubps_NameIndex = 8134, - kX86InstIdVsubsd_NameIndex = 8141, - kX86InstIdVsubss_NameIndex = 8148, - kX86InstIdVtestpd_NameIndex = 8155, - kX86InstIdVtestps_NameIndex = 8163, - kX86InstIdVucomisd_NameIndex = 8171, - kX86InstIdVucomiss_NameIndex = 8180, - kX86InstIdVunpckhpd_NameIndex = 8189, - kX86InstIdVunpckhps_NameIndex = 8199, - kX86InstIdVunpcklpd_NameIndex = 8209, - kX86InstIdVunpcklps_NameIndex = 8219, - kX86InstIdVxorpd_NameIndex = 8229, - kX86InstIdVxorps_NameIndex = 8236, - kX86InstIdVzeroall_NameIndex = 8243, - kX86InstIdVzeroupper_NameIndex = 8252, - kX86InstIdWrfsbase_NameIndex = 8263, - kX86InstIdWrgsbase_NameIndex = 8272, - kX86InstIdXadd_NameIndex = 8281, - kX86InstIdXchg_NameIndex = 8286, - kX86InstIdXor_NameIndex = 8291, - kX86InstIdXorpd_NameIndex = 8295, - kX86InstIdXorps_NameIndex = 8301 + kX86InstIdExtrq_NameIndex = 877, + kX86InstIdF2xm1_NameIndex = 883, + kX86InstIdFabs_NameIndex = 889, + kX86InstIdFadd_NameIndex = 894, + kX86InstIdFaddp_NameIndex = 899, + kX86InstIdFbld_NameIndex = 905, + kX86InstIdFbstp_NameIndex = 910, + kX86InstIdFchs_NameIndex = 916, + kX86InstIdFclex_NameIndex = 921, + kX86InstIdFcmovb_NameIndex = 927, + kX86InstIdFcmovbe_NameIndex = 934, + kX86InstIdFcmove_NameIndex = 942, + kX86InstIdFcmovnb_NameIndex = 949, + kX86InstIdFcmovnbe_NameIndex = 957, + kX86InstIdFcmovne_NameIndex = 966, + kX86InstIdFcmovnu_NameIndex = 974, + kX86InstIdFcmovu_NameIndex = 982, + kX86InstIdFcom_NameIndex = 989, + kX86InstIdFcomi_NameIndex = 994, + kX86InstIdFcomip_NameIndex = 1000, + kX86InstIdFcomp_NameIndex = 1007, + kX86InstIdFcompp_NameIndex = 1013, + kX86InstIdFcos_NameIndex = 1020, + kX86InstIdFdecstp_NameIndex = 1025, + kX86InstIdFdiv_NameIndex = 1033, + kX86InstIdFdivp_NameIndex = 1038, + kX86InstIdFdivr_NameIndex = 1044, + kX86InstIdFdivrp_NameIndex = 1050, + kX86InstIdFemms_NameIndex = 1057, + kX86InstIdFfree_NameIndex = 1063, + kX86InstIdFiadd_NameIndex = 1069, + kX86InstIdFicom_NameIndex = 1075, + kX86InstIdFicomp_NameIndex = 1081, + kX86InstIdFidiv_NameIndex = 1088, + kX86InstIdFidivr_NameIndex = 1094, + kX86InstIdFild_NameIndex = 1101, + kX86InstIdFimul_NameIndex = 1106, + kX86InstIdFincstp_NameIndex = 1112, + kX86InstIdFinit_NameIndex = 1120, + kX86InstIdFist_NameIndex = 1126, + kX86InstIdFistp_NameIndex = 1131, + kX86InstIdFisttp_NameIndex = 1137, + kX86InstIdFisub_NameIndex = 1144, + kX86InstIdFisubr_NameIndex = 1150, + kX86InstIdFld_NameIndex = 1157, + kX86InstIdFld1_NameIndex = 1161, + kX86InstIdFldcw_NameIndex = 1166, + kX86InstIdFldenv_NameIndex = 1172, + kX86InstIdFldl2e_NameIndex = 1179, + kX86InstIdFldl2t_NameIndex = 1186, + kX86InstIdFldlg2_NameIndex = 1193, + kX86InstIdFldln2_NameIndex = 1200, + kX86InstIdFldpi_NameIndex = 1207, + kX86InstIdFldz_NameIndex = 1213, + kX86InstIdFmul_NameIndex = 1218, + kX86InstIdFmulp_NameIndex = 1223, + kX86InstIdFnclex_NameIndex = 1229, + kX86InstIdFninit_NameIndex = 1236, + kX86InstIdFnop_NameIndex = 1243, + kX86InstIdFnsave_NameIndex = 1248, + kX86InstIdFnstcw_NameIndex = 1255, + kX86InstIdFnstenv_NameIndex = 1262, + kX86InstIdFnstsw_NameIndex = 1270, + kX86InstIdFpatan_NameIndex = 1277, + kX86InstIdFprem_NameIndex = 1284, + kX86InstIdFprem1_NameIndex = 1290, + kX86InstIdFptan_NameIndex = 1297, + kX86InstIdFrndint_NameIndex = 1303, + kX86InstIdFrstor_NameIndex = 1311, + kX86InstIdFsave_NameIndex = 1318, + kX86InstIdFscale_NameIndex = 1324, + kX86InstIdFsin_NameIndex = 1331, + kX86InstIdFsincos_NameIndex = 1336, + kX86InstIdFsqrt_NameIndex = 1344, + kX86InstIdFst_NameIndex = 1350, + kX86InstIdFstcw_NameIndex = 1354, + kX86InstIdFstenv_NameIndex = 1360, + kX86InstIdFstp_NameIndex = 1367, + kX86InstIdFstsw_NameIndex = 1372, + kX86InstIdFsub_NameIndex = 1378, + kX86InstIdFsubp_NameIndex = 1383, + kX86InstIdFsubr_NameIndex = 1389, + kX86InstIdFsubrp_NameIndex = 1395, + kX86InstIdFtst_NameIndex = 1402, + kX86InstIdFucom_NameIndex = 1407, + kX86InstIdFucomi_NameIndex = 1413, + kX86InstIdFucomip_NameIndex = 1420, + kX86InstIdFucomp_NameIndex = 1428, + kX86InstIdFucompp_NameIndex = 1435, + kX86InstIdFwait_NameIndex = 1443, + kX86InstIdFxam_NameIndex = 1449, + kX86InstIdFxch_NameIndex = 1454, + kX86InstIdFxrstor_NameIndex = 1459, + kX86InstIdFxsave_NameIndex = 1467, + kX86InstIdFxtract_NameIndex = 1474, + kX86InstIdFyl2x_NameIndex = 1482, + kX86InstIdFyl2xp1_NameIndex = 1488, + kX86InstIdHaddpd_NameIndex = 1496, + kX86InstIdHaddps_NameIndex = 1503, + kX86InstIdHsubpd_NameIndex = 1510, + kX86InstIdHsubps_NameIndex = 1517, + kX86InstIdIdiv_NameIndex = 1524, + kX86InstIdImul_NameIndex = 1529, + kX86InstIdInc_NameIndex = 1534, + kX86InstIdInsertps_NameIndex = 1538, + kX86InstIdInsertq_NameIndex = 1547, + kX86InstIdInt_NameIndex = 1555, + kX86InstIdJa_NameIndex = 1559, + kX86InstIdJae_NameIndex = 1562, + kX86InstIdJb_NameIndex = 1566, + kX86InstIdJbe_NameIndex = 1569, + kX86InstIdJc_NameIndex = 1573, + kX86InstIdJe_NameIndex = 1576, + kX86InstIdJg_NameIndex = 1579, + kX86InstIdJge_NameIndex = 1582, + kX86InstIdJl_NameIndex = 1586, + kX86InstIdJle_NameIndex = 1589, + kX86InstIdJna_NameIndex = 1593, + kX86InstIdJnae_NameIndex = 1597, + kX86InstIdJnb_NameIndex = 1602, + kX86InstIdJnbe_NameIndex = 1606, + kX86InstIdJnc_NameIndex = 1611, + kX86InstIdJne_NameIndex = 1615, + kX86InstIdJng_NameIndex = 1619, + kX86InstIdJnge_NameIndex = 1623, + kX86InstIdJnl_NameIndex = 1628, + kX86InstIdJnle_NameIndex = 1632, + kX86InstIdJno_NameIndex = 1637, + kX86InstIdJnp_NameIndex = 1641, + kX86InstIdJns_NameIndex = 1645, + kX86InstIdJnz_NameIndex = 1649, + kX86InstIdJo_NameIndex = 1653, + kX86InstIdJp_NameIndex = 1656, + kX86InstIdJpe_NameIndex = 1659, + kX86InstIdJpo_NameIndex = 1663, + kX86InstIdJs_NameIndex = 1667, + kX86InstIdJz_NameIndex = 1670, + kX86InstIdJecxz_NameIndex = 1673, + kX86InstIdJmp_NameIndex = 1679, + kX86InstIdLahf_NameIndex = 1683, + kX86InstIdLddqu_NameIndex = 1688, + kX86InstIdLdmxcsr_NameIndex = 1694, + kX86InstIdLea_NameIndex = 1702, + kX86InstIdLeave_NameIndex = 1706, + kX86InstIdLfence_NameIndex = 1712, + kX86InstIdLodsB_NameIndex = 1719, + kX86InstIdLodsD_NameIndex = 1726, + kX86InstIdLodsQ_NameIndex = 1733, + kX86InstIdLodsW_NameIndex = 1740, + kX86InstIdLzcnt_NameIndex = 1747, + kX86InstIdMaskmovdqu_NameIndex = 1753, + kX86InstIdMaskmovq_NameIndex = 1764, + kX86InstIdMaxpd_NameIndex = 1773, + kX86InstIdMaxps_NameIndex = 1779, + kX86InstIdMaxsd_NameIndex = 1785, + kX86InstIdMaxss_NameIndex = 1791, + kX86InstIdMfence_NameIndex = 1797, + kX86InstIdMinpd_NameIndex = 1804, + kX86InstIdMinps_NameIndex = 1810, + kX86InstIdMinsd_NameIndex = 1816, + kX86InstIdMinss_NameIndex = 1822, + kX86InstIdMonitor_NameIndex = 1828, + kX86InstIdMov_NameIndex = 1836, + kX86InstIdMovPtr_NameIndex = 1840, + kX86InstIdMovapd_NameIndex = 1848, + kX86InstIdMovaps_NameIndex = 1855, + kX86InstIdMovbe_NameIndex = 1862, + kX86InstIdMovd_NameIndex = 1868, + kX86InstIdMovddup_NameIndex = 1873, + kX86InstIdMovdq2q_NameIndex = 1881, + kX86InstIdMovdqa_NameIndex = 1889, + kX86InstIdMovdqu_NameIndex = 1896, + kX86InstIdMovhlps_NameIndex = 1903, + kX86InstIdMovhpd_NameIndex = 1911, + kX86InstIdMovhps_NameIndex = 1918, + kX86InstIdMovlhps_NameIndex = 1925, + kX86InstIdMovlpd_NameIndex = 1933, + kX86InstIdMovlps_NameIndex = 1940, + kX86InstIdMovmskpd_NameIndex = 1947, + kX86InstIdMovmskps_NameIndex = 1956, + kX86InstIdMovntdq_NameIndex = 1965, + kX86InstIdMovntdqa_NameIndex = 1973, + kX86InstIdMovnti_NameIndex = 1982, + kX86InstIdMovntpd_NameIndex = 1989, + kX86InstIdMovntps_NameIndex = 1997, + kX86InstIdMovntq_NameIndex = 2005, + kX86InstIdMovntsd_NameIndex = 2012, + kX86InstIdMovntss_NameIndex = 2020, + kX86InstIdMovq_NameIndex = 2028, + kX86InstIdMovq2dq_NameIndex = 2033, + kX86InstIdMovsB_NameIndex = 2041, + kX86InstIdMovsD_NameIndex = 2048, + kX86InstIdMovsQ_NameIndex = 2055, + kX86InstIdMovsW_NameIndex = 2062, + kX86InstIdMovsd_NameIndex = 2069, + kX86InstIdMovshdup_NameIndex = 2075, + kX86InstIdMovsldup_NameIndex = 2084, + kX86InstIdMovss_NameIndex = 2093, + kX86InstIdMovsx_NameIndex = 2099, + kX86InstIdMovsxd_NameIndex = 2105, + kX86InstIdMovupd_NameIndex = 2112, + kX86InstIdMovups_NameIndex = 2119, + kX86InstIdMovzx_NameIndex = 2126, + kX86InstIdMpsadbw_NameIndex = 2132, + kX86InstIdMul_NameIndex = 2140, + kX86InstIdMulpd_NameIndex = 2144, + kX86InstIdMulps_NameIndex = 2150, + kX86InstIdMulsd_NameIndex = 2156, + kX86InstIdMulss_NameIndex = 2162, + kX86InstIdMulx_NameIndex = 2168, + kX86InstIdMwait_NameIndex = 2173, + kX86InstIdNeg_NameIndex = 2179, + kX86InstIdNop_NameIndex = 2183, + kX86InstIdNot_NameIndex = 2187, + kX86InstIdOr_NameIndex = 2191, + kX86InstIdOrpd_NameIndex = 2194, + kX86InstIdOrps_NameIndex = 2199, + kX86InstIdPabsb_NameIndex = 2204, + kX86InstIdPabsd_NameIndex = 2210, + kX86InstIdPabsw_NameIndex = 2216, + kX86InstIdPackssdw_NameIndex = 2222, + kX86InstIdPacksswb_NameIndex = 2231, + kX86InstIdPackusdw_NameIndex = 2240, + kX86InstIdPackuswb_NameIndex = 2249, + kX86InstIdPaddb_NameIndex = 2258, + kX86InstIdPaddd_NameIndex = 2264, + kX86InstIdPaddq_NameIndex = 2270, + kX86InstIdPaddsb_NameIndex = 2276, + kX86InstIdPaddsw_NameIndex = 2283, + kX86InstIdPaddusb_NameIndex = 2290, + kX86InstIdPaddusw_NameIndex = 2298, + kX86InstIdPaddw_NameIndex = 2306, + kX86InstIdPalignr_NameIndex = 2312, + kX86InstIdPand_NameIndex = 2320, + kX86InstIdPandn_NameIndex = 2325, + kX86InstIdPause_NameIndex = 2331, + kX86InstIdPavgb_NameIndex = 2337, + kX86InstIdPavgw_NameIndex = 2343, + kX86InstIdPblendvb_NameIndex = 2349, + kX86InstIdPblendw_NameIndex = 2358, + kX86InstIdPclmulqdq_NameIndex = 2366, + kX86InstIdPcmpeqb_NameIndex = 2376, + kX86InstIdPcmpeqd_NameIndex = 2384, + kX86InstIdPcmpeqq_NameIndex = 2392, + kX86InstIdPcmpeqw_NameIndex = 2400, + kX86InstIdPcmpestri_NameIndex = 2408, + kX86InstIdPcmpestrm_NameIndex = 2418, + kX86InstIdPcmpgtb_NameIndex = 2428, + kX86InstIdPcmpgtd_NameIndex = 2436, + kX86InstIdPcmpgtq_NameIndex = 2444, + kX86InstIdPcmpgtw_NameIndex = 2452, + kX86InstIdPcmpistri_NameIndex = 2460, + kX86InstIdPcmpistrm_NameIndex = 2470, + kX86InstIdPdep_NameIndex = 2480, + kX86InstIdPext_NameIndex = 2485, + kX86InstIdPextrb_NameIndex = 2490, + kX86InstIdPextrd_NameIndex = 2497, + kX86InstIdPextrq_NameIndex = 2504, + kX86InstIdPextrw_NameIndex = 2511, + kX86InstIdPf2id_NameIndex = 2518, + kX86InstIdPf2iw_NameIndex = 2524, + kX86InstIdPfacc_NameIndex = 2530, + kX86InstIdPfadd_NameIndex = 2536, + kX86InstIdPfcmpeq_NameIndex = 2542, + kX86InstIdPfcmpge_NameIndex = 2550, + kX86InstIdPfcmpgt_NameIndex = 2558, + kX86InstIdPfmax_NameIndex = 2566, + kX86InstIdPfmin_NameIndex = 2572, + kX86InstIdPfmul_NameIndex = 2578, + kX86InstIdPfnacc_NameIndex = 2584, + kX86InstIdPfpnacc_NameIndex = 2591, + kX86InstIdPfrcp_NameIndex = 2599, + kX86InstIdPfrcpit1_NameIndex = 2605, + kX86InstIdPfrcpit2_NameIndex = 2614, + kX86InstIdPfrsqit1_NameIndex = 2623, + kX86InstIdPfrsqrt_NameIndex = 2632, + kX86InstIdPfsub_NameIndex = 2640, + kX86InstIdPfsubr_NameIndex = 2646, + kX86InstIdPhaddd_NameIndex = 2653, + kX86InstIdPhaddsw_NameIndex = 2660, + kX86InstIdPhaddw_NameIndex = 2668, + kX86InstIdPhminposuw_NameIndex = 2675, + kX86InstIdPhsubd_NameIndex = 2686, + kX86InstIdPhsubsw_NameIndex = 2693, + kX86InstIdPhsubw_NameIndex = 2701, + kX86InstIdPi2fd_NameIndex = 2708, + kX86InstIdPi2fw_NameIndex = 2714, + kX86InstIdPinsrb_NameIndex = 2720, + kX86InstIdPinsrd_NameIndex = 2727, + kX86InstIdPinsrq_NameIndex = 2734, + kX86InstIdPinsrw_NameIndex = 2741, + kX86InstIdPmaddubsw_NameIndex = 2748, + kX86InstIdPmaddwd_NameIndex = 2758, + kX86InstIdPmaxsb_NameIndex = 2766, + kX86InstIdPmaxsd_NameIndex = 2773, + kX86InstIdPmaxsw_NameIndex = 2780, + kX86InstIdPmaxub_NameIndex = 2787, + kX86InstIdPmaxud_NameIndex = 2794, + kX86InstIdPmaxuw_NameIndex = 2801, + kX86InstIdPminsb_NameIndex = 2808, + kX86InstIdPminsd_NameIndex = 2815, + kX86InstIdPminsw_NameIndex = 2822, + kX86InstIdPminub_NameIndex = 2829, + kX86InstIdPminud_NameIndex = 2836, + kX86InstIdPminuw_NameIndex = 2843, + kX86InstIdPmovmskb_NameIndex = 2850, + kX86InstIdPmovsxbd_NameIndex = 2859, + kX86InstIdPmovsxbq_NameIndex = 2868, + kX86InstIdPmovsxbw_NameIndex = 2877, + kX86InstIdPmovsxdq_NameIndex = 2886, + kX86InstIdPmovsxwd_NameIndex = 2895, + kX86InstIdPmovsxwq_NameIndex = 2904, + kX86InstIdPmovzxbd_NameIndex = 2913, + kX86InstIdPmovzxbq_NameIndex = 2922, + kX86InstIdPmovzxbw_NameIndex = 2931, + kX86InstIdPmovzxdq_NameIndex = 2940, + kX86InstIdPmovzxwd_NameIndex = 2949, + kX86InstIdPmovzxwq_NameIndex = 2958, + kX86InstIdPmuldq_NameIndex = 2967, + kX86InstIdPmulhrsw_NameIndex = 2974, + kX86InstIdPmulhuw_NameIndex = 2983, + kX86InstIdPmulhw_NameIndex = 2991, + kX86InstIdPmulld_NameIndex = 2998, + kX86InstIdPmullw_NameIndex = 3005, + kX86InstIdPmuludq_NameIndex = 3012, + kX86InstIdPop_NameIndex = 3020, + kX86InstIdPopa_NameIndex = 3024, + kX86InstIdPopcnt_NameIndex = 3029, + kX86InstIdPopf_NameIndex = 3036, + kX86InstIdPor_NameIndex = 3041, + kX86InstIdPrefetch_NameIndex = 3045, + kX86InstIdPrefetch3dNow_NameIndex = 3054, + kX86InstIdPrefetchw3dNow_NameIndex = 3069, + kX86InstIdPsadbw_NameIndex = 3085, + kX86InstIdPshufb_NameIndex = 3092, + kX86InstIdPshufd_NameIndex = 3099, + kX86InstIdPshufhw_NameIndex = 3106, + kX86InstIdPshuflw_NameIndex = 3114, + kX86InstIdPshufw_NameIndex = 3122, + kX86InstIdPsignb_NameIndex = 3129, + kX86InstIdPsignd_NameIndex = 3136, + kX86InstIdPsignw_NameIndex = 3143, + kX86InstIdPslld_NameIndex = 3150, + kX86InstIdPslldq_NameIndex = 3156, + kX86InstIdPsllq_NameIndex = 3163, + kX86InstIdPsllw_NameIndex = 3169, + kX86InstIdPsrad_NameIndex = 3175, + kX86InstIdPsraw_NameIndex = 3181, + kX86InstIdPsrld_NameIndex = 3187, + kX86InstIdPsrldq_NameIndex = 3193, + kX86InstIdPsrlq_NameIndex = 3200, + kX86InstIdPsrlw_NameIndex = 3206, + kX86InstIdPsubb_NameIndex = 3212, + kX86InstIdPsubd_NameIndex = 3218, + kX86InstIdPsubq_NameIndex = 3224, + kX86InstIdPsubsb_NameIndex = 3230, + kX86InstIdPsubsw_NameIndex = 3237, + kX86InstIdPsubusb_NameIndex = 3244, + kX86InstIdPsubusw_NameIndex = 3252, + kX86InstIdPsubw_NameIndex = 3260, + kX86InstIdPswapd_NameIndex = 3266, + kX86InstIdPtest_NameIndex = 3273, + kX86InstIdPunpckhbw_NameIndex = 3279, + kX86InstIdPunpckhdq_NameIndex = 3289, + kX86InstIdPunpckhqdq_NameIndex = 3299, + kX86InstIdPunpckhwd_NameIndex = 3310, + kX86InstIdPunpcklbw_NameIndex = 3320, + kX86InstIdPunpckldq_NameIndex = 3330, + kX86InstIdPunpcklqdq_NameIndex = 3340, + kX86InstIdPunpcklwd_NameIndex = 3351, + kX86InstIdPush_NameIndex = 3361, + kX86InstIdPusha_NameIndex = 3366, + kX86InstIdPushf_NameIndex = 3372, + kX86InstIdPxor_NameIndex = 3378, + kX86InstIdRcl_NameIndex = 3383, + kX86InstIdRcpps_NameIndex = 3387, + kX86InstIdRcpss_NameIndex = 3393, + kX86InstIdRcr_NameIndex = 3399, + kX86InstIdRdfsbase_NameIndex = 3403, + kX86InstIdRdgsbase_NameIndex = 3412, + kX86InstIdRdrand_NameIndex = 3421, + kX86InstIdRdtsc_NameIndex = 3428, + kX86InstIdRdtscp_NameIndex = 3434, + kX86InstIdRepLodsB_NameIndex = 3441, + kX86InstIdRepLodsD_NameIndex = 3452, + kX86InstIdRepLodsQ_NameIndex = 3463, + kX86InstIdRepLodsW_NameIndex = 3474, + kX86InstIdRepMovsB_NameIndex = 3485, + kX86InstIdRepMovsD_NameIndex = 3496, + kX86InstIdRepMovsQ_NameIndex = 3507, + kX86InstIdRepMovsW_NameIndex = 3518, + kX86InstIdRepStosB_NameIndex = 3529, + kX86InstIdRepStosD_NameIndex = 3540, + kX86InstIdRepStosQ_NameIndex = 3551, + kX86InstIdRepStosW_NameIndex = 3562, + kX86InstIdRepeCmpsB_NameIndex = 3573, + kX86InstIdRepeCmpsD_NameIndex = 3585, + kX86InstIdRepeCmpsQ_NameIndex = 3597, + kX86InstIdRepeCmpsW_NameIndex = 3609, + kX86InstIdRepeScasB_NameIndex = 3621, + kX86InstIdRepeScasD_NameIndex = 3633, + kX86InstIdRepeScasQ_NameIndex = 3645, + kX86InstIdRepeScasW_NameIndex = 3657, + kX86InstIdRepneCmpsB_NameIndex = 3669, + kX86InstIdRepneCmpsD_NameIndex = 3682, + kX86InstIdRepneCmpsQ_NameIndex = 3695, + kX86InstIdRepneCmpsW_NameIndex = 3708, + kX86InstIdRepneScasB_NameIndex = 3721, + kX86InstIdRepneScasD_NameIndex = 3734, + kX86InstIdRepneScasQ_NameIndex = 3747, + kX86InstIdRepneScasW_NameIndex = 3760, + kX86InstIdRet_NameIndex = 3773, + kX86InstIdRol_NameIndex = 3777, + kX86InstIdRor_NameIndex = 3781, + kX86InstIdRorx_NameIndex = 3785, + kX86InstIdRoundpd_NameIndex = 3790, + kX86InstIdRoundps_NameIndex = 3798, + kX86InstIdRoundsd_NameIndex = 3806, + kX86InstIdRoundss_NameIndex = 3814, + kX86InstIdRsqrtps_NameIndex = 3822, + kX86InstIdRsqrtss_NameIndex = 3830, + kX86InstIdSahf_NameIndex = 3838, + kX86InstIdSal_NameIndex = 3843, + kX86InstIdSar_NameIndex = 3847, + kX86InstIdSarx_NameIndex = 3851, + kX86InstIdSbb_NameIndex = 3856, + kX86InstIdScasB_NameIndex = 3860, + kX86InstIdScasD_NameIndex = 3867, + kX86InstIdScasQ_NameIndex = 3874, + kX86InstIdScasW_NameIndex = 3881, + kX86InstIdSeta_NameIndex = 3888, + kX86InstIdSetae_NameIndex = 3893, + kX86InstIdSetb_NameIndex = 3899, + kX86InstIdSetbe_NameIndex = 3904, + kX86InstIdSetc_NameIndex = 3910, + kX86InstIdSete_NameIndex = 3915, + kX86InstIdSetg_NameIndex = 3920, + kX86InstIdSetge_NameIndex = 3925, + kX86InstIdSetl_NameIndex = 3931, + kX86InstIdSetle_NameIndex = 3936, + kX86InstIdSetna_NameIndex = 3942, + kX86InstIdSetnae_NameIndex = 3948, + kX86InstIdSetnb_NameIndex = 3955, + kX86InstIdSetnbe_NameIndex = 3961, + kX86InstIdSetnc_NameIndex = 3968, + kX86InstIdSetne_NameIndex = 3974, + kX86InstIdSetng_NameIndex = 3980, + kX86InstIdSetnge_NameIndex = 3986, + kX86InstIdSetnl_NameIndex = 3993, + kX86InstIdSetnle_NameIndex = 3999, + kX86InstIdSetno_NameIndex = 4006, + kX86InstIdSetnp_NameIndex = 4012, + kX86InstIdSetns_NameIndex = 4018, + kX86InstIdSetnz_NameIndex = 4024, + kX86InstIdSeto_NameIndex = 4030, + kX86InstIdSetp_NameIndex = 4035, + kX86InstIdSetpe_NameIndex = 4040, + kX86InstIdSetpo_NameIndex = 4046, + kX86InstIdSets_NameIndex = 4052, + kX86InstIdSetz_NameIndex = 4057, + kX86InstIdSfence_NameIndex = 4062, + kX86InstIdShl_NameIndex = 4069, + kX86InstIdShld_NameIndex = 4073, + kX86InstIdShlx_NameIndex = 4078, + kX86InstIdShr_NameIndex = 4083, + kX86InstIdShrd_NameIndex = 4087, + kX86InstIdShrx_NameIndex = 4092, + kX86InstIdShufpd_NameIndex = 4097, + kX86InstIdShufps_NameIndex = 4104, + kX86InstIdSqrtpd_NameIndex = 4111, + kX86InstIdSqrtps_NameIndex = 4118, + kX86InstIdSqrtsd_NameIndex = 4125, + kX86InstIdSqrtss_NameIndex = 4132, + kX86InstIdStc_NameIndex = 4139, + kX86InstIdStd_NameIndex = 4143, + kX86InstIdStmxcsr_NameIndex = 4147, + kX86InstIdStosB_NameIndex = 4155, + kX86InstIdStosD_NameIndex = 4162, + kX86InstIdStosQ_NameIndex = 4169, + kX86InstIdStosW_NameIndex = 4176, + kX86InstIdSub_NameIndex = 4183, + kX86InstIdSubpd_NameIndex = 4187, + kX86InstIdSubps_NameIndex = 4193, + kX86InstIdSubsd_NameIndex = 4199, + kX86InstIdSubss_NameIndex = 4205, + kX86InstIdTest_NameIndex = 4211, + kX86InstIdTzcnt_NameIndex = 4216, + kX86InstIdUcomisd_NameIndex = 4222, + kX86InstIdUcomiss_NameIndex = 4230, + kX86InstIdUd2_NameIndex = 4238, + kX86InstIdUnpckhpd_NameIndex = 4242, + kX86InstIdUnpckhps_NameIndex = 4251, + kX86InstIdUnpcklpd_NameIndex = 4260, + kX86InstIdUnpcklps_NameIndex = 4269, + kX86InstIdVaddpd_NameIndex = 4278, + kX86InstIdVaddps_NameIndex = 4285, + kX86InstIdVaddsd_NameIndex = 4292, + kX86InstIdVaddss_NameIndex = 4299, + kX86InstIdVaddsubpd_NameIndex = 4306, + kX86InstIdVaddsubps_NameIndex = 4316, + kX86InstIdVaesdec_NameIndex = 4326, + kX86InstIdVaesdeclast_NameIndex = 4334, + kX86InstIdVaesenc_NameIndex = 4346, + kX86InstIdVaesenclast_NameIndex = 4354, + kX86InstIdVaesimc_NameIndex = 4366, + kX86InstIdVaeskeygenassist_NameIndex = 4374, + kX86InstIdVandnpd_NameIndex = 4391, + kX86InstIdVandnps_NameIndex = 4399, + kX86InstIdVandpd_NameIndex = 4407, + kX86InstIdVandps_NameIndex = 4414, + kX86InstIdVblendpd_NameIndex = 4421, + kX86InstIdVblendps_NameIndex = 4430, + kX86InstIdVblendvpd_NameIndex = 4439, + kX86InstIdVblendvps_NameIndex = 4449, + kX86InstIdVbroadcastf128_NameIndex = 4459, + kX86InstIdVbroadcasti128_NameIndex = 4474, + kX86InstIdVbroadcastsd_NameIndex = 4489, + kX86InstIdVbroadcastss_NameIndex = 4502, + kX86InstIdVcmppd_NameIndex = 4515, + kX86InstIdVcmpps_NameIndex = 4522, + kX86InstIdVcmpsd_NameIndex = 4529, + kX86InstIdVcmpss_NameIndex = 4536, + kX86InstIdVcomisd_NameIndex = 4543, + kX86InstIdVcomiss_NameIndex = 4551, + kX86InstIdVcvtdq2pd_NameIndex = 4559, + kX86InstIdVcvtdq2ps_NameIndex = 4569, + kX86InstIdVcvtpd2dq_NameIndex = 4579, + kX86InstIdVcvtpd2ps_NameIndex = 4589, + kX86InstIdVcvtph2ps_NameIndex = 4599, + kX86InstIdVcvtps2dq_NameIndex = 4609, + kX86InstIdVcvtps2pd_NameIndex = 4619, + kX86InstIdVcvtps2ph_NameIndex = 4629, + kX86InstIdVcvtsd2si_NameIndex = 4639, + kX86InstIdVcvtsd2ss_NameIndex = 4649, + kX86InstIdVcvtsi2sd_NameIndex = 4659, + kX86InstIdVcvtsi2ss_NameIndex = 4669, + kX86InstIdVcvtss2sd_NameIndex = 4679, + kX86InstIdVcvtss2si_NameIndex = 4689, + kX86InstIdVcvttpd2dq_NameIndex = 4699, + kX86InstIdVcvttps2dq_NameIndex = 4710, + kX86InstIdVcvttsd2si_NameIndex = 4721, + kX86InstIdVcvttss2si_NameIndex = 4732, + kX86InstIdVdivpd_NameIndex = 4743, + kX86InstIdVdivps_NameIndex = 4750, + kX86InstIdVdivsd_NameIndex = 4757, + kX86InstIdVdivss_NameIndex = 4764, + kX86InstIdVdppd_NameIndex = 4771, + kX86InstIdVdpps_NameIndex = 4777, + kX86InstIdVextractf128_NameIndex = 4783, + kX86InstIdVextracti128_NameIndex = 4796, + kX86InstIdVextractps_NameIndex = 4809, + kX86InstIdVfmadd132pd_NameIndex = 4820, + kX86InstIdVfmadd132ps_NameIndex = 4832, + kX86InstIdVfmadd132sd_NameIndex = 4844, + kX86InstIdVfmadd132ss_NameIndex = 4856, + kX86InstIdVfmadd213pd_NameIndex = 4868, + kX86InstIdVfmadd213ps_NameIndex = 4880, + kX86InstIdVfmadd213sd_NameIndex = 4892, + kX86InstIdVfmadd213ss_NameIndex = 4904, + kX86InstIdVfmadd231pd_NameIndex = 4916, + kX86InstIdVfmadd231ps_NameIndex = 4928, + kX86InstIdVfmadd231sd_NameIndex = 4940, + kX86InstIdVfmadd231ss_NameIndex = 4952, + kX86InstIdVfmaddpd_NameIndex = 4964, + kX86InstIdVfmaddps_NameIndex = 4973, + kX86InstIdVfmaddsd_NameIndex = 4982, + kX86InstIdVfmaddss_NameIndex = 4991, + kX86InstIdVfmaddsub132pd_NameIndex = 5000, + kX86InstIdVfmaddsub132ps_NameIndex = 5015, + kX86InstIdVfmaddsub213pd_NameIndex = 5030, + kX86InstIdVfmaddsub213ps_NameIndex = 5045, + kX86InstIdVfmaddsub231pd_NameIndex = 5060, + kX86InstIdVfmaddsub231ps_NameIndex = 5075, + kX86InstIdVfmaddsubpd_NameIndex = 5090, + kX86InstIdVfmaddsubps_NameIndex = 5102, + kX86InstIdVfmsub132pd_NameIndex = 5114, + kX86InstIdVfmsub132ps_NameIndex = 5126, + kX86InstIdVfmsub132sd_NameIndex = 5138, + kX86InstIdVfmsub132ss_NameIndex = 5150, + kX86InstIdVfmsub213pd_NameIndex = 5162, + kX86InstIdVfmsub213ps_NameIndex = 5174, + kX86InstIdVfmsub213sd_NameIndex = 5186, + kX86InstIdVfmsub213ss_NameIndex = 5198, + kX86InstIdVfmsub231pd_NameIndex = 5210, + kX86InstIdVfmsub231ps_NameIndex = 5222, + kX86InstIdVfmsub231sd_NameIndex = 5234, + kX86InstIdVfmsub231ss_NameIndex = 5246, + kX86InstIdVfmsubadd132pd_NameIndex = 5258, + kX86InstIdVfmsubadd132ps_NameIndex = 5273, + kX86InstIdVfmsubadd213pd_NameIndex = 5288, + kX86InstIdVfmsubadd213ps_NameIndex = 5303, + kX86InstIdVfmsubadd231pd_NameIndex = 5318, + kX86InstIdVfmsubadd231ps_NameIndex = 5333, + kX86InstIdVfmsubaddpd_NameIndex = 5348, + kX86InstIdVfmsubaddps_NameIndex = 5360, + kX86InstIdVfmsubpd_NameIndex = 5372, + kX86InstIdVfmsubps_NameIndex = 5381, + kX86InstIdVfmsubsd_NameIndex = 5390, + kX86InstIdVfmsubss_NameIndex = 5399, + kX86InstIdVfnmadd132pd_NameIndex = 5408, + kX86InstIdVfnmadd132ps_NameIndex = 5421, + kX86InstIdVfnmadd132sd_NameIndex = 5434, + kX86InstIdVfnmadd132ss_NameIndex = 5447, + kX86InstIdVfnmadd213pd_NameIndex = 5460, + kX86InstIdVfnmadd213ps_NameIndex = 5473, + kX86InstIdVfnmadd213sd_NameIndex = 5486, + kX86InstIdVfnmadd213ss_NameIndex = 5499, + kX86InstIdVfnmadd231pd_NameIndex = 5512, + kX86InstIdVfnmadd231ps_NameIndex = 5525, + kX86InstIdVfnmadd231sd_NameIndex = 5538, + kX86InstIdVfnmadd231ss_NameIndex = 5551, + kX86InstIdVfnmaddpd_NameIndex = 5564, + kX86InstIdVfnmaddps_NameIndex = 5574, + kX86InstIdVfnmaddsd_NameIndex = 5584, + kX86InstIdVfnmaddss_NameIndex = 5594, + kX86InstIdVfnmsub132pd_NameIndex = 5604, + kX86InstIdVfnmsub132ps_NameIndex = 5617, + kX86InstIdVfnmsub132sd_NameIndex = 5630, + kX86InstIdVfnmsub132ss_NameIndex = 5643, + kX86InstIdVfnmsub213pd_NameIndex = 5656, + kX86InstIdVfnmsub213ps_NameIndex = 5669, + kX86InstIdVfnmsub213sd_NameIndex = 5682, + kX86InstIdVfnmsub213ss_NameIndex = 5695, + kX86InstIdVfnmsub231pd_NameIndex = 5708, + kX86InstIdVfnmsub231ps_NameIndex = 5721, + kX86InstIdVfnmsub231sd_NameIndex = 5734, + kX86InstIdVfnmsub231ss_NameIndex = 5747, + kX86InstIdVfnmsubpd_NameIndex = 5760, + kX86InstIdVfnmsubps_NameIndex = 5770, + kX86InstIdVfnmsubsd_NameIndex = 5780, + kX86InstIdVfnmsubss_NameIndex = 5790, + kX86InstIdVfrczpd_NameIndex = 5800, + kX86InstIdVfrczps_NameIndex = 5808, + kX86InstIdVfrczsd_NameIndex = 5816, + kX86InstIdVfrczss_NameIndex = 5824, + kX86InstIdVgatherdpd_NameIndex = 5832, + kX86InstIdVgatherdps_NameIndex = 5843, + kX86InstIdVgatherqpd_NameIndex = 5854, + kX86InstIdVgatherqps_NameIndex = 5865, + kX86InstIdVhaddpd_NameIndex = 5876, + kX86InstIdVhaddps_NameIndex = 5884, + kX86InstIdVhsubpd_NameIndex = 5892, + kX86InstIdVhsubps_NameIndex = 5900, + kX86InstIdVinsertf128_NameIndex = 5908, + kX86InstIdVinserti128_NameIndex = 5920, + kX86InstIdVinsertps_NameIndex = 5932, + kX86InstIdVlddqu_NameIndex = 5942, + kX86InstIdVldmxcsr_NameIndex = 5949, + kX86InstIdVmaskmovdqu_NameIndex = 5958, + kX86InstIdVmaskmovpd_NameIndex = 5970, + kX86InstIdVmaskmovps_NameIndex = 5981, + kX86InstIdVmaxpd_NameIndex = 5992, + kX86InstIdVmaxps_NameIndex = 5999, + kX86InstIdVmaxsd_NameIndex = 6006, + kX86InstIdVmaxss_NameIndex = 6013, + kX86InstIdVminpd_NameIndex = 6020, + kX86InstIdVminps_NameIndex = 6027, + kX86InstIdVminsd_NameIndex = 6034, + kX86InstIdVminss_NameIndex = 6041, + kX86InstIdVmovapd_NameIndex = 6048, + kX86InstIdVmovaps_NameIndex = 6056, + kX86InstIdVmovd_NameIndex = 6064, + kX86InstIdVmovddup_NameIndex = 6070, + kX86InstIdVmovdqa_NameIndex = 6079, + kX86InstIdVmovdqu_NameIndex = 6087, + kX86InstIdVmovhlps_NameIndex = 6095, + kX86InstIdVmovhpd_NameIndex = 6104, + kX86InstIdVmovhps_NameIndex = 6112, + kX86InstIdVmovlhps_NameIndex = 6120, + kX86InstIdVmovlpd_NameIndex = 6129, + kX86InstIdVmovlps_NameIndex = 6137, + kX86InstIdVmovmskpd_NameIndex = 6145, + kX86InstIdVmovmskps_NameIndex = 6155, + kX86InstIdVmovntdq_NameIndex = 6165, + kX86InstIdVmovntdqa_NameIndex = 6174, + kX86InstIdVmovntpd_NameIndex = 6184, + kX86InstIdVmovntps_NameIndex = 6193, + kX86InstIdVmovq_NameIndex = 6202, + kX86InstIdVmovsd_NameIndex = 6208, + kX86InstIdVmovshdup_NameIndex = 6215, + kX86InstIdVmovsldup_NameIndex = 6225, + kX86InstIdVmovss_NameIndex = 6235, + kX86InstIdVmovupd_NameIndex = 6242, + kX86InstIdVmovups_NameIndex = 6250, + kX86InstIdVmpsadbw_NameIndex = 6258, + kX86InstIdVmulpd_NameIndex = 6267, + kX86InstIdVmulps_NameIndex = 6274, + kX86InstIdVmulsd_NameIndex = 6281, + kX86InstIdVmulss_NameIndex = 6288, + kX86InstIdVorpd_NameIndex = 6295, + kX86InstIdVorps_NameIndex = 6301, + kX86InstIdVpabsb_NameIndex = 6307, + kX86InstIdVpabsd_NameIndex = 6314, + kX86InstIdVpabsw_NameIndex = 6321, + kX86InstIdVpackssdw_NameIndex = 6328, + kX86InstIdVpacksswb_NameIndex = 6338, + kX86InstIdVpackusdw_NameIndex = 6348, + kX86InstIdVpackuswb_NameIndex = 6358, + kX86InstIdVpaddb_NameIndex = 6368, + kX86InstIdVpaddd_NameIndex = 6375, + kX86InstIdVpaddq_NameIndex = 6382, + kX86InstIdVpaddsb_NameIndex = 6389, + kX86InstIdVpaddsw_NameIndex = 6397, + kX86InstIdVpaddusb_NameIndex = 6405, + kX86InstIdVpaddusw_NameIndex = 6414, + kX86InstIdVpaddw_NameIndex = 6423, + kX86InstIdVpalignr_NameIndex = 6430, + kX86InstIdVpand_NameIndex = 6439, + kX86InstIdVpandn_NameIndex = 6445, + kX86InstIdVpavgb_NameIndex = 6452, + kX86InstIdVpavgw_NameIndex = 6459, + kX86InstIdVpblendd_NameIndex = 6466, + kX86InstIdVpblendvb_NameIndex = 6475, + kX86InstIdVpblendw_NameIndex = 6485, + kX86InstIdVpbroadcastb_NameIndex = 6494, + kX86InstIdVpbroadcastd_NameIndex = 6507, + kX86InstIdVpbroadcastq_NameIndex = 6520, + kX86InstIdVpbroadcastw_NameIndex = 6533, + kX86InstIdVpclmulqdq_NameIndex = 6546, + kX86InstIdVpcmov_NameIndex = 6557, + kX86InstIdVpcmpeqb_NameIndex = 6564, + kX86InstIdVpcmpeqd_NameIndex = 6573, + kX86InstIdVpcmpeqq_NameIndex = 6582, + kX86InstIdVpcmpeqw_NameIndex = 6591, + kX86InstIdVpcmpestri_NameIndex = 6600, + kX86InstIdVpcmpestrm_NameIndex = 6611, + kX86InstIdVpcmpgtb_NameIndex = 6622, + kX86InstIdVpcmpgtd_NameIndex = 6631, + kX86InstIdVpcmpgtq_NameIndex = 6640, + kX86InstIdVpcmpgtw_NameIndex = 6649, + kX86InstIdVpcmpistri_NameIndex = 6658, + kX86InstIdVpcmpistrm_NameIndex = 6669, + kX86InstIdVpcomb_NameIndex = 6680, + kX86InstIdVpcomd_NameIndex = 6687, + kX86InstIdVpcomq_NameIndex = 6694, + kX86InstIdVpcomub_NameIndex = 6701, + kX86InstIdVpcomud_NameIndex = 6709, + kX86InstIdVpcomuq_NameIndex = 6717, + kX86InstIdVpcomuw_NameIndex = 6725, + kX86InstIdVpcomw_NameIndex = 6733, + kX86InstIdVperm2f128_NameIndex = 6740, + kX86InstIdVperm2i128_NameIndex = 6751, + kX86InstIdVpermd_NameIndex = 6762, + kX86InstIdVpermil2pd_NameIndex = 6769, + kX86InstIdVpermil2ps_NameIndex = 6780, + kX86InstIdVpermilpd_NameIndex = 6791, + kX86InstIdVpermilps_NameIndex = 6801, + kX86InstIdVpermpd_NameIndex = 6811, + kX86InstIdVpermps_NameIndex = 6819, + kX86InstIdVpermq_NameIndex = 6827, + kX86InstIdVpextrb_NameIndex = 6834, + kX86InstIdVpextrd_NameIndex = 6842, + kX86InstIdVpextrq_NameIndex = 6850, + kX86InstIdVpextrw_NameIndex = 6858, + kX86InstIdVpgatherdd_NameIndex = 6866, + kX86InstIdVpgatherdq_NameIndex = 6877, + kX86InstIdVpgatherqd_NameIndex = 6888, + kX86InstIdVpgatherqq_NameIndex = 6899, + kX86InstIdVphaddbd_NameIndex = 6910, + kX86InstIdVphaddbq_NameIndex = 6919, + kX86InstIdVphaddbw_NameIndex = 6928, + kX86InstIdVphaddd_NameIndex = 6937, + kX86InstIdVphadddq_NameIndex = 6945, + kX86InstIdVphaddsw_NameIndex = 6954, + kX86InstIdVphaddubd_NameIndex = 6963, + kX86InstIdVphaddubq_NameIndex = 6973, + kX86InstIdVphaddubw_NameIndex = 6983, + kX86InstIdVphaddudq_NameIndex = 6993, + kX86InstIdVphadduwd_NameIndex = 7003, + kX86InstIdVphadduwq_NameIndex = 7013, + kX86InstIdVphaddw_NameIndex = 7023, + kX86InstIdVphaddwd_NameIndex = 7031, + kX86InstIdVphaddwq_NameIndex = 7040, + kX86InstIdVphminposuw_NameIndex = 7049, + kX86InstIdVphsubbw_NameIndex = 7061, + kX86InstIdVphsubd_NameIndex = 7070, + kX86InstIdVphsubdq_NameIndex = 7078, + kX86InstIdVphsubsw_NameIndex = 7087, + kX86InstIdVphsubw_NameIndex = 7096, + kX86InstIdVphsubwd_NameIndex = 7104, + kX86InstIdVpinsrb_NameIndex = 7113, + kX86InstIdVpinsrd_NameIndex = 7121, + kX86InstIdVpinsrq_NameIndex = 7129, + kX86InstIdVpinsrw_NameIndex = 7137, + kX86InstIdVpmacsdd_NameIndex = 7145, + kX86InstIdVpmacsdqh_NameIndex = 7154, + kX86InstIdVpmacsdql_NameIndex = 7164, + kX86InstIdVpmacssdd_NameIndex = 7174, + kX86InstIdVpmacssdqh_NameIndex = 7184, + kX86InstIdVpmacssdql_NameIndex = 7195, + kX86InstIdVpmacsswd_NameIndex = 7206, + kX86InstIdVpmacssww_NameIndex = 7216, + kX86InstIdVpmacswd_NameIndex = 7226, + kX86InstIdVpmacsww_NameIndex = 7235, + kX86InstIdVpmadcsswd_NameIndex = 7244, + kX86InstIdVpmadcswd_NameIndex = 7255, + kX86InstIdVpmaddubsw_NameIndex = 7265, + kX86InstIdVpmaddwd_NameIndex = 7276, + kX86InstIdVpmaskmovd_NameIndex = 7285, + kX86InstIdVpmaskmovq_NameIndex = 7296, + kX86InstIdVpmaxsb_NameIndex = 7307, + kX86InstIdVpmaxsd_NameIndex = 7315, + kX86InstIdVpmaxsw_NameIndex = 7323, + kX86InstIdVpmaxub_NameIndex = 7331, + kX86InstIdVpmaxud_NameIndex = 7339, + kX86InstIdVpmaxuw_NameIndex = 7347, + kX86InstIdVpminsb_NameIndex = 7355, + kX86InstIdVpminsd_NameIndex = 7363, + kX86InstIdVpminsw_NameIndex = 7371, + kX86InstIdVpminub_NameIndex = 7379, + kX86InstIdVpminud_NameIndex = 7387, + kX86InstIdVpminuw_NameIndex = 7395, + kX86InstIdVpmovmskb_NameIndex = 7403, + kX86InstIdVpmovsxbd_NameIndex = 7413, + kX86InstIdVpmovsxbq_NameIndex = 7423, + kX86InstIdVpmovsxbw_NameIndex = 7433, + kX86InstIdVpmovsxdq_NameIndex = 7443, + kX86InstIdVpmovsxwd_NameIndex = 7453, + kX86InstIdVpmovsxwq_NameIndex = 7463, + kX86InstIdVpmovzxbd_NameIndex = 7473, + kX86InstIdVpmovzxbq_NameIndex = 7483, + kX86InstIdVpmovzxbw_NameIndex = 7493, + kX86InstIdVpmovzxdq_NameIndex = 7503, + kX86InstIdVpmovzxwd_NameIndex = 7513, + kX86InstIdVpmovzxwq_NameIndex = 7523, + kX86InstIdVpmuldq_NameIndex = 7533, + kX86InstIdVpmulhrsw_NameIndex = 7541, + kX86InstIdVpmulhuw_NameIndex = 7551, + kX86InstIdVpmulhw_NameIndex = 7560, + kX86InstIdVpmulld_NameIndex = 7568, + kX86InstIdVpmullw_NameIndex = 7576, + kX86InstIdVpmuludq_NameIndex = 7584, + kX86InstIdVpor_NameIndex = 7593, + kX86InstIdVpperm_NameIndex = 7598, + kX86InstIdVprotb_NameIndex = 7605, + kX86InstIdVprotd_NameIndex = 7612, + kX86InstIdVprotq_NameIndex = 7619, + kX86InstIdVprotw_NameIndex = 7626, + kX86InstIdVpsadbw_NameIndex = 7633, + kX86InstIdVpshab_NameIndex = 7641, + kX86InstIdVpshad_NameIndex = 7648, + kX86InstIdVpshaq_NameIndex = 7655, + kX86InstIdVpshaw_NameIndex = 7662, + kX86InstIdVpshlb_NameIndex = 7669, + kX86InstIdVpshld_NameIndex = 7676, + kX86InstIdVpshlq_NameIndex = 7683, + kX86InstIdVpshlw_NameIndex = 7690, + kX86InstIdVpshufb_NameIndex = 7697, + kX86InstIdVpshufd_NameIndex = 7705, + kX86InstIdVpshufhw_NameIndex = 7713, + kX86InstIdVpshuflw_NameIndex = 7722, + kX86InstIdVpsignb_NameIndex = 7731, + kX86InstIdVpsignd_NameIndex = 7739, + kX86InstIdVpsignw_NameIndex = 7747, + kX86InstIdVpslld_NameIndex = 7755, + kX86InstIdVpslldq_NameIndex = 7762, + kX86InstIdVpsllq_NameIndex = 7770, + kX86InstIdVpsllvd_NameIndex = 7777, + kX86InstIdVpsllvq_NameIndex = 7785, + kX86InstIdVpsllw_NameIndex = 7793, + kX86InstIdVpsrad_NameIndex = 7800, + kX86InstIdVpsravd_NameIndex = 7807, + kX86InstIdVpsraw_NameIndex = 7815, + kX86InstIdVpsrld_NameIndex = 7822, + kX86InstIdVpsrldq_NameIndex = 7829, + kX86InstIdVpsrlq_NameIndex = 7837, + kX86InstIdVpsrlvd_NameIndex = 7844, + kX86InstIdVpsrlvq_NameIndex = 7852, + kX86InstIdVpsrlw_NameIndex = 7860, + kX86InstIdVpsubb_NameIndex = 7867, + kX86InstIdVpsubd_NameIndex = 7874, + kX86InstIdVpsubq_NameIndex = 7881, + kX86InstIdVpsubsb_NameIndex = 7888, + kX86InstIdVpsubsw_NameIndex = 7896, + kX86InstIdVpsubusb_NameIndex = 7904, + kX86InstIdVpsubusw_NameIndex = 7913, + kX86InstIdVpsubw_NameIndex = 7922, + kX86InstIdVptest_NameIndex = 7929, + kX86InstIdVpunpckhbw_NameIndex = 7936, + kX86InstIdVpunpckhdq_NameIndex = 7947, + kX86InstIdVpunpckhqdq_NameIndex = 7958, + kX86InstIdVpunpckhwd_NameIndex = 7970, + kX86InstIdVpunpcklbw_NameIndex = 7981, + kX86InstIdVpunpckldq_NameIndex = 7992, + kX86InstIdVpunpcklqdq_NameIndex = 8003, + kX86InstIdVpunpcklwd_NameIndex = 8015, + kX86InstIdVpxor_NameIndex = 8026, + kX86InstIdVrcpps_NameIndex = 8032, + kX86InstIdVrcpss_NameIndex = 8039, + kX86InstIdVroundpd_NameIndex = 8046, + kX86InstIdVroundps_NameIndex = 8055, + kX86InstIdVroundsd_NameIndex = 8064, + kX86InstIdVroundss_NameIndex = 8073, + kX86InstIdVrsqrtps_NameIndex = 8082, + kX86InstIdVrsqrtss_NameIndex = 8091, + kX86InstIdVshufpd_NameIndex = 8100, + kX86InstIdVshufps_NameIndex = 8108, + kX86InstIdVsqrtpd_NameIndex = 8116, + kX86InstIdVsqrtps_NameIndex = 8124, + kX86InstIdVsqrtsd_NameIndex = 8132, + kX86InstIdVsqrtss_NameIndex = 8140, + kX86InstIdVstmxcsr_NameIndex = 8148, + kX86InstIdVsubpd_NameIndex = 8157, + kX86InstIdVsubps_NameIndex = 8164, + kX86InstIdVsubsd_NameIndex = 8171, + kX86InstIdVsubss_NameIndex = 8178, + kX86InstIdVtestpd_NameIndex = 8185, + kX86InstIdVtestps_NameIndex = 8193, + kX86InstIdVucomisd_NameIndex = 8201, + kX86InstIdVucomiss_NameIndex = 8210, + kX86InstIdVunpckhpd_NameIndex = 8219, + kX86InstIdVunpckhps_NameIndex = 8229, + kX86InstIdVunpcklpd_NameIndex = 8239, + kX86InstIdVunpcklps_NameIndex = 8249, + kX86InstIdVxorpd_NameIndex = 8259, + kX86InstIdVxorps_NameIndex = 8266, + kX86InstIdVzeroall_NameIndex = 8273, + kX86InstIdVzeroupper_NameIndex = 8282, + kX86InstIdWrfsbase_NameIndex = 8293, + kX86InstIdWrgsbase_NameIndex = 8302, + kX86InstIdXadd_NameIndex = 8311, + kX86InstIdXchg_NameIndex = 8316, + kX86InstIdXgetbv_NameIndex = 8321, + kX86InstIdXor_NameIndex = 8328, + kX86InstIdXorpd_NameIndex = 8332, + kX86InstIdXorps_NameIndex = 8338, + kX86InstIdXrstor_NameIndex = 8344, + kX86InstIdXrstor64_NameIndex = 8351, + kX86InstIdXsave_NameIndex = 8360, + kX86InstIdXsave64_NameIndex = 8366, + kX86InstIdXsaveopt_NameIndex = 8374, + kX86InstIdXsaveopt64_NameIndex = 8383, + kX86InstIdXsetbv_NameIndex = 8394 }; #endif // !ASMJIT_DISABLE_NAMES // Automatically generated, do not edit. const X86InstExtendedInfo _x86InstExtendedInfo[] = { - { G(None) , 0 , 0x00, 0x00, F(None) , { U , U , U , U , U }, U }, - { G(X86Arith) , 0 , 0x20, 0x3F, F(Lock) , { O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , U }, U }, - { G(X86Arith) , 0 , 0x00, 0x3F, F(Lock) , { O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , U }, U }, - { G(ExtRm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(ExtRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, U }, - { G(AvxRvm) , 0 , 0x00, 0x3F, F(None) , { O(Gqd) , O(Gqd) , O(GqdMem) , U , U }, U }, - { G(AvxRmv) , 0 , 0x00, 0x3F, F(None) , { O(Gqd) , O(GqdMem) , O(Gqd) , U , U }, U }, - { G(ExtRm) , 0 , 0x00, 0x00, F(None)|F(Special) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(AvxVm) , 0 , 0x00, 0x3F, F(None) , { O(Gqd) , O(GqdMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x00, 0x3F, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86BSwap) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , U , U , U , U }, U }, - { G(X86BTest) , 0 , 0x00, 0x3B, F(Test) , { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, O_000F00(BA,4) }, - { G(X86BTest) , 0 , 0x00, 0x3B, F(Lock) , { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, O_000F00(BA,7) }, - { G(X86BTest) , 0 , 0x00, 0x3B, F(Lock) , { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, O_000F00(BA,6) }, - { G(X86BTest) , 0 , 0x00, 0x3B, F(Lock) , { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, O_000F00(BA,5) }, - { G(X86Call) , 0 , 0x00, 0x00, F(Flow) , { O(GqdMem)|O(Imm)|O(Label), U , U , U , U }, O_000000(E8,U) }, - { G(X86Op) , 0 , 0x00, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x00, F(None)|F(Special)|F(W), { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x20, F(None) , { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x40, F(None) , { U , U , U , U , U }, U }, - { G(X86M) , 0 , 0x00, 0x00, F(None) , { O(Mem) , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x20, 0x20, F(None) , { U , U , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x24, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x20, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x04, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x07, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x03, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x01, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x10, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86RegRm) , 0 , 0x02, 0x00, F(None) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(X86Arith) , 0 , 0x00, 0x3F, F(Test) , { O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , U }, U }, - { G(X86Op) , 0 , 0x40, 0x3F, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x40, 0x3F, F(None)|F(Special)|F(W), { U , U , U , U , U }, U }, - { G(X86Op_66H) , 0 , 0x40, 0x3F, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86RmReg) , 0 , 0x00, 0x3F, F(Lock)|F(Special) , { U , U , U , U , U }, U }, - { G(X86M) , 0 , 0x00, 0x04, F(None)|F(Special)|F(W), { O(Mem) , U , U , U , U }, U }, - { G(X86M) , 0 , 0x00, 0x04, F(None)|F(Special) , { O(Mem) , U , U , U , U }, U }, - { G(ExtRm) , 0 , 0x00, 0x3F, F(Test) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(ExtCrc) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(GqdwbMem) , U , U , U }, U }, - { G(ExtRm) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(ExtRm) , 8 , 0x00, 0x00, F(Move) , { O(Mm) , O(XmmMem) , U , U , U }, U }, - { G(ExtRm) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(MmMem) , U , U , U }, U }, - { G(ExtRm) , 8 , 0x00, 0x00, F(Move) , { O(Xmm) , O(MmMem) , U , U , U }, U }, - { G(ExtRm_Q) , 8 , 0x00, 0x00, F(Move) , { O(Gqd) , O(XmmMem) , U , U , U }, U }, - { G(ExtRm) , 4 , 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(ExtRm_Q) , 8 , 0x00, 0x00, F(Move) , { O(Xmm) , O(GqdMem) , U , U , U }, U }, - { G(ExtRm_Q) , 4 , 0x00, 0x00, F(Move) , { O(Xmm) , O(GqdMem) , U , U , U }, U }, - { G(ExtRm) , 8 , 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(X86Op) , 0 , 0x28, 0x3F, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86IncDec) , 0 , 0x00, 0x1F, F(Lock) , { O(GqdwbMem) , U , U , U , U }, O_000000(48,U) }, - { G(X86Rm_B) , 0 , 0x00, 0x3F, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x00, F(None) , { U , U , U , U , U }, U }, - { G(X86Enter) , 0 , 0x00, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(ExtExtract) , 8 , 0x00, 0x00, F(Move) , { O(GqdMem) , O(Xmm) , U , U , U }, O_660F3A(17,U) }, - { G(FpuOp) , 0 , 0x00, 0x00, F(Fp) , { U , U , U , U , U }, U }, - { G(FpuArith) , 0 , 0x00, 0x00, F(Fp)|F(Mem4_8) , { O(FpMem) , O(Fp) , U , U , U }, U }, - { G(FpuRDef) , 0 , 0x00, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(X86M) , 0 , 0x00, 0x00, F(Fp) , { O(Mem) , U , U , U , U }, U }, - { G(FpuR) , 0 , 0x20, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(FpuR) , 0 , 0x24, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(FpuR) , 0 , 0x04, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(FpuR) , 0 , 0x10, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(FpuCom) , 0 , 0x00, 0x00, F(Fp) , { O(Fp)|O(Mem) , O(Fp) , U , U , U }, U }, - { G(FpuR) , 0 , 0x00, 0x3F, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x00, F(Fp) , { U , U , U , U , U }, U }, - { G(FpuR) , 0 , 0x00, 0x00, F(Fp) , { O(Fp) , U , U , U , U }, U }, - { G(FpuM) , 0 , 0x00, 0x00, F(Fp)|F(Mem2_4) , { O(Mem) , U , U , U , U }, U }, - { G(FpuM) , 0 , 0x00, 0x00, F(Fp)|F(Mem2_4_8) , { O(Mem) , U , U , U , U }, O_000000(DF,5) }, - { G(FpuM) , 0 , 0x00, 0x00, F(Fp)|F(Mem2_4_8) , { O(Mem) , U , U , U , U }, O_000000(DF,7) }, - { G(FpuM) , 0 , 0x00, 0x00, F(Fp)|F(Mem2_4_8) , { O(Mem) , U , U , U , U }, O_000000(DD,1) }, - { G(FpuFldFst) , 0 , 0x00, 0x00, F(Fp)|F(Mem4_8_10) , { O(Mem) , U , U , U , U }, O_000000(DB,5) }, - { G(FpuStsw) , 0 , 0x00, 0x00, F(Fp) , { O(Mem) , U , U , U , U }, O_00_X(DFE0,U) }, - { G(FpuFldFst) , 0 , 0x00, 0x00, F(Fp)|F(Mem4_8) , { O(Mem) , U , U , U , U }, U }, - { G(FpuFldFst) , 0 , 0x00, 0x00, F(Fp)|F(Mem4_8_10) , { O(Mem) , U , U , U , U }, O_000000(DB,7) }, - { G(FpuStsw) , 0 , 0x00, 0x00, F(Fp) , { O(Mem) , U , U , U , U }, O_9B_X(DFE0,U) }, - { G(X86Rm_B) , 0 , 0x00, 0x3F, F(None)|F(Special) , { 0 , 0 , U , U , U }, U }, - { G(X86Imul) , 0 , 0x00, 0x3F, F(None)|F(Special) , { 0 , 0 , U , U , U }, U }, - { G(X86IncDec) , 0 , 0x00, 0x1F, F(Lock) , { O(GqdwbMem) , U , U , U , U }, O_000000(40,U) }, - { G(X86Int) , 0 , 0x00, 0x80, F(None) , { U , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x24, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x20, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x04, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x07, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x03, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x01, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x10, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jcc) , 0 , 0x02, 0x00, F(Flow) , { O(Label) , U , U , U , U }, U }, - { G(X86Jecxz) , 0 , 0x00, 0x00, F(Flow)|F(Special) , { O(Gqdw) , O(Label) , U , U , U }, U }, - { G(X86Jmp) , 0 , 0x00, 0x00, F(Flow) , { O(Imm)|O(Label) , U , U , U , U }, O_000000(E9,U) }, - { G(X86Op) , 0 , 0x3E, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(ExtRm) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(Mem) , U , U , U }, U }, - { G(X86Lea) , 0 , 0x00, 0x00, F(Move) , { O(Gqd) , O(Mem) , U , U , U }, U }, - { G(ExtFence) , 0 , 0x00, 0x00, F(None) , { U , U , U , U , U }, U }, - { G(X86Op) , 1 , 0x40, 0x00, F(Move)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 4 , 0x40, 0x00, F(Move)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 8 , 0x40, 0x00, F(Move)|F(Special)|F(W), { U , U , U , U , U }, U }, - { G(X86Op_66H) , 2 , 0x40, 0x00, F(Move)|F(Special) , { U , U , U , U , U }, U }, - { G(ExtRm) , 0 , 0x00, 0x00, F(None)|F(Special) , { O(Xmm) , O(Xmm) , U , U , U }, U }, - { G(ExtRm) , 0 , 0x00, 0x00, F(None)|F(Special) , { O(Mm) , O(Mm) , U , U , U }, U }, - { G(X86Mov) , 0 , 0x00, 0x00, F(Move) , { O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , U }, U }, - { G(X86MovPtr) , 0 , 0x00, 0x00, F(Move)|F(Special) , { O(Gqdwb) , O(Imm) , U , U , U }, O_000000(A2,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(29,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_000F00(29,U) }, - { G(ExtMovBe) , 0 , 0x00, 0x00, F(Move) , { O(GqdwMem) , O(GqdwMem) , U , U , U }, O_000F38(F1,U) }, - { G(ExtMovD) , 16, 0x00, 0x00, F(Move) , { O(Gd)|O(MmXmmMem) , O(Gd)|O(MmXmmMem) , U , U , U }, O_000F00(7E,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(Mm) , O(Xmm) , U , U , U }, U }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(7F,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_F30F00(7F,U) }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(Xmm) , O(Xmm) , U , U , U }, U }, - { G(ExtMov) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(17,U) }, - { G(ExtMov) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_000F00(17,U) }, - { G(ExtMov) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , U , U , U }, U }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(13,U) }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_000F00(13,U) }, - { G(ExtMovNoRexW) , 8 , 0x00, 0x00, F(Move) , { O(Gqd) , O(Xmm) , U , U , U }, U }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(Mem) , O(Xmm) , U , U , U }, O_660F00(E7,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(Mem) , U , U , U }, U }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(Mem) , O(Gqd) , U , U , U }, O_000F00(C3,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(Mem) , O(Xmm) , U , U , U }, O_660F00(2B,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(Mem) , O(Xmm) , U , U , U }, O_000F00(2B,U) }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) , { O(Mem) , O(Mm) , U , U , U }, O_000F00(E7,U) }, - { G(ExtMovQ) , 16, 0x00, 0x00, F(Move) , { O(Gq)|O(MmXmmMem) , O(Gq)|O(MmXmmMem) , U , U , U }, U }, - { G(ExtRm) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(Mm) , U , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x00, F(Move)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op_66H) , 0 , 0x00, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(ExtMov) , 8 , 0x00, 0x00, F(Move) |F(Z), { O(XmmMem) , O(XmmMem) , U , U , U }, O_F20F00(11,U) }, - { G(ExtMov) , 4 , 0x00, 0x00, F(Move) |F(Z), { O(XmmMem) , O(XmmMem) , U , U , U }, O_F30F00(11,U) }, - { G(X86MovSxZx) , 0 , 0x00, 0x00, F(Move) , { O(Gqdw) , O(GwbMem) , U , U , U }, U }, - { G(X86MovSxd) , 0 , 0x00, 0x00, F(Move) , { O(Gq) , O(GdMem) , U , U , U }, U }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(11,U) }, - { G(ExtMov) , 16, 0x00, 0x00, F(Move) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_000F00(11,U) }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(Gqd) , O(GqdMem) , U , U }, U }, - { G(X86Rm_B) , 0 , 0x00, 0x3F, F(Lock) , { O(GqdwbMem) , U , U , U , U }, U }, - { G(X86Rm_B) , 0 , 0x00, 0x00, F(Lock) , { O(GqdwbMem) , U , U , U , U }, U }, - { G(ExtRm_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem) , U , U , U }, U }, - { G(ExtRmi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem) , O(Imm) , U , U }, U }, - { G(ExtExtract) , 8 , 0x00, 0x00, F(Move) , { O(Gd)|O(Gb)|O(Mem) , O(Xmm) , U , U , U }, O_000F3A(14,U) }, - { G(ExtExtract) , 8 , 0x00, 0x00, F(Move) , { O(GdMem) , O(Xmm) , U , U , U }, O_000F3A(16,U) }, - { G(ExtExtract) , 8 , 0x00, 0x00, F(Move) |F(W), { O(GqdMem) , O(Xmm) , U , U , U }, O_000F3A(16,U) }, - { G(ExtExtract) , 8 , 0x00, 0x00, F(Move) , { O(GdMem) , O(MmXmm) , U , U , U }, O_000F3A(15,U) }, - { G(3dNow) , 0 , 0x00, 0x00, F(None) , { O(Mm) , O(MmMem) , U , U , U }, U }, - { G(ExtRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(GdMem) , O(Imm) , U , U }, U }, - { G(ExtRmi) , 0 , 0x00, 0x00, F(None) |F(W), { O(Xmm) , O(GqMem) , O(Imm) , U , U }, U }, - { G(ExtRmi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(GdMem) , O(Imm) , U , U }, U }, - { G(ExtRm_PQ) , 8 , 0x00, 0x00, F(Move) , { O(Gqd) , O(MmXmm) , U , U , U }, U }, - { G(X86Pop) , 0 , 0x00, 0x00, F(None)|F(Special) , { 0 , U , U , U , U }, O_000000(58,U) }, - { G(X86Op) , 0 , 0x00, 0xFF, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(ExtPrefetch) , 0 , 0x00, 0x00, F(None) , { O(Mem) , O(Imm) , U , U , U }, U }, - { G(ExtRmi) , 16, 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, U }, - { G(ExtRmi_P) , 8 , 0x00, 0x00, F(Move) , { O(Mm) , O(MmMem) , O(Imm) , U , U }, U }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(72,6) }, - { G(ExtRmRi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Imm) , U , U , U }, O_660F00(73,7) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(73,6) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(71,6) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(72,4) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(71,4) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(72,2) }, - { G(ExtRmRi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Imm) , U , U , U }, O_660F00(73,3) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(73,2) }, - { G(ExtRmRi_P) , 0 , 0x00, 0x00, F(None) , { O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , U }, O_000F00(71,2) }, - { G(X86Push) , 0 , 0x00, 0x00, F(None)|F(Special) , { 0 , U , U , U , U }, O_000000(50,U) }, - { G(X86Op) , 0 , 0xFF, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Rot) , 0 , 0x20, 0x21, F(None)|F(Special) , { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, U }, - { G(X86Rm) , 8 , 0x00, 0x00, F(Move) , { O(Gqd) , U , U , U , U }, U }, - { G(X86Rm) , 8 , 0x00, 0x3F, F(Move) , { O(Gqdw) , U , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x00, F(None)|F(Special) , { O(Mem) , U , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x00, F(None)|F(Special)|F(W), { O(Mem) , U , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x00, F(None)|F(Special) , { O(Mem) , O(Mem) , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x00, F(None)|F(Special)|F(W), { O(Mem) , O(Mem) , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x3F, F(None)|F(Special) , { O(Mem) , O(Mem) , U , U , U }, U }, - { G(X86Rep) , 0 , 0x40, 0x3F, F(None)|F(Special)|F(W), { O(Mem) , O(Mem) , U , U , U }, U }, - { G(X86Ret) , 0 , 0x00, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Rot) , 0 , 0x00, 0x21, F(None)|F(Special) , { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, U }, - { G(AvxRmi) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(GqdMem) , O(Imm) , U , U }, U }, - { G(ExtRmi) , 8 , 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, U }, - { G(ExtRmi) , 4 , 0x00, 0x00, F(Move) , { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, U }, - { G(X86Op) , 0 , 0x00, 0x3E, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Rot) , 0 , 0x00, 0x3F, F(None)|F(Special) , { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, U }, - { G(AvxRmv) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(GqdMem) , O(Gqd) , U , U }, U }, - { G(X86Set) , 1 , 0x24, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x20, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x04, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x07, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x03, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x01, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x10, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Set) , 1 , 0x02, 0x00, F(Move) , { O(GbMem) , U , U , U , U }, U }, - { G(X86Shlrd) , 0 , 0x00, 0x3F, F(None)|F(Special) , { O(GqdwbMem) , O(Gb) , U , U , U }, U }, - { G(X86Shlrd) , 0 , 0x00, 0x3F, F(None)|F(Special) , { O(GqdwbMem) , O(Gqdwb) , U , U , U }, U }, - { G(X86Op) , 0 , 0x40, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Op) , 0 , 0x40, 0x00, F(None)|F(Special)|F(W), { U , U , U , U , U }, U }, - { G(X86Op_66H) , 0 , 0x40, 0x00, F(None)|F(Special) , { U , U , U , U , U }, U }, - { G(X86Test) , 0 , 0x00, 0x3F, F(Test) , { O(GqdwbMem) , O(Gqdwb)|O(Imm) , U , U , U }, O_000000(F6,U) }, - { G(X86RegRm) , 0 , 0x00, 0x3F, F(Move) , { O(Gqdw) , O(GqdwMem) , U , U , U }, U }, - { G(AvxRvm_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , U }, U }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(AvxRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, U }, - { G(AvxRvmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U }, U }, - { G(AvxRvmr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmm) , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Ymm) , O(Mem) , U , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Ymm) , O(XmmMem) , U , U , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U }, U }, - { G(AvxRm_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmMem) , U , U , U }, U }, - { G(AvxRm_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(AvxMri_P) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(XmmYmm) , O(Imm) , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(XmmMem) , U , U , U }, U }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(GqdMem) , U , U }, U }, - { G(AvxRm_P) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(AvxMri) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Ymm) , O(Imm) , U , U }, U }, - { G(AvxMri) , 0 , 0x00, 0x00, F(None) , { O(GqdMem) , O(Xmm) , O(Imm) , U , U }, U }, - { G(AvxRvm_P) , 0 , 0x00, 0x00, F(None) |F(W), { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , U }, U }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) |F(W), { O(Xmm) , O(Xmm) , O(XmmMem) , U , U }, U }, - { G(Fma4_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , U }, U }, - { G(Fma4) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U }, U }, - { G(XopRm_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(XopRm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(AvxGather) , 0 , 0x00, 0x00, F(None) |F(W), { O(XmmYmm) , O(Mem) , O(XmmYmm) , U , U }, U }, - { G(AvxGather) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(Mem) , O(XmmYmm) , U , U }, U }, - { G(AvxGatherEx) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Mem) , O(Xmm) , U , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , U }, U }, - { G(AvxRm_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(Mem) , U , U , U }, U }, - { G(AvxM) , 0 , 0x00, 0x00, F(None) , { O(Mem) , U , U , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , U , U , U }, U }, - { G(AvxRvmMvr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , U }, O_660F38(2F,U) }, - { G(AvxRvmMvr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , U }, O_660F38(2E,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_660F00(29,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_000F00(29,U) }, - { G(AvxRmMr) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(7E,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_660F00(7F,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_F30F00(7F,U) }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(Xmm) , U , U }, U }, - { G(AvxRvmMr) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, O_660F00(17,U) }, - { G(AvxRvmMr) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, O_000F00(17,U) }, - { G(AvxRvmMr) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, O_660F00(13,U) }, - { G(AvxRvmMr) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, O_000F00(13,U) }, - { G(AvxRm_P) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , O(XmmYmm) , U , U , U }, U }, - { G(AvxMr) , 0 , 0x00, 0x00, F(None) , { O(Mem) , O(XmmYmm) , U , U , U }, U }, - { G(AvxMr_P) , 0 , 0x00, 0x00, F(None) , { O(Mem) , O(XmmYmm) , U , U , U }, U }, - { G(AvxRmMr) , 0 , 0x00, 0x00, F(None) |F(W), { O(XmmMem) , O(XmmMem) , U , U , U }, O_660F00(7E,U) }, - { G(AvxMovSsSd) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(XmmMem) , O(Xmm) , U , U }, O_F20F00(11,U) }, - { G(AvxMovSsSd) , 0 , 0x00, 0x00, F(None) , { O(XmmMem) , O(Xmm) , O(Xmm) , U , U }, O_F30F00(11,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_660F00(11,U) }, - { G(AvxRmMr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmmMem) , U , U , U }, O_000F00(11,U) }, - { G(AvxRvmr) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmm) , U }, U }, - { G(XopRvrmRvmr_P), 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , U }, U }, - { G(XopRvmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , U }, U }, - { G(AvxRvm) , 0 , 0x00, 0x00, F(None) , { O(Ymm) , O(Ymm) , O(YmmMem) , U , U }, U }, - { G(AvxRvrmRvmr_P), 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , U }, U }, - { G(AvxRvmRmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F3A(05,U) }, - { G(AvxRvmRmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F3A(04,U) }, - { G(AvxRmi) , 0 , 0x00, 0x00, F(None) |F(W), { O(Ymm) , O(YmmMem) , O(Imm) , U , U }, U }, - { G(AvxMri) , 0 , 0x00, 0x00, F(None) , { O(GqdwbMem) , O(Xmm) , O(Imm) , U , U }, U }, - { G(AvxMri) , 0 , 0x00, 0x00, F(None) |F(W), { O(GqMem) , O(Xmm) , O(Imm) , U , U }, U }, - { G(AvxMri) , 0 , 0x00, 0x00, F(None) , { O(GqdwMem) , O(Xmm) , O(Imm) , U , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(GqdwbMem) , O(Imm) , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(GqdMem) , O(Imm) , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) |F(W), { O(Xmm) , O(Xmm) , O(GqMem) , O(Imm) , U }, U }, - { G(AvxRvmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(GqdwMem) , O(Imm) , U }, U }, - { G(XopRvmr) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U }, U }, - { G(AvxRvmMvr_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , U }, O_660F38(8E,U) }, - { G(AvxRvmMvr_P) , 0 , 0x00, 0x00, F(None) |F(W), { O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , U }, O_660F38(8E,U) }, - { G(XopRvrmRvmr) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U }, U }, - { G(XopRvmRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, O_00_M08(C0,U) }, - { G(XopRvmRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, O_00_M08(C2,U) }, - { G(XopRvmRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, O_00_M08(C3,U) }, - { G(XopRvmRmi) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, O_00_M08(C1,U) }, - { G(XopRvmRmv) , 0 , 0x00, 0x00, F(None) , { O(Xmm) , O(XmmMem) , O(XmmMem) , U , U }, U }, - { G(AvxRmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , U }, U }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(72,6) }, - { G(AvxVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , U }, U }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(73,6) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(71,6) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(72,4) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(71,4) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(72,2) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(73,2) }, - { G(AvxRvmVmi_P) , 0 , 0x00, 0x00, F(None) , { O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , U }, O_660F00(71,2) }, - { G(AvxRm_P) , 0 , 0x00, 0x3F, F(None) , { O(XmmYmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(AvxRm_P) , 0 , 0x00, 0x3F, F(Test) , { O(XmmYmm) , O(XmmYmmMem) , U , U , U }, U }, - { G(AvxRm) , 0 , 0x00, 0x3F, F(None) , { O(Xmm) , O(XmmMem) , U , U , U }, U }, - { G(AvxOp) , 0 , 0x00, 0x00, F(None) , { U , U , U , U , U }, U }, - { G(X86Rm) , 0 , 0x00, 0x00, F(None) , { O(Gqd) , U , U , U , U }, U }, - { G(X86Xadd) , 0 , 0x00, 0x3F, F(Xchg)|F(Lock) , { O(GqdwbMem) , O(Gqdwb) , U , U , U }, U }, - { G(X86Xchg) , 0 , 0x00, 0x00, F(Xchg)|F(Lock) , { O(GqdwbMem) , O(Gqdwb) , U , U , U }, U } + { Enc(None) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86Arith) , 0 , 0 , 0x20, 0x3F, 0, { O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U }, F(Lock) , U }, + { Enc(X86Arith) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U }, F(Lock) , U }, + { Enc(ExtRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(None) , U }, + { Enc(ExtRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x3F, 0, { O(Gqd) , O(Gqd) , O(GqdMem) , U , U }, F(None) , U }, + { Enc(AvxRmv) , 0 , 0 , 0x00, 0x3F, 0, { O(Gqd) , O(GqdMem) , O(Gqd) , U , U }, F(None) , U }, + { Enc(ExtRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(None)|F(Special) , U }, + { Enc(AvxVm) , 0 , 0 , 0x00, 0x3F, 0, { O(Gqd) , O(GqdMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x00, 0x3F, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86BSwap) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , U , U , U , U }, F(None) , U }, + { Enc(X86BTest) , 0 , 0 , 0x00, 0x3B, 0, { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, F(Test) , O_000F00(BA,4,_,_,_) }, + { Enc(X86BTest) , 0 , 0 , 0x00, 0x3B, 0, { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, F(Lock) , O_000F00(BA,7,_,_,_) }, + { Enc(X86BTest) , 0 , 0 , 0x00, 0x3B, 0, { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, F(Lock) , O_000F00(BA,6,_,_,_) }, + { Enc(X86BTest) , 0 , 0 , 0x00, 0x3B, 0, { O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U }, F(Lock) , O_000F00(BA,5,_,_,_) }, + { Enc(X86Call) , 0 , 0 , 0x00, 0x00, 0, { O(GqdMem)|O(LbImm), U , U , U , U }, F(Flow) , O_000000(E8,U,_,_,_) }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x20, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x40, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86M) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(None) , U }, + { Enc(X86Op) , 0 , 0 , 0x20, 0x20, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x24, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x20, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x04, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x07, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x03, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x01, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x10, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86RegRm) , 0 , 0 , 0x02, 0x00, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(None) , U }, + { Enc(X86Arith) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U }, F(Test) , U }, + { Enc(X86Op) , 0 , 0 , 0x40, 0x3F, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Op_66H) , 0 , 0 , 0x40, 0x3F, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86RmReg) , 0 , 0 , 0x00, 0x3F, 0, { U , U , U , U , U }, F(Lock)|F(Special) , U }, + { Enc(X86M) , 0 , 0 , 0x00, 0x04, 0, { O(Mem) , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtRm) , 0 , 0 , 0x00, 0x3F, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Test) , U }, + { Enc(ExtCrc) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(GqdwbMem) , U , U , U }, F(None) , U }, + { Enc(ExtRm) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 8 , 0x00, 0x00, 0, { O(Mm) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(MmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(MmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm_Q) , 0 , 8 , 0x00, 0x00, 0, { O(Gqd) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 4 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm_Q) , 0 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(GqdMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm_Q) , 0 , 4 , 0x00, 0x00, 0, { O(Xmm) , O(GqdMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(X86Op) , 0 , 0 , 0x28, 0x3F, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86IncDec) , 0 , 0 , 0x00, 0x1F, 0, { O(GqdwbMem) , U , U , U , U }, F(Lock) , O_000000(48,U,_,_,_) }, + { Enc(X86Rm_B) , 0 , 0 , 0x00, 0x3F, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86Enter) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtExtract) , 0 , 8 , 0x00, 0x00, 0, { O(GqdMem) , O(Xmm) , U , U , U }, F(Move) , O_660F3A(17,U,_,_,_) }, + { Enc(ExtExtrq) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm)|O(Imm) , O(None)|O(Imm) , U , U }, F(None) , O_660F00(78,0,_,_,_) }, + { Enc(FpuOp) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(Fp) , U }, + { Enc(FpuArith) , 0 , 0 , 0x00, 0x00, 0, { O(FpMem) , O(Fp) , U , U , U }, F(Fp)|F(Mem4_8) , U }, + { Enc(FpuRDef) , 0 , 0 , 0x00, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(X86M) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x20, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x24, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x04, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x10, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuCom) , 0 , 0 , 0x00, 0x00, 0, { O(Fp)|O(Mem) , O(Fp) , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x00, 0x3F, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(Fp) , U }, + { Enc(FpuR) , 0 , 0 , 0x00, 0x00, 0, { O(Fp) , U , U , U , U }, F(Fp) , U }, + { Enc(FpuM) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem2_4) , U }, + { Enc(FpuM) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem2_4_8) , O_000000(DF,5,_,_,_) }, + { Enc(FpuM) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem2_4_8) , O_000000(DF,7,_,_,_) }, + { Enc(FpuM) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem2_4_8) , O_000000(DD,1,_,_,_) }, + { Enc(FpuFldFst) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem4_8_10) , O_000000(DB,5,_,_,_) }, + { Enc(FpuStsw) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp) , O_00_X(DFE0,U) }, + { Enc(FpuFldFst) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem4_8) , U }, + { Enc(FpuFldFst) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp)|F(Mem4_8_10) , O_000000(DB,7,_,_,_) }, + { Enc(FpuStsw) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Fp) , O_9B_X(DFE0,U) }, + { Enc(X86Rm_B) , 0 , 0 , 0x00, 0x3F, 0, { 0 , 0 , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Imul) , 0 , 0 , 0x00, 0x3F, 0, { 0 , 0 , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86IncDec) , 0 , 0 , 0x00, 0x1F, 0, { O(GqdwbMem) , U , U , U , U }, F(Lock) , O_000000(40,U,_,_,_) }, + { Enc(ExtInsertq) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(None)|O(Imm) , O(None)|O(Imm) , U }, F(None) , O_F20F00(78,U,_,_,_) }, + { Enc(X86Int) , 0 , 0 , 0x00, 0x80, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x24, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x20, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x04, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x07, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x03, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x01, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x10, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jcc) , 0 , 0 , 0x02, 0x00, 0, { O(Label) , U , U , U , U }, F(Flow) , U }, + { Enc(X86Jecxz) , 0 , 0 , 0x00, 0x00, 0, { O(Gqdw) , O(Label) , U , U , U }, F(Flow)|F(Special) , U }, + { Enc(X86Jmp) , 0 , 0 , 0x00, 0x00, 0, { O(Label)|O(Imm) , U , U , U , U }, F(Flow) , O_000000(E9,U,_,_,_) }, + { Enc(X86Op) , 0 , 0 , 0x3E, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtRm) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(Mem) , U , U , U }, F(Move) , U }, + { Enc(X86Lea) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(Mem) , U , U , U }, F(Move) , U }, + { Enc(ExtFence) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None) , U }, + { Enc(X86Op) , 0 , 1 , 0x40, 0x00, 0, { U , U , U , U , U }, F(Move)|F(Special) , U }, + { Enc(X86Op) , 0 , 4 , 0x40, 0x00, 0, { U , U , U , U , U }, F(Move)|F(Special) , U }, + { Enc(X86Op) , 0 , 8 , 0x40, 0x00, 0, { U , U , U , U , U }, F(Move)|F(Special) , U }, + { Enc(X86Op_66H) , 0 , 2 , 0x40, 0x00, 0, { U , U , U , U , U }, F(Move)|F(Special) , U }, + { Enc(ExtRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtRm) , 0 , 0 , 0x00, 0x00, 0, { O(Mm) , O(Mm) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Mov) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U }, F(Move) , U }, + { Enc(X86MovPtr) , 0 , 0 , 0x00, 0x00, 0, { O(Gqdwb) , O(Imm) , U , U , U }, F(Move)|F(Special) , O_000000(A2,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_660F00(29,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_000F00(29,U,_,_,_) }, + { Enc(ExtMovBe) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwMem) , O(GqdwMem) , U , U , U }, F(Move) , O_000F38(F1,U,_,_,_) }, + { Enc(ExtMovD) , 0 , 16, 0x00, 0x00, 0, { O(Gd)|O(MmXmmMem) , O(Gd)|O(MmXmmMem) , U , U , U }, F(Move) , O_000F00(7E,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(Mm) , O(Xmm) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_660F00(7F,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_F30F00(7F,U,_,_,_) }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 8 , 8 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(None) , O_660F00(17,U,_,_,_) }, + { Enc(ExtMov) , 8 , 8 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(None) , O_000F00(17,U,_,_,_) }, + { Enc(ExtMov) , 8 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , U , U , U }, F(None) , U }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_660F00(13,U,_,_,_) }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_000F00(13,U,_,_,_) }, + { Enc(ExtMovNoRexW) , 0 , 8 , 0x00, 0x00, 0, { O(Gqd) , O(Xmm) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(Mem) , O(Xmm) , U , U , U }, F(Move) , O_660F00(E7,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(Mem) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(Mem) , O(Gqd) , U , U , U }, F(Move) , O_000F00(C3,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(Mem) , O(Xmm) , U , U , U }, F(Move) , O_660F00(2B,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(Mem) , O(Xmm) , U , U , U }, F(Move) , O_000F00(2B,U,_,_,_) }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(Mem) , O(Mm) , U , U , U }, F(Move) , O_000F00(E7,U,_,_,_) }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(Mem) , O(Xmm) , U , U , U }, F(Move) , O_F20F00(2B,U,_,_,_) }, + { Enc(ExtMov) , 0 , 4 , 0x00, 0x00, 0, { O(Mem) , O(Xmm) , U , U , U }, F(Move) , O_F30F00(2B,U,_,_,_) }, + { Enc(ExtMovQ) , 0 , 16, 0x00, 0x00, 0, { O(Gq)|O(MmXmmMem) , O(Gq)|O(MmXmmMem) , U , U , U }, F(Move) , U }, + { Enc(ExtRm) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(Mm) , U , U , U }, F(Move) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(Move)|F(Special) , U }, + { Enc(X86Op_66H) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtMov) , 0 , 8 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) |F(Z) , O_F20F00(11,U,_,_,_) }, + { Enc(ExtMov) , 0 , 4 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) |F(Z) , O_F30F00(11,U,_,_,_) }, + { Enc(X86MovSxZx) , 0 , 0 , 0x00, 0x00, 0, { O(Gqdw) , O(GwbMem) , U , U , U }, F(Move) , U }, + { Enc(X86MovSxd) , 0 , 0 , 0x00, 0x00, 0, { O(Gq) , O(GdMem) , U , U , U }, F(Move) , U }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_660F00(11,U,_,_,_) }, + { Enc(ExtMov) , 0 , 16, 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Move) , O_000F00(11,U,_,_,_) }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(Gqd) , O(GqdMem) , U , U }, F(None) , U }, + { Enc(X86Rm_B) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , U , U , U , U }, F(Lock) , U }, + { Enc(X86Rm_B) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwbMem) , U , U , U , U }, F(Lock) , U }, + { Enc(ExtRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem) , U , U , U }, F(None) , U }, + { Enc(ExtRmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(ExtExtract) , 0 , 8 , 0x00, 0x00, 0, { O(Gd)|O(Gb)|O(Mem), O(Xmm) , U , U , U }, F(Move) , O_000F3A(14,U,_,_,_) }, + { Enc(ExtExtract) , 0 , 8 , 0x00, 0x00, 0, { O(GdMem) , O(Xmm) , U , U , U }, F(Move) , O_000F3A(16,U,_,_,_) }, + { Enc(ExtExtract) , 0 , 8 , 0x00, 0x00, 0, { O(GqdMem) , O(Xmm) , U , U , U }, F(Move) , O_000F3A(16,U,_,W,_) }, + { Enc(ExtExtract) , 0 , 8 , 0x00, 0x00, 0, { O(GdMem) , O(MmXmm) , U , U , U }, F(Move) , O_000F3A(15,U,_,_,_) }, + { Enc(3dNow) , 0 , 0 , 0x00, 0x00, 0, { O(Mm) , O(MmMem) , U , U , U }, F(None) , U }, + { Enc(ExtRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(GdMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(ExtRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(GqMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(ExtRmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(GdMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(ExtRm_PQ) , 0 , 8 , 0x00, 0x00, 0, { O(Gqd) , O(MmXmm) , U , U , U }, F(Move) , U }, + { Enc(X86Pop) , 0 , 0 , 0x00, 0x00, 0, { 0 , U , U , U , U }, F(None)|F(Special) , O_000000(58,U,_,_,_) }, + { Enc(X86Op) , 0 , 0 , 0x00, 0xFF, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(ExtPrefetch) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , O(Imm) , U , U , U }, F(None) , U }, + { Enc(ExtRmi) , 0 , 16, 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, F(Move) , U }, + { Enc(ExtRmi_P) , 0 , 8 , 0x00, 0x00, 0, { O(Mm) , O(MmMem) , O(Imm) , U , U }, F(Move) , U }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(72,6,_,_,_) }, + { Enc(ExtRmRi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Imm) , U , U , U }, F(None) , O_660F00(73,7,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(73,6,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(71,6,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(72,4,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(71,4,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(72,2,_,_,_) }, + { Enc(ExtRmRi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Imm) , U , U , U }, F(None) , O_660F00(73,3,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(73,2,_,_,_) }, + { Enc(ExtRmRi_P) , 0 , 0 , 0x00, 0x00, 0, { O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U }, F(None) , O_000F00(71,2,_,_,_) }, + { Enc(X86Push) , 0 , 0 , 0x00, 0x00, 0, { 0 , U , U , U , U }, F(None)|F(Special) , O_000000(50,U,_,_,_) }, + { Enc(X86Op) , 0 , 0 , 0xFF, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rot) , 0 , 0 , 0x20, 0x21, 0, { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rm) , 0 , 8 , 0x00, 0x00, 0, { O(Gqd) , U , U , U , U }, F(Move) , U }, + { Enc(X86Rm) , 0 , 8 , 0x00, 0x3F, 0, { O(Gqdw) , U , U , U , U }, F(Move) , U }, + { Enc(X86Rep) , 0 , 0 , 0x40, 0x00, 0, { O(Mem) , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rep) , 0 , 0 , 0x40, 0x00, 0, { O(Mem) , O(Mem) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rep) , 0 , 0 , 0x40, 0x3F, 0, { O(Mem) , O(Mem) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Ret) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rot) , 0 , 0 , 0x00, 0x21, 0, { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, F(None)|F(Special) , U }, + { Enc(AvxRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(GqdMem) , O(Imm) , U , U }, F(None) , U }, + { Enc(ExtRmi) , 0 , 8 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, F(Move) , U }, + { Enc(ExtRmi) , 0 , 4 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, F(Move) , U }, + { Enc(X86Op) , 0 , 0 , 0x00, 0x3E, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Rot) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U }, F(None)|F(Special) , U }, + { Enc(AvxRmv) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(GqdMem) , O(Gqd) , U , U }, F(None) , U }, + { Enc(X86Set) , 0 , 1 , 0x24, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x20, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x04, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x07, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x03, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x01, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x10, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Set) , 0 , 1 , 0x02, 0x00, 0, { O(GbMem) , U , U , U , U }, F(Move) , U }, + { Enc(X86Shlrd) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(Gb) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Shlrd) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(Gqdwb) , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Op) , 0 , 0 , 0x40, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Op_66H) , 0 , 0 , 0x40, 0x00, 0, { U , U , U , U , U }, F(None)|F(Special) , U }, + { Enc(X86Test) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(Gqdwb)|O(Imm) , U , U , U }, F(Test) , O_000000(F6,U,_,_,_) }, + { Enc(X86RegRm) , 0 , 0 , 0x00, 0x3F, 0, { O(Gqdw) , O(GqdwMem) , U , U , U }, F(Move) , U }, + { Enc(AvxRvm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , U , U }, F(Avx) , U }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvmr_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(Xy) , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(Mem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XyMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxMri_P) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xy) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(GqdMem) , U , U }, F(Avx) , U }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XyMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxMri) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Ymm) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxMri) , 0 , 0 , 0x00, 0x00, 0, { O(GqdMem) , O(Xmm) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(Fma4_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U }, F(Avx) , U }, + { Enc(Fma4) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U }, F(Avx) , U }, + { Enc(XopRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , U , U , U }, F(Avx) , U }, + { Enc(XopRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxGather) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Mem) , O(Xy) , U , U }, F(Avx) , U }, + { Enc(AvxGatherEx) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Mem) , O(Xmm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Mem) , U , U , U }, F(Avx) , U }, + { Enc(AvxM) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(Avx) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , U , U , U }, F(Avx) , U }, + { Enc(AvxRvmMvr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(Xy) , O(XyMem) , U , U }, F(Avx) , O_660F38(2F,U,_,_,_) }, + { Enc(AvxRvmMvr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(Xy) , O(XyMem) , U , U }, F(Avx) , O_660F38(2E,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_660F00(29,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_000F00(29,U,_,_,_) }, + { Enc(AvxRmMr) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , U , U , U }, F(Avx) , O_660F00(7E,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_660F00(7F,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_F30F00(7F,U,_,_,_) }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(Xmm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmMr) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, F(Avx) , O_660F00(17,U,_,_,_) }, + { Enc(AvxRvmMr) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, F(Avx) , O_000F00(17,U,_,_,_) }, + { Enc(AvxRvmMr) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, F(Avx) , O_660F00(13,U,_,_,_) }, + { Enc(AvxRvmMr) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xmm) , O(Mem) , U , U }, F(Avx) , O_000F00(13,U,_,_,_) }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , O(Xy) , U , U , U }, F(Avx) , U }, + { Enc(AvxMr) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , O(Xy) , U , U , U }, F(Avx) , U }, + { Enc(AvxMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , O(Xy) , U , U , U }, F(Avx) , U }, + { Enc(AvxMovSsSd) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(XmmMem) , O(Xmm) , U , U }, F(Avx) , O_F20F00(11,U,_,_,_) }, + { Enc(AvxMovSsSd) , 0 , 0 , 0x00, 0x00, 0, { O(XmmMem) , O(Xmm) , O(Xmm) , U , U }, F(Avx) , O_F30F00(11,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_660F00(11,U,_,_,_) }, + { Enc(AvxRmMr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(XyMem) , U , U , U }, F(Avx) , O_000F00(11,U,_,_,_) }, + { Enc(AvxRvmr) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(Xy) , U }, F(Avx) , U }, + { Enc(XopRvrmRvmr_P), 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U }, F(Avx) , U }, + { Enc(XopRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvm) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(Ymm) , O(YmmMem) , U , U }, F(Avx) , U }, + { Enc(AvxRvrmRvmr_P), 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U }, F(Avx) , U }, + { Enc(AvxRvmRmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F3A(05,U,_,_,_) }, + { Enc(AvxRvmRmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F3A(04,U,_,_,_) }, + { Enc(AvxRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Ymm) , O(YmmMem) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxMri) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwbMem) , O(Xmm) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxMri) , 0 , 0 , 0x00, 0x00, 0, { O(GqMem) , O(Xmm) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxMri) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwMem) , O(Xmm) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(GqdwbMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(GqdMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(GqMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(AvxRvmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(GqdwMem) , O(Imm) , U }, F(Avx) , U }, + { Enc(XopRvmr) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U }, F(Avx) , U }, + { Enc(AvxRvmMvr_P) , 0 , 0 , 0x00, 0x00, 0, { O(XyMem) , O(Xy) , O(XyMem) , U , U }, F(Avx) , O_660F38(8E,U,_,_,_) }, + { Enc(XopRvrmRvmr) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U }, F(Avx) , U }, + { Enc(XopRvmRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, F(Avx) , O_00_M08(C0,U,_,_,_) }, + { Enc(XopRvmRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, F(Avx) , O_00_M08(C2,U,_,_,_) }, + { Enc(XopRvmRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, F(Avx) , O_00_M08(C3,U,_,_,_) }, + { Enc(XopRvmRmi) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U }, F(Avx) , O_00_M08(C1,U,_,_,_) }, + { Enc(XopRvmRmv) , 0 , 0 , 0x00, 0x00, 0, { O(Xmm) , O(XmmMem) , O(XmmMem) , U , U }, F(Avx) , U }, + { Enc(AvxRmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(72,6,_,_,_) }, + { Enc(AvxVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(Imm) , U , U }, F(Avx) , U }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(73,6,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(71,6,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(72,4,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(71,4,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(72,2,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(73,2,_,_,_) }, + { Enc(AvxRvmVmi_P) , 0 , 0 , 0x00, 0x00, 0, { O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U }, F(Avx) , O_660F00(71,2,_,_,_) }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x3F, 0, { O(Xy) , O(XyMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxRm_P) , 0 , 0 , 0x00, 0x3F, 0, { O(Xy) , O(XyMem) , U , U , U }, F(Test) , U }, + { Enc(AvxRm) , 0 , 0 , 0x00, 0x3F, 0, { O(Xmm) , O(XmmMem) , U , U , U }, F(Avx) , U }, + { Enc(AvxOp) , 0 , 0 , 0x00, 0x00, 0, { U , U , U , U , U }, F(Avx) , U }, + { Enc(X86Rm) , 0 , 0 , 0x00, 0x00, 0, { O(Gqd) , U , U , U , U }, F(None) , U }, + { Enc(X86Xadd) , 0 , 0 , 0x00, 0x3F, 0, { O(GqdwbMem) , O(Gqdwb) , U , U , U }, F(Xchg)|F(Lock) , U }, + { Enc(X86Xchg) , 0 , 0 , 0x00, 0x00, 0, { O(GqdwbMem) , O(Gqdwb) , U , U , U }, F(Xchg)|F(Lock) , U }, + { Enc(X86M) , 0 , 0 , 0x00, 0x00, 0, { O(Mem) , U , U , U , U }, F(None)|F(Special) , U } }; // Automatically generated, do not edit. @@ -2556,2075 +2654,2100 @@ enum kX86InstData_ExtendedIndex { kX86InstIdCall_ExtendedIndex = 15, kX86InstIdCbw_ExtendedIndex = 16, kX86InstIdCdq_ExtendedIndex = 16, - kX86InstIdCdqe_ExtendedIndex = 17, - kX86InstIdClc_ExtendedIndex = 18, - kX86InstIdCld_ExtendedIndex = 19, - kX86InstIdClflush_ExtendedIndex = 20, - kX86InstIdCmc_ExtendedIndex = 21, - kX86InstIdCmova_ExtendedIndex = 22, - kX86InstIdCmovae_ExtendedIndex = 23, - kX86InstIdCmovb_ExtendedIndex = 23, - kX86InstIdCmovbe_ExtendedIndex = 22, - kX86InstIdCmovc_ExtendedIndex = 23, - kX86InstIdCmove_ExtendedIndex = 24, - kX86InstIdCmovg_ExtendedIndex = 25, - kX86InstIdCmovge_ExtendedIndex = 26, - kX86InstIdCmovl_ExtendedIndex = 26, - kX86InstIdCmovle_ExtendedIndex = 25, - kX86InstIdCmovna_ExtendedIndex = 22, - kX86InstIdCmovnae_ExtendedIndex = 23, - kX86InstIdCmovnb_ExtendedIndex = 23, - kX86InstIdCmovnbe_ExtendedIndex = 22, - kX86InstIdCmovnc_ExtendedIndex = 23, - kX86InstIdCmovne_ExtendedIndex = 24, - kX86InstIdCmovng_ExtendedIndex = 25, - kX86InstIdCmovnge_ExtendedIndex = 26, - kX86InstIdCmovnl_ExtendedIndex = 26, - kX86InstIdCmovnle_ExtendedIndex = 25, - kX86InstIdCmovno_ExtendedIndex = 27, - kX86InstIdCmovnp_ExtendedIndex = 28, - kX86InstIdCmovns_ExtendedIndex = 29, - kX86InstIdCmovnz_ExtendedIndex = 24, - kX86InstIdCmovo_ExtendedIndex = 27, - kX86InstIdCmovp_ExtendedIndex = 28, - kX86InstIdCmovpe_ExtendedIndex = 28, - kX86InstIdCmovpo_ExtendedIndex = 28, - kX86InstIdCmovs_ExtendedIndex = 29, - kX86InstIdCmovz_ExtendedIndex = 24, - kX86InstIdCmp_ExtendedIndex = 30, + kX86InstIdCdqe_ExtendedIndex = 16, + kX86InstIdClc_ExtendedIndex = 17, + kX86InstIdCld_ExtendedIndex = 18, + kX86InstIdClflush_ExtendedIndex = 19, + kX86InstIdCmc_ExtendedIndex = 20, + kX86InstIdCmova_ExtendedIndex = 21, + kX86InstIdCmovae_ExtendedIndex = 22, + kX86InstIdCmovb_ExtendedIndex = 22, + kX86InstIdCmovbe_ExtendedIndex = 21, + kX86InstIdCmovc_ExtendedIndex = 22, + kX86InstIdCmove_ExtendedIndex = 23, + kX86InstIdCmovg_ExtendedIndex = 24, + kX86InstIdCmovge_ExtendedIndex = 25, + kX86InstIdCmovl_ExtendedIndex = 25, + kX86InstIdCmovle_ExtendedIndex = 24, + kX86InstIdCmovna_ExtendedIndex = 21, + kX86InstIdCmovnae_ExtendedIndex = 22, + kX86InstIdCmovnb_ExtendedIndex = 22, + kX86InstIdCmovnbe_ExtendedIndex = 21, + kX86InstIdCmovnc_ExtendedIndex = 22, + kX86InstIdCmovne_ExtendedIndex = 23, + kX86InstIdCmovng_ExtendedIndex = 24, + kX86InstIdCmovnge_ExtendedIndex = 25, + kX86InstIdCmovnl_ExtendedIndex = 25, + kX86InstIdCmovnle_ExtendedIndex = 24, + kX86InstIdCmovno_ExtendedIndex = 26, + kX86InstIdCmovnp_ExtendedIndex = 27, + kX86InstIdCmovns_ExtendedIndex = 28, + kX86InstIdCmovnz_ExtendedIndex = 23, + kX86InstIdCmovo_ExtendedIndex = 26, + kX86InstIdCmovp_ExtendedIndex = 27, + kX86InstIdCmovpe_ExtendedIndex = 27, + kX86InstIdCmovpo_ExtendedIndex = 27, + kX86InstIdCmovs_ExtendedIndex = 28, + kX86InstIdCmovz_ExtendedIndex = 23, + kX86InstIdCmp_ExtendedIndex = 29, kX86InstIdCmppd_ExtendedIndex = 4, kX86InstIdCmpps_ExtendedIndex = 4, - kX86InstIdCmpsB_ExtendedIndex = 31, - kX86InstIdCmpsD_ExtendedIndex = 31, - kX86InstIdCmpsQ_ExtendedIndex = 32, - kX86InstIdCmpsW_ExtendedIndex = 33, + kX86InstIdCmpsB_ExtendedIndex = 30, + kX86InstIdCmpsD_ExtendedIndex = 30, + kX86InstIdCmpsQ_ExtendedIndex = 30, + kX86InstIdCmpsW_ExtendedIndex = 31, kX86InstIdCmpsd_ExtendedIndex = 4, kX86InstIdCmpss_ExtendedIndex = 4, - kX86InstIdCmpxchg_ExtendedIndex = 34, - kX86InstIdCmpxchg16b_ExtendedIndex = 35, - kX86InstIdCmpxchg8b_ExtendedIndex = 36, - kX86InstIdComisd_ExtendedIndex = 37, - kX86InstIdComiss_ExtendedIndex = 37, + kX86InstIdCmpxchg_ExtendedIndex = 32, + kX86InstIdCmpxchg16b_ExtendedIndex = 33, + kX86InstIdCmpxchg8b_ExtendedIndex = 33, + kX86InstIdComisd_ExtendedIndex = 34, + kX86InstIdComiss_ExtendedIndex = 34, kX86InstIdCpuid_ExtendedIndex = 16, - kX86InstIdCqo_ExtendedIndex = 17, - kX86InstIdCrc32_ExtendedIndex = 38, - kX86InstIdCvtdq2pd_ExtendedIndex = 39, - kX86InstIdCvtdq2ps_ExtendedIndex = 39, - kX86InstIdCvtpd2dq_ExtendedIndex = 39, - kX86InstIdCvtpd2pi_ExtendedIndex = 40, - kX86InstIdCvtpd2ps_ExtendedIndex = 39, - kX86InstIdCvtpi2pd_ExtendedIndex = 41, - kX86InstIdCvtpi2ps_ExtendedIndex = 42, - kX86InstIdCvtps2dq_ExtendedIndex = 39, - kX86InstIdCvtps2pd_ExtendedIndex = 39, - kX86InstIdCvtps2pi_ExtendedIndex = 40, - kX86InstIdCvtsd2si_ExtendedIndex = 43, - kX86InstIdCvtsd2ss_ExtendedIndex = 44, - kX86InstIdCvtsi2sd_ExtendedIndex = 45, - kX86InstIdCvtsi2ss_ExtendedIndex = 46, - kX86InstIdCvtss2sd_ExtendedIndex = 47, - kX86InstIdCvtss2si_ExtendedIndex = 43, - kX86InstIdCvttpd2dq_ExtendedIndex = 39, - kX86InstIdCvttpd2pi_ExtendedIndex = 40, - kX86InstIdCvttps2dq_ExtendedIndex = 39, - kX86InstIdCvttps2pi_ExtendedIndex = 40, - kX86InstIdCvttsd2si_ExtendedIndex = 43, - kX86InstIdCvttss2si_ExtendedIndex = 43, + kX86InstIdCqo_ExtendedIndex = 16, + kX86InstIdCrc32_ExtendedIndex = 35, + kX86InstIdCvtdq2pd_ExtendedIndex = 36, + kX86InstIdCvtdq2ps_ExtendedIndex = 36, + kX86InstIdCvtpd2dq_ExtendedIndex = 36, + kX86InstIdCvtpd2pi_ExtendedIndex = 37, + kX86InstIdCvtpd2ps_ExtendedIndex = 36, + kX86InstIdCvtpi2pd_ExtendedIndex = 38, + kX86InstIdCvtpi2ps_ExtendedIndex = 39, + kX86InstIdCvtps2dq_ExtendedIndex = 36, + kX86InstIdCvtps2pd_ExtendedIndex = 36, + kX86InstIdCvtps2pi_ExtendedIndex = 37, + kX86InstIdCvtsd2si_ExtendedIndex = 40, + kX86InstIdCvtsd2ss_ExtendedIndex = 41, + kX86InstIdCvtsi2sd_ExtendedIndex = 42, + kX86InstIdCvtsi2ss_ExtendedIndex = 43, + kX86InstIdCvtss2sd_ExtendedIndex = 44, + kX86InstIdCvtss2si_ExtendedIndex = 40, + kX86InstIdCvttpd2dq_ExtendedIndex = 36, + kX86InstIdCvttpd2pi_ExtendedIndex = 37, + kX86InstIdCvttps2dq_ExtendedIndex = 36, + kX86InstIdCvttps2pi_ExtendedIndex = 37, + kX86InstIdCvttsd2si_ExtendedIndex = 40, + kX86InstIdCvttss2si_ExtendedIndex = 40, kX86InstIdCwd_ExtendedIndex = 16, kX86InstIdCwde_ExtendedIndex = 16, - kX86InstIdDaa_ExtendedIndex = 48, - kX86InstIdDas_ExtendedIndex = 48, - kX86InstIdDec_ExtendedIndex = 49, - kX86InstIdDiv_ExtendedIndex = 50, + kX86InstIdDaa_ExtendedIndex = 45, + kX86InstIdDas_ExtendedIndex = 45, + kX86InstIdDec_ExtendedIndex = 46, + kX86InstIdDiv_ExtendedIndex = 47, kX86InstIdDivpd_ExtendedIndex = 3, kX86InstIdDivps_ExtendedIndex = 3, kX86InstIdDivsd_ExtendedIndex = 3, kX86InstIdDivss_ExtendedIndex = 3, kX86InstIdDppd_ExtendedIndex = 4, kX86InstIdDpps_ExtendedIndex = 4, - kX86InstIdEmms_ExtendedIndex = 51, - kX86InstIdEnter_ExtendedIndex = 52, - kX86InstIdExtractps_ExtendedIndex = 53, - kX86InstIdF2xm1_ExtendedIndex = 54, - kX86InstIdFabs_ExtendedIndex = 54, - kX86InstIdFadd_ExtendedIndex = 55, - kX86InstIdFaddp_ExtendedIndex = 56, - kX86InstIdFbld_ExtendedIndex = 57, - kX86InstIdFbstp_ExtendedIndex = 57, - kX86InstIdFchs_ExtendedIndex = 54, - kX86InstIdFclex_ExtendedIndex = 54, - kX86InstIdFcmovb_ExtendedIndex = 58, - kX86InstIdFcmovbe_ExtendedIndex = 59, - kX86InstIdFcmove_ExtendedIndex = 60, - kX86InstIdFcmovnb_ExtendedIndex = 58, - kX86InstIdFcmovnbe_ExtendedIndex = 59, - kX86InstIdFcmovne_ExtendedIndex = 60, - kX86InstIdFcmovnu_ExtendedIndex = 61, - kX86InstIdFcmovu_ExtendedIndex = 61, - kX86InstIdFcom_ExtendedIndex = 62, - kX86InstIdFcomi_ExtendedIndex = 63, - kX86InstIdFcomip_ExtendedIndex = 63, - kX86InstIdFcomp_ExtendedIndex = 62, - kX86InstIdFcompp_ExtendedIndex = 54, - kX86InstIdFcos_ExtendedIndex = 54, - kX86InstIdFdecstp_ExtendedIndex = 54, - kX86InstIdFdiv_ExtendedIndex = 55, - kX86InstIdFdivp_ExtendedIndex = 56, - kX86InstIdFdivr_ExtendedIndex = 55, - kX86InstIdFdivrp_ExtendedIndex = 56, - kX86InstIdFemms_ExtendedIndex = 64, - kX86InstIdFfree_ExtendedIndex = 65, - kX86InstIdFiadd_ExtendedIndex = 66, - kX86InstIdFicom_ExtendedIndex = 66, - kX86InstIdFicomp_ExtendedIndex = 66, - kX86InstIdFidiv_ExtendedIndex = 66, - kX86InstIdFidivr_ExtendedIndex = 66, - kX86InstIdFild_ExtendedIndex = 67, - kX86InstIdFimul_ExtendedIndex = 66, - kX86InstIdFincstp_ExtendedIndex = 54, - kX86InstIdFinit_ExtendedIndex = 54, - kX86InstIdFist_ExtendedIndex = 66, - kX86InstIdFistp_ExtendedIndex = 68, - kX86InstIdFisttp_ExtendedIndex = 69, - kX86InstIdFisub_ExtendedIndex = 66, - kX86InstIdFisubr_ExtendedIndex = 66, - kX86InstIdFld_ExtendedIndex = 70, - kX86InstIdFld1_ExtendedIndex = 54, - kX86InstIdFldcw_ExtendedIndex = 57, - kX86InstIdFldenv_ExtendedIndex = 57, - kX86InstIdFldl2e_ExtendedIndex = 54, - kX86InstIdFldl2t_ExtendedIndex = 54, - kX86InstIdFldlg2_ExtendedIndex = 54, - kX86InstIdFldln2_ExtendedIndex = 54, - kX86InstIdFldpi_ExtendedIndex = 54, - kX86InstIdFldz_ExtendedIndex = 54, - kX86InstIdFmul_ExtendedIndex = 55, - kX86InstIdFmulp_ExtendedIndex = 56, - kX86InstIdFnclex_ExtendedIndex = 54, - kX86InstIdFninit_ExtendedIndex = 54, - kX86InstIdFnop_ExtendedIndex = 54, - kX86InstIdFnsave_ExtendedIndex = 57, - kX86InstIdFnstcw_ExtendedIndex = 57, - kX86InstIdFnstenv_ExtendedIndex = 57, - kX86InstIdFnstsw_ExtendedIndex = 71, - kX86InstIdFpatan_ExtendedIndex = 54, - kX86InstIdFprem_ExtendedIndex = 54, - kX86InstIdFprem1_ExtendedIndex = 54, - kX86InstIdFptan_ExtendedIndex = 54, - kX86InstIdFrndint_ExtendedIndex = 54, - kX86InstIdFrstor_ExtendedIndex = 57, - kX86InstIdFsave_ExtendedIndex = 57, - kX86InstIdFscale_ExtendedIndex = 54, - kX86InstIdFsin_ExtendedIndex = 54, - kX86InstIdFsincos_ExtendedIndex = 54, - kX86InstIdFsqrt_ExtendedIndex = 54, - kX86InstIdFst_ExtendedIndex = 72, - kX86InstIdFstcw_ExtendedIndex = 57, - kX86InstIdFstenv_ExtendedIndex = 57, - kX86InstIdFstp_ExtendedIndex = 73, - kX86InstIdFstsw_ExtendedIndex = 74, - kX86InstIdFsub_ExtendedIndex = 55, - kX86InstIdFsubp_ExtendedIndex = 56, - kX86InstIdFsubr_ExtendedIndex = 55, - kX86InstIdFsubrp_ExtendedIndex = 56, - kX86InstIdFtst_ExtendedIndex = 54, - kX86InstIdFucom_ExtendedIndex = 56, - kX86InstIdFucomi_ExtendedIndex = 63, - kX86InstIdFucomip_ExtendedIndex = 63, - kX86InstIdFucomp_ExtendedIndex = 56, - kX86InstIdFucompp_ExtendedIndex = 54, - kX86InstIdFwait_ExtendedIndex = 64, - kX86InstIdFxam_ExtendedIndex = 54, - kX86InstIdFxch_ExtendedIndex = 65, - kX86InstIdFxrstor_ExtendedIndex = 57, - kX86InstIdFxsave_ExtendedIndex = 57, - kX86InstIdFxtract_ExtendedIndex = 54, - kX86InstIdFyl2x_ExtendedIndex = 54, - kX86InstIdFyl2xp1_ExtendedIndex = 54, + kX86InstIdEmms_ExtendedIndex = 48, + kX86InstIdEnter_ExtendedIndex = 49, + kX86InstIdExtractps_ExtendedIndex = 50, + kX86InstIdExtrq_ExtendedIndex = 51, + kX86InstIdF2xm1_ExtendedIndex = 52, + kX86InstIdFabs_ExtendedIndex = 52, + kX86InstIdFadd_ExtendedIndex = 53, + kX86InstIdFaddp_ExtendedIndex = 54, + kX86InstIdFbld_ExtendedIndex = 55, + kX86InstIdFbstp_ExtendedIndex = 55, + kX86InstIdFchs_ExtendedIndex = 52, + kX86InstIdFclex_ExtendedIndex = 52, + kX86InstIdFcmovb_ExtendedIndex = 56, + kX86InstIdFcmovbe_ExtendedIndex = 57, + kX86InstIdFcmove_ExtendedIndex = 58, + kX86InstIdFcmovnb_ExtendedIndex = 56, + kX86InstIdFcmovnbe_ExtendedIndex = 57, + kX86InstIdFcmovne_ExtendedIndex = 58, + kX86InstIdFcmovnu_ExtendedIndex = 59, + kX86InstIdFcmovu_ExtendedIndex = 59, + kX86InstIdFcom_ExtendedIndex = 60, + kX86InstIdFcomi_ExtendedIndex = 61, + kX86InstIdFcomip_ExtendedIndex = 61, + kX86InstIdFcomp_ExtendedIndex = 60, + kX86InstIdFcompp_ExtendedIndex = 52, + kX86InstIdFcos_ExtendedIndex = 52, + kX86InstIdFdecstp_ExtendedIndex = 52, + kX86InstIdFdiv_ExtendedIndex = 53, + kX86InstIdFdivp_ExtendedIndex = 54, + kX86InstIdFdivr_ExtendedIndex = 53, + kX86InstIdFdivrp_ExtendedIndex = 54, + kX86InstIdFemms_ExtendedIndex = 62, + kX86InstIdFfree_ExtendedIndex = 63, + kX86InstIdFiadd_ExtendedIndex = 64, + kX86InstIdFicom_ExtendedIndex = 64, + kX86InstIdFicomp_ExtendedIndex = 64, + kX86InstIdFidiv_ExtendedIndex = 64, + kX86InstIdFidivr_ExtendedIndex = 64, + kX86InstIdFild_ExtendedIndex = 65, + kX86InstIdFimul_ExtendedIndex = 64, + kX86InstIdFincstp_ExtendedIndex = 52, + kX86InstIdFinit_ExtendedIndex = 52, + kX86InstIdFist_ExtendedIndex = 64, + kX86InstIdFistp_ExtendedIndex = 66, + kX86InstIdFisttp_ExtendedIndex = 67, + kX86InstIdFisub_ExtendedIndex = 64, + kX86InstIdFisubr_ExtendedIndex = 64, + kX86InstIdFld_ExtendedIndex = 68, + kX86InstIdFld1_ExtendedIndex = 52, + kX86InstIdFldcw_ExtendedIndex = 55, + kX86InstIdFldenv_ExtendedIndex = 55, + kX86InstIdFldl2e_ExtendedIndex = 52, + kX86InstIdFldl2t_ExtendedIndex = 52, + kX86InstIdFldlg2_ExtendedIndex = 52, + kX86InstIdFldln2_ExtendedIndex = 52, + kX86InstIdFldpi_ExtendedIndex = 52, + kX86InstIdFldz_ExtendedIndex = 52, + kX86InstIdFmul_ExtendedIndex = 53, + kX86InstIdFmulp_ExtendedIndex = 54, + kX86InstIdFnclex_ExtendedIndex = 52, + kX86InstIdFninit_ExtendedIndex = 52, + kX86InstIdFnop_ExtendedIndex = 52, + kX86InstIdFnsave_ExtendedIndex = 55, + kX86InstIdFnstcw_ExtendedIndex = 55, + kX86InstIdFnstenv_ExtendedIndex = 55, + kX86InstIdFnstsw_ExtendedIndex = 69, + kX86InstIdFpatan_ExtendedIndex = 52, + kX86InstIdFprem_ExtendedIndex = 52, + kX86InstIdFprem1_ExtendedIndex = 52, + kX86InstIdFptan_ExtendedIndex = 52, + kX86InstIdFrndint_ExtendedIndex = 52, + kX86InstIdFrstor_ExtendedIndex = 55, + kX86InstIdFsave_ExtendedIndex = 55, + kX86InstIdFscale_ExtendedIndex = 52, + kX86InstIdFsin_ExtendedIndex = 52, + kX86InstIdFsincos_ExtendedIndex = 52, + kX86InstIdFsqrt_ExtendedIndex = 52, + kX86InstIdFst_ExtendedIndex = 70, + kX86InstIdFstcw_ExtendedIndex = 55, + kX86InstIdFstenv_ExtendedIndex = 55, + kX86InstIdFstp_ExtendedIndex = 71, + kX86InstIdFstsw_ExtendedIndex = 72, + kX86InstIdFsub_ExtendedIndex = 53, + kX86InstIdFsubp_ExtendedIndex = 54, + kX86InstIdFsubr_ExtendedIndex = 53, + kX86InstIdFsubrp_ExtendedIndex = 54, + kX86InstIdFtst_ExtendedIndex = 52, + kX86InstIdFucom_ExtendedIndex = 54, + kX86InstIdFucomi_ExtendedIndex = 61, + kX86InstIdFucomip_ExtendedIndex = 61, + kX86InstIdFucomp_ExtendedIndex = 54, + kX86InstIdFucompp_ExtendedIndex = 52, + kX86InstIdFwait_ExtendedIndex = 62, + kX86InstIdFxam_ExtendedIndex = 52, + kX86InstIdFxch_ExtendedIndex = 63, + kX86InstIdFxrstor_ExtendedIndex = 55, + kX86InstIdFxsave_ExtendedIndex = 55, + kX86InstIdFxtract_ExtendedIndex = 52, + kX86InstIdFyl2x_ExtendedIndex = 52, + kX86InstIdFyl2xp1_ExtendedIndex = 52, kX86InstIdHaddpd_ExtendedIndex = 3, kX86InstIdHaddps_ExtendedIndex = 3, kX86InstIdHsubpd_ExtendedIndex = 3, kX86InstIdHsubps_ExtendedIndex = 3, - kX86InstIdIdiv_ExtendedIndex = 75, - kX86InstIdImul_ExtendedIndex = 76, - kX86InstIdInc_ExtendedIndex = 77, + kX86InstIdIdiv_ExtendedIndex = 73, + kX86InstIdImul_ExtendedIndex = 74, + kX86InstIdInc_ExtendedIndex = 75, kX86InstIdInsertps_ExtendedIndex = 4, - kX86InstIdInt_ExtendedIndex = 78, - kX86InstIdJa_ExtendedIndex = 79, - kX86InstIdJae_ExtendedIndex = 80, - kX86InstIdJb_ExtendedIndex = 80, - kX86InstIdJbe_ExtendedIndex = 79, - kX86InstIdJc_ExtendedIndex = 80, - kX86InstIdJe_ExtendedIndex = 81, - kX86InstIdJg_ExtendedIndex = 82, - kX86InstIdJge_ExtendedIndex = 83, - kX86InstIdJl_ExtendedIndex = 83, - kX86InstIdJle_ExtendedIndex = 82, - kX86InstIdJna_ExtendedIndex = 79, - kX86InstIdJnae_ExtendedIndex = 80, - kX86InstIdJnb_ExtendedIndex = 80, - kX86InstIdJnbe_ExtendedIndex = 79, - kX86InstIdJnc_ExtendedIndex = 80, - kX86InstIdJne_ExtendedIndex = 81, - kX86InstIdJng_ExtendedIndex = 82, - kX86InstIdJnge_ExtendedIndex = 83, - kX86InstIdJnl_ExtendedIndex = 83, - kX86InstIdJnle_ExtendedIndex = 82, - kX86InstIdJno_ExtendedIndex = 84, - kX86InstIdJnp_ExtendedIndex = 85, - kX86InstIdJns_ExtendedIndex = 86, - kX86InstIdJnz_ExtendedIndex = 81, - kX86InstIdJo_ExtendedIndex = 84, - kX86InstIdJp_ExtendedIndex = 85, - kX86InstIdJpe_ExtendedIndex = 85, - kX86InstIdJpo_ExtendedIndex = 85, - kX86InstIdJs_ExtendedIndex = 86, - kX86InstIdJz_ExtendedIndex = 81, - kX86InstIdJecxz_ExtendedIndex = 87, - kX86InstIdJmp_ExtendedIndex = 88, - kX86InstIdLahf_ExtendedIndex = 89, - kX86InstIdLddqu_ExtendedIndex = 90, - kX86InstIdLdmxcsr_ExtendedIndex = 20, - kX86InstIdLea_ExtendedIndex = 91, + kX86InstIdInsertq_ExtendedIndex = 76, + kX86InstIdInt_ExtendedIndex = 77, + kX86InstIdJa_ExtendedIndex = 78, + kX86InstIdJae_ExtendedIndex = 79, + kX86InstIdJb_ExtendedIndex = 79, + kX86InstIdJbe_ExtendedIndex = 78, + kX86InstIdJc_ExtendedIndex = 79, + kX86InstIdJe_ExtendedIndex = 80, + kX86InstIdJg_ExtendedIndex = 81, + kX86InstIdJge_ExtendedIndex = 82, + kX86InstIdJl_ExtendedIndex = 82, + kX86InstIdJle_ExtendedIndex = 81, + kX86InstIdJna_ExtendedIndex = 78, + kX86InstIdJnae_ExtendedIndex = 79, + kX86InstIdJnb_ExtendedIndex = 79, + kX86InstIdJnbe_ExtendedIndex = 78, + kX86InstIdJnc_ExtendedIndex = 79, + kX86InstIdJne_ExtendedIndex = 80, + kX86InstIdJng_ExtendedIndex = 81, + kX86InstIdJnge_ExtendedIndex = 82, + kX86InstIdJnl_ExtendedIndex = 82, + kX86InstIdJnle_ExtendedIndex = 81, + kX86InstIdJno_ExtendedIndex = 83, + kX86InstIdJnp_ExtendedIndex = 84, + kX86InstIdJns_ExtendedIndex = 85, + kX86InstIdJnz_ExtendedIndex = 80, + kX86InstIdJo_ExtendedIndex = 83, + kX86InstIdJp_ExtendedIndex = 84, + kX86InstIdJpe_ExtendedIndex = 84, + kX86InstIdJpo_ExtendedIndex = 84, + kX86InstIdJs_ExtendedIndex = 85, + kX86InstIdJz_ExtendedIndex = 80, + kX86InstIdJecxz_ExtendedIndex = 86, + kX86InstIdJmp_ExtendedIndex = 87, + kX86InstIdLahf_ExtendedIndex = 88, + kX86InstIdLddqu_ExtendedIndex = 89, + kX86InstIdLdmxcsr_ExtendedIndex = 19, + kX86InstIdLea_ExtendedIndex = 90, kX86InstIdLeave_ExtendedIndex = 16, - kX86InstIdLfence_ExtendedIndex = 92, - kX86InstIdLodsB_ExtendedIndex = 93, - kX86InstIdLodsD_ExtendedIndex = 94, - kX86InstIdLodsQ_ExtendedIndex = 95, - kX86InstIdLodsW_ExtendedIndex = 96, + kX86InstIdLfence_ExtendedIndex = 91, + kX86InstIdLodsB_ExtendedIndex = 92, + kX86InstIdLodsD_ExtendedIndex = 93, + kX86InstIdLodsQ_ExtendedIndex = 94, + kX86InstIdLodsW_ExtendedIndex = 95, kX86InstIdLzcnt_ExtendedIndex = 9, - kX86InstIdMaskmovdqu_ExtendedIndex = 97, - kX86InstIdMaskmovq_ExtendedIndex = 98, + kX86InstIdMaskmovdqu_ExtendedIndex = 96, + kX86InstIdMaskmovq_ExtendedIndex = 97, kX86InstIdMaxpd_ExtendedIndex = 3, kX86InstIdMaxps_ExtendedIndex = 3, kX86InstIdMaxsd_ExtendedIndex = 3, kX86InstIdMaxss_ExtendedIndex = 3, - kX86InstIdMfence_ExtendedIndex = 92, + kX86InstIdMfence_ExtendedIndex = 91, kX86InstIdMinpd_ExtendedIndex = 3, kX86InstIdMinps_ExtendedIndex = 3, kX86InstIdMinsd_ExtendedIndex = 3, kX86InstIdMinss_ExtendedIndex = 3, kX86InstIdMonitor_ExtendedIndex = 16, - kX86InstIdMov_ExtendedIndex = 99, - kX86InstIdMovPtr_ExtendedIndex = 100, - kX86InstIdMovapd_ExtendedIndex = 101, - kX86InstIdMovaps_ExtendedIndex = 102, - kX86InstIdMovbe_ExtendedIndex = 103, - kX86InstIdMovd_ExtendedIndex = 104, - kX86InstIdMovddup_ExtendedIndex = 105, - kX86InstIdMovdq2q_ExtendedIndex = 106, - kX86InstIdMovdqa_ExtendedIndex = 107, - kX86InstIdMovdqu_ExtendedIndex = 108, - kX86InstIdMovhlps_ExtendedIndex = 109, - kX86InstIdMovhpd_ExtendedIndex = 110, - kX86InstIdMovhps_ExtendedIndex = 111, - kX86InstIdMovlhps_ExtendedIndex = 112, - kX86InstIdMovlpd_ExtendedIndex = 113, - kX86InstIdMovlps_ExtendedIndex = 114, - kX86InstIdMovmskpd_ExtendedIndex = 115, - kX86InstIdMovmskps_ExtendedIndex = 115, - kX86InstIdMovntdq_ExtendedIndex = 116, - kX86InstIdMovntdqa_ExtendedIndex = 117, - kX86InstIdMovnti_ExtendedIndex = 118, - kX86InstIdMovntpd_ExtendedIndex = 119, - kX86InstIdMovntps_ExtendedIndex = 120, - kX86InstIdMovntq_ExtendedIndex = 121, - kX86InstIdMovq_ExtendedIndex = 122, - kX86InstIdMovq2dq_ExtendedIndex = 123, + kX86InstIdMov_ExtendedIndex = 98, + kX86InstIdMovPtr_ExtendedIndex = 99, + kX86InstIdMovapd_ExtendedIndex = 100, + kX86InstIdMovaps_ExtendedIndex = 101, + kX86InstIdMovbe_ExtendedIndex = 102, + kX86InstIdMovd_ExtendedIndex = 103, + kX86InstIdMovddup_ExtendedIndex = 104, + kX86InstIdMovdq2q_ExtendedIndex = 105, + kX86InstIdMovdqa_ExtendedIndex = 106, + kX86InstIdMovdqu_ExtendedIndex = 107, + kX86InstIdMovhlps_ExtendedIndex = 108, + kX86InstIdMovhpd_ExtendedIndex = 109, + kX86InstIdMovhps_ExtendedIndex = 110, + kX86InstIdMovlhps_ExtendedIndex = 111, + kX86InstIdMovlpd_ExtendedIndex = 112, + kX86InstIdMovlps_ExtendedIndex = 113, + kX86InstIdMovmskpd_ExtendedIndex = 114, + kX86InstIdMovmskps_ExtendedIndex = 114, + kX86InstIdMovntdq_ExtendedIndex = 115, + kX86InstIdMovntdqa_ExtendedIndex = 116, + kX86InstIdMovnti_ExtendedIndex = 117, + kX86InstIdMovntpd_ExtendedIndex = 118, + kX86InstIdMovntps_ExtendedIndex = 119, + kX86InstIdMovntq_ExtendedIndex = 120, + kX86InstIdMovntsd_ExtendedIndex = 121, + kX86InstIdMovntss_ExtendedIndex = 122, + kX86InstIdMovq_ExtendedIndex = 123, + kX86InstIdMovq2dq_ExtendedIndex = 124, kX86InstIdMovsB_ExtendedIndex = 16, - kX86InstIdMovsD_ExtendedIndex = 124, - kX86InstIdMovsQ_ExtendedIndex = 17, - kX86InstIdMovsW_ExtendedIndex = 125, - kX86InstIdMovsd_ExtendedIndex = 126, - kX86InstIdMovshdup_ExtendedIndex = 39, - kX86InstIdMovsldup_ExtendedIndex = 39, - kX86InstIdMovss_ExtendedIndex = 127, - kX86InstIdMovsx_ExtendedIndex = 128, - kX86InstIdMovsxd_ExtendedIndex = 129, - kX86InstIdMovupd_ExtendedIndex = 130, - kX86InstIdMovups_ExtendedIndex = 131, - kX86InstIdMovzx_ExtendedIndex = 128, + kX86InstIdMovsD_ExtendedIndex = 125, + kX86InstIdMovsQ_ExtendedIndex = 16, + kX86InstIdMovsW_ExtendedIndex = 126, + kX86InstIdMovsd_ExtendedIndex = 127, + kX86InstIdMovshdup_ExtendedIndex = 36, + kX86InstIdMovsldup_ExtendedIndex = 36, + kX86InstIdMovss_ExtendedIndex = 128, + kX86InstIdMovsx_ExtendedIndex = 129, + kX86InstIdMovsxd_ExtendedIndex = 130, + kX86InstIdMovupd_ExtendedIndex = 131, + kX86InstIdMovups_ExtendedIndex = 132, + kX86InstIdMovzx_ExtendedIndex = 129, kX86InstIdMpsadbw_ExtendedIndex = 4, - kX86InstIdMul_ExtendedIndex = 75, + kX86InstIdMul_ExtendedIndex = 73, kX86InstIdMulpd_ExtendedIndex = 3, kX86InstIdMulps_ExtendedIndex = 3, kX86InstIdMulsd_ExtendedIndex = 3, kX86InstIdMulss_ExtendedIndex = 3, - kX86InstIdMulx_ExtendedIndex = 132, + kX86InstIdMulx_ExtendedIndex = 133, kX86InstIdMwait_ExtendedIndex = 16, - kX86InstIdNeg_ExtendedIndex = 133, - kX86InstIdNop_ExtendedIndex = 51, - kX86InstIdNot_ExtendedIndex = 134, + kX86InstIdNeg_ExtendedIndex = 134, + kX86InstIdNop_ExtendedIndex = 48, + kX86InstIdNot_ExtendedIndex = 135, kX86InstIdOr_ExtendedIndex = 2, kX86InstIdOrpd_ExtendedIndex = 3, kX86InstIdOrps_ExtendedIndex = 3, - kX86InstIdPabsb_ExtendedIndex = 135, - kX86InstIdPabsd_ExtendedIndex = 135, - kX86InstIdPabsw_ExtendedIndex = 135, - kX86InstIdPackssdw_ExtendedIndex = 135, - kX86InstIdPacksswb_ExtendedIndex = 135, + kX86InstIdPabsb_ExtendedIndex = 136, + kX86InstIdPabsd_ExtendedIndex = 136, + kX86InstIdPabsw_ExtendedIndex = 136, + kX86InstIdPackssdw_ExtendedIndex = 136, + kX86InstIdPacksswb_ExtendedIndex = 136, kX86InstIdPackusdw_ExtendedIndex = 3, - kX86InstIdPackuswb_ExtendedIndex = 135, - kX86InstIdPaddb_ExtendedIndex = 135, - kX86InstIdPaddd_ExtendedIndex = 135, - kX86InstIdPaddq_ExtendedIndex = 135, - kX86InstIdPaddsb_ExtendedIndex = 135, - kX86InstIdPaddsw_ExtendedIndex = 135, - kX86InstIdPaddusb_ExtendedIndex = 135, - kX86InstIdPaddusw_ExtendedIndex = 135, - kX86InstIdPaddw_ExtendedIndex = 135, - kX86InstIdPalignr_ExtendedIndex = 136, - kX86InstIdPand_ExtendedIndex = 135, - kX86InstIdPandn_ExtendedIndex = 135, - kX86InstIdPause_ExtendedIndex = 51, - kX86InstIdPavgb_ExtendedIndex = 135, - kX86InstIdPavgw_ExtendedIndex = 135, + kX86InstIdPackuswb_ExtendedIndex = 136, + kX86InstIdPaddb_ExtendedIndex = 136, + kX86InstIdPaddd_ExtendedIndex = 136, + kX86InstIdPaddq_ExtendedIndex = 136, + kX86InstIdPaddsb_ExtendedIndex = 136, + kX86InstIdPaddsw_ExtendedIndex = 136, + kX86InstIdPaddusb_ExtendedIndex = 136, + kX86InstIdPaddusw_ExtendedIndex = 136, + kX86InstIdPaddw_ExtendedIndex = 136, + kX86InstIdPalignr_ExtendedIndex = 137, + kX86InstIdPand_ExtendedIndex = 136, + kX86InstIdPandn_ExtendedIndex = 136, + kX86InstIdPause_ExtendedIndex = 48, + kX86InstIdPavgb_ExtendedIndex = 136, + kX86InstIdPavgw_ExtendedIndex = 136, kX86InstIdPblendvb_ExtendedIndex = 7, kX86InstIdPblendw_ExtendedIndex = 4, kX86InstIdPclmulqdq_ExtendedIndex = 4, - kX86InstIdPcmpeqb_ExtendedIndex = 135, - kX86InstIdPcmpeqd_ExtendedIndex = 135, + kX86InstIdPcmpeqb_ExtendedIndex = 136, + kX86InstIdPcmpeqd_ExtendedIndex = 136, kX86InstIdPcmpeqq_ExtendedIndex = 3, - kX86InstIdPcmpeqw_ExtendedIndex = 135, + kX86InstIdPcmpeqw_ExtendedIndex = 136, kX86InstIdPcmpestri_ExtendedIndex = 4, kX86InstIdPcmpestrm_ExtendedIndex = 4, - kX86InstIdPcmpgtb_ExtendedIndex = 135, - kX86InstIdPcmpgtd_ExtendedIndex = 135, + kX86InstIdPcmpgtb_ExtendedIndex = 136, + kX86InstIdPcmpgtd_ExtendedIndex = 136, kX86InstIdPcmpgtq_ExtendedIndex = 3, - kX86InstIdPcmpgtw_ExtendedIndex = 135, + kX86InstIdPcmpgtw_ExtendedIndex = 136, kX86InstIdPcmpistri_ExtendedIndex = 4, kX86InstIdPcmpistrm_ExtendedIndex = 4, - kX86InstIdPdep_ExtendedIndex = 132, - kX86InstIdPext_ExtendedIndex = 132, - kX86InstIdPextrb_ExtendedIndex = 137, - kX86InstIdPextrd_ExtendedIndex = 138, - kX86InstIdPextrq_ExtendedIndex = 139, - kX86InstIdPextrw_ExtendedIndex = 140, - kX86InstIdPf2id_ExtendedIndex = 141, - kX86InstIdPf2iw_ExtendedIndex = 141, - kX86InstIdPfacc_ExtendedIndex = 141, - kX86InstIdPfadd_ExtendedIndex = 141, - kX86InstIdPfcmpeq_ExtendedIndex = 141, - kX86InstIdPfcmpge_ExtendedIndex = 141, - kX86InstIdPfcmpgt_ExtendedIndex = 141, - kX86InstIdPfmax_ExtendedIndex = 141, - kX86InstIdPfmin_ExtendedIndex = 141, - kX86InstIdPfmul_ExtendedIndex = 141, - kX86InstIdPfnacc_ExtendedIndex = 141, - kX86InstIdPfpnacc_ExtendedIndex = 141, - kX86InstIdPfrcp_ExtendedIndex = 141, - kX86InstIdPfrcpit1_ExtendedIndex = 141, - kX86InstIdPfrcpit2_ExtendedIndex = 141, - kX86InstIdPfrsqit1_ExtendedIndex = 141, - kX86InstIdPfrsqrt_ExtendedIndex = 141, - kX86InstIdPfsub_ExtendedIndex = 141, - kX86InstIdPfsubr_ExtendedIndex = 141, - kX86InstIdPhaddd_ExtendedIndex = 135, - kX86InstIdPhaddsw_ExtendedIndex = 135, - kX86InstIdPhaddw_ExtendedIndex = 135, + kX86InstIdPdep_ExtendedIndex = 133, + kX86InstIdPext_ExtendedIndex = 133, + kX86InstIdPextrb_ExtendedIndex = 138, + kX86InstIdPextrd_ExtendedIndex = 139, + kX86InstIdPextrq_ExtendedIndex = 140, + kX86InstIdPextrw_ExtendedIndex = 141, + kX86InstIdPf2id_ExtendedIndex = 142, + kX86InstIdPf2iw_ExtendedIndex = 142, + kX86InstIdPfacc_ExtendedIndex = 142, + kX86InstIdPfadd_ExtendedIndex = 142, + kX86InstIdPfcmpeq_ExtendedIndex = 142, + kX86InstIdPfcmpge_ExtendedIndex = 142, + kX86InstIdPfcmpgt_ExtendedIndex = 142, + kX86InstIdPfmax_ExtendedIndex = 142, + kX86InstIdPfmin_ExtendedIndex = 142, + kX86InstIdPfmul_ExtendedIndex = 142, + kX86InstIdPfnacc_ExtendedIndex = 142, + kX86InstIdPfpnacc_ExtendedIndex = 142, + kX86InstIdPfrcp_ExtendedIndex = 142, + kX86InstIdPfrcpit1_ExtendedIndex = 142, + kX86InstIdPfrcpit2_ExtendedIndex = 142, + kX86InstIdPfrsqit1_ExtendedIndex = 142, + kX86InstIdPfrsqrt_ExtendedIndex = 142, + kX86InstIdPfsub_ExtendedIndex = 142, + kX86InstIdPfsubr_ExtendedIndex = 142, + kX86InstIdPhaddd_ExtendedIndex = 136, + kX86InstIdPhaddsw_ExtendedIndex = 136, + kX86InstIdPhaddw_ExtendedIndex = 136, kX86InstIdPhminposuw_ExtendedIndex = 3, - kX86InstIdPhsubd_ExtendedIndex = 135, - kX86InstIdPhsubsw_ExtendedIndex = 135, - kX86InstIdPhsubw_ExtendedIndex = 135, - kX86InstIdPi2fd_ExtendedIndex = 141, - kX86InstIdPi2fw_ExtendedIndex = 141, - kX86InstIdPinsrb_ExtendedIndex = 142, - kX86InstIdPinsrd_ExtendedIndex = 142, - kX86InstIdPinsrq_ExtendedIndex = 143, - kX86InstIdPinsrw_ExtendedIndex = 144, - kX86InstIdPmaddubsw_ExtendedIndex = 135, - kX86InstIdPmaddwd_ExtendedIndex = 135, + kX86InstIdPhsubd_ExtendedIndex = 136, + kX86InstIdPhsubsw_ExtendedIndex = 136, + kX86InstIdPhsubw_ExtendedIndex = 136, + kX86InstIdPi2fd_ExtendedIndex = 142, + kX86InstIdPi2fw_ExtendedIndex = 142, + kX86InstIdPinsrb_ExtendedIndex = 143, + kX86InstIdPinsrd_ExtendedIndex = 143, + kX86InstIdPinsrq_ExtendedIndex = 144, + kX86InstIdPinsrw_ExtendedIndex = 145, + kX86InstIdPmaddubsw_ExtendedIndex = 136, + kX86InstIdPmaddwd_ExtendedIndex = 136, kX86InstIdPmaxsb_ExtendedIndex = 3, kX86InstIdPmaxsd_ExtendedIndex = 3, - kX86InstIdPmaxsw_ExtendedIndex = 135, - kX86InstIdPmaxub_ExtendedIndex = 135, + kX86InstIdPmaxsw_ExtendedIndex = 136, + kX86InstIdPmaxub_ExtendedIndex = 136, kX86InstIdPmaxud_ExtendedIndex = 3, kX86InstIdPmaxuw_ExtendedIndex = 3, kX86InstIdPminsb_ExtendedIndex = 3, kX86InstIdPminsd_ExtendedIndex = 3, - kX86InstIdPminsw_ExtendedIndex = 135, - kX86InstIdPminub_ExtendedIndex = 135, + kX86InstIdPminsw_ExtendedIndex = 136, + kX86InstIdPminub_ExtendedIndex = 136, kX86InstIdPminud_ExtendedIndex = 3, kX86InstIdPminuw_ExtendedIndex = 3, - kX86InstIdPmovmskb_ExtendedIndex = 145, - kX86InstIdPmovsxbd_ExtendedIndex = 39, - kX86InstIdPmovsxbq_ExtendedIndex = 39, - kX86InstIdPmovsxbw_ExtendedIndex = 39, - kX86InstIdPmovsxdq_ExtendedIndex = 39, - kX86InstIdPmovsxwd_ExtendedIndex = 39, - kX86InstIdPmovsxwq_ExtendedIndex = 39, - kX86InstIdPmovzxbd_ExtendedIndex = 39, - kX86InstIdPmovzxbq_ExtendedIndex = 39, - kX86InstIdPmovzxbw_ExtendedIndex = 39, - kX86InstIdPmovzxdq_ExtendedIndex = 39, - kX86InstIdPmovzxwd_ExtendedIndex = 39, - kX86InstIdPmovzxwq_ExtendedIndex = 39, + kX86InstIdPmovmskb_ExtendedIndex = 146, + kX86InstIdPmovsxbd_ExtendedIndex = 36, + kX86InstIdPmovsxbq_ExtendedIndex = 36, + kX86InstIdPmovsxbw_ExtendedIndex = 36, + kX86InstIdPmovsxdq_ExtendedIndex = 36, + kX86InstIdPmovsxwd_ExtendedIndex = 36, + kX86InstIdPmovsxwq_ExtendedIndex = 36, + kX86InstIdPmovzxbd_ExtendedIndex = 36, + kX86InstIdPmovzxbq_ExtendedIndex = 36, + kX86InstIdPmovzxbw_ExtendedIndex = 36, + kX86InstIdPmovzxdq_ExtendedIndex = 36, + kX86InstIdPmovzxwd_ExtendedIndex = 36, + kX86InstIdPmovzxwq_ExtendedIndex = 36, kX86InstIdPmuldq_ExtendedIndex = 3, - kX86InstIdPmulhrsw_ExtendedIndex = 135, - kX86InstIdPmulhuw_ExtendedIndex = 135, - kX86InstIdPmulhw_ExtendedIndex = 135, + kX86InstIdPmulhrsw_ExtendedIndex = 136, + kX86InstIdPmulhuw_ExtendedIndex = 136, + kX86InstIdPmulhw_ExtendedIndex = 136, kX86InstIdPmulld_ExtendedIndex = 3, - kX86InstIdPmullw_ExtendedIndex = 135, - kX86InstIdPmuludq_ExtendedIndex = 135, - kX86InstIdPop_ExtendedIndex = 146, + kX86InstIdPmullw_ExtendedIndex = 136, + kX86InstIdPmuludq_ExtendedIndex = 136, + kX86InstIdPop_ExtendedIndex = 147, kX86InstIdPopa_ExtendedIndex = 16, kX86InstIdPopcnt_ExtendedIndex = 9, - kX86InstIdPopf_ExtendedIndex = 147, - kX86InstIdPor_ExtendedIndex = 135, - kX86InstIdPrefetch_ExtendedIndex = 148, - kX86InstIdPrefetch3dNow_ExtendedIndex = 20, - kX86InstIdPrefetchw3dNow_ExtendedIndex = 20, - kX86InstIdPsadbw_ExtendedIndex = 135, - kX86InstIdPshufb_ExtendedIndex = 135, - kX86InstIdPshufd_ExtendedIndex = 149, - kX86InstIdPshufhw_ExtendedIndex = 149, - kX86InstIdPshuflw_ExtendedIndex = 149, - kX86InstIdPshufw_ExtendedIndex = 150, - kX86InstIdPsignb_ExtendedIndex = 135, - kX86InstIdPsignd_ExtendedIndex = 135, - kX86InstIdPsignw_ExtendedIndex = 135, - kX86InstIdPslld_ExtendedIndex = 151, - kX86InstIdPslldq_ExtendedIndex = 152, - kX86InstIdPsllq_ExtendedIndex = 153, - kX86InstIdPsllw_ExtendedIndex = 154, - kX86InstIdPsrad_ExtendedIndex = 155, - kX86InstIdPsraw_ExtendedIndex = 156, - kX86InstIdPsrld_ExtendedIndex = 157, - kX86InstIdPsrldq_ExtendedIndex = 158, - kX86InstIdPsrlq_ExtendedIndex = 159, - kX86InstIdPsrlw_ExtendedIndex = 160, - kX86InstIdPsubb_ExtendedIndex = 135, - kX86InstIdPsubd_ExtendedIndex = 135, - kX86InstIdPsubq_ExtendedIndex = 135, - kX86InstIdPsubsb_ExtendedIndex = 135, - kX86InstIdPsubsw_ExtendedIndex = 135, - kX86InstIdPsubusb_ExtendedIndex = 135, - kX86InstIdPsubusw_ExtendedIndex = 135, - kX86InstIdPsubw_ExtendedIndex = 135, - kX86InstIdPswapd_ExtendedIndex = 141, - kX86InstIdPtest_ExtendedIndex = 37, - kX86InstIdPunpckhbw_ExtendedIndex = 135, - kX86InstIdPunpckhdq_ExtendedIndex = 135, + kX86InstIdPopf_ExtendedIndex = 148, + kX86InstIdPor_ExtendedIndex = 136, + kX86InstIdPrefetch_ExtendedIndex = 149, + kX86InstIdPrefetch3dNow_ExtendedIndex = 19, + kX86InstIdPrefetchw3dNow_ExtendedIndex = 19, + kX86InstIdPsadbw_ExtendedIndex = 136, + kX86InstIdPshufb_ExtendedIndex = 136, + kX86InstIdPshufd_ExtendedIndex = 150, + kX86InstIdPshufhw_ExtendedIndex = 150, + kX86InstIdPshuflw_ExtendedIndex = 150, + kX86InstIdPshufw_ExtendedIndex = 151, + kX86InstIdPsignb_ExtendedIndex = 136, + kX86InstIdPsignd_ExtendedIndex = 136, + kX86InstIdPsignw_ExtendedIndex = 136, + kX86InstIdPslld_ExtendedIndex = 152, + kX86InstIdPslldq_ExtendedIndex = 153, + kX86InstIdPsllq_ExtendedIndex = 154, + kX86InstIdPsllw_ExtendedIndex = 155, + kX86InstIdPsrad_ExtendedIndex = 156, + kX86InstIdPsraw_ExtendedIndex = 157, + kX86InstIdPsrld_ExtendedIndex = 158, + kX86InstIdPsrldq_ExtendedIndex = 159, + kX86InstIdPsrlq_ExtendedIndex = 160, + kX86InstIdPsrlw_ExtendedIndex = 161, + kX86InstIdPsubb_ExtendedIndex = 136, + kX86InstIdPsubd_ExtendedIndex = 136, + kX86InstIdPsubq_ExtendedIndex = 136, + kX86InstIdPsubsb_ExtendedIndex = 136, + kX86InstIdPsubsw_ExtendedIndex = 136, + kX86InstIdPsubusb_ExtendedIndex = 136, + kX86InstIdPsubusw_ExtendedIndex = 136, + kX86InstIdPsubw_ExtendedIndex = 136, + kX86InstIdPswapd_ExtendedIndex = 142, + kX86InstIdPtest_ExtendedIndex = 34, + kX86InstIdPunpckhbw_ExtendedIndex = 136, + kX86InstIdPunpckhdq_ExtendedIndex = 136, kX86InstIdPunpckhqdq_ExtendedIndex = 3, - kX86InstIdPunpckhwd_ExtendedIndex = 135, - kX86InstIdPunpcklbw_ExtendedIndex = 135, - kX86InstIdPunpckldq_ExtendedIndex = 135, + kX86InstIdPunpckhwd_ExtendedIndex = 136, + kX86InstIdPunpcklbw_ExtendedIndex = 136, + kX86InstIdPunpckldq_ExtendedIndex = 136, kX86InstIdPunpcklqdq_ExtendedIndex = 3, - kX86InstIdPunpcklwd_ExtendedIndex = 135, - kX86InstIdPush_ExtendedIndex = 161, + kX86InstIdPunpcklwd_ExtendedIndex = 136, + kX86InstIdPush_ExtendedIndex = 162, kX86InstIdPusha_ExtendedIndex = 16, - kX86InstIdPushf_ExtendedIndex = 162, - kX86InstIdPxor_ExtendedIndex = 135, - kX86InstIdRcl_ExtendedIndex = 163, - kX86InstIdRcpps_ExtendedIndex = 39, - kX86InstIdRcpss_ExtendedIndex = 44, - kX86InstIdRcr_ExtendedIndex = 163, - kX86InstIdRdfsbase_ExtendedIndex = 164, - kX86InstIdRdgsbase_ExtendedIndex = 164, - kX86InstIdRdrand_ExtendedIndex = 165, + kX86InstIdPushf_ExtendedIndex = 163, + kX86InstIdPxor_ExtendedIndex = 136, + kX86InstIdRcl_ExtendedIndex = 164, + kX86InstIdRcpps_ExtendedIndex = 36, + kX86InstIdRcpss_ExtendedIndex = 41, + kX86InstIdRcr_ExtendedIndex = 164, + kX86InstIdRdfsbase_ExtendedIndex = 165, + kX86InstIdRdgsbase_ExtendedIndex = 165, + kX86InstIdRdrand_ExtendedIndex = 166, kX86InstIdRdtsc_ExtendedIndex = 16, kX86InstIdRdtscp_ExtendedIndex = 16, - kX86InstIdRepLodsB_ExtendedIndex = 166, - kX86InstIdRepLodsD_ExtendedIndex = 166, + kX86InstIdRepLodsB_ExtendedIndex = 167, + kX86InstIdRepLodsD_ExtendedIndex = 167, kX86InstIdRepLodsQ_ExtendedIndex = 167, - kX86InstIdRepLodsW_ExtendedIndex = 166, + kX86InstIdRepLodsW_ExtendedIndex = 167, kX86InstIdRepMovsB_ExtendedIndex = 168, kX86InstIdRepMovsD_ExtendedIndex = 168, - kX86InstIdRepMovsQ_ExtendedIndex = 169, + kX86InstIdRepMovsQ_ExtendedIndex = 168, kX86InstIdRepMovsW_ExtendedIndex = 168, - kX86InstIdRepStosB_ExtendedIndex = 166, - kX86InstIdRepStosD_ExtendedIndex = 166, + kX86InstIdRepStosB_ExtendedIndex = 167, + kX86InstIdRepStosD_ExtendedIndex = 167, kX86InstIdRepStosQ_ExtendedIndex = 167, - kX86InstIdRepStosW_ExtendedIndex = 166, - kX86InstIdRepeCmpsB_ExtendedIndex = 170, - kX86InstIdRepeCmpsD_ExtendedIndex = 170, - kX86InstIdRepeCmpsQ_ExtendedIndex = 171, - kX86InstIdRepeCmpsW_ExtendedIndex = 170, - kX86InstIdRepeScasB_ExtendedIndex = 170, - kX86InstIdRepeScasD_ExtendedIndex = 170, - kX86InstIdRepeScasQ_ExtendedIndex = 171, - kX86InstIdRepeScasW_ExtendedIndex = 170, - kX86InstIdRepneCmpsB_ExtendedIndex = 170, - kX86InstIdRepneCmpsD_ExtendedIndex = 170, - kX86InstIdRepneCmpsQ_ExtendedIndex = 171, - kX86InstIdRepneCmpsW_ExtendedIndex = 170, - kX86InstIdRepneScasB_ExtendedIndex = 170, - kX86InstIdRepneScasD_ExtendedIndex = 170, - kX86InstIdRepneScasQ_ExtendedIndex = 171, - kX86InstIdRepneScasW_ExtendedIndex = 170, - kX86InstIdRet_ExtendedIndex = 172, - kX86InstIdRol_ExtendedIndex = 173, - kX86InstIdRor_ExtendedIndex = 173, - kX86InstIdRorx_ExtendedIndex = 174, - kX86InstIdRoundpd_ExtendedIndex = 149, - kX86InstIdRoundps_ExtendedIndex = 149, - kX86InstIdRoundsd_ExtendedIndex = 175, - kX86InstIdRoundss_ExtendedIndex = 176, - kX86InstIdRsqrtps_ExtendedIndex = 39, - kX86InstIdRsqrtss_ExtendedIndex = 44, - kX86InstIdSahf_ExtendedIndex = 177, - kX86InstIdSal_ExtendedIndex = 178, - kX86InstIdSar_ExtendedIndex = 178, - kX86InstIdSarx_ExtendedIndex = 179, + kX86InstIdRepStosW_ExtendedIndex = 167, + kX86InstIdRepeCmpsB_ExtendedIndex = 169, + kX86InstIdRepeCmpsD_ExtendedIndex = 169, + kX86InstIdRepeCmpsQ_ExtendedIndex = 169, + kX86InstIdRepeCmpsW_ExtendedIndex = 169, + kX86InstIdRepeScasB_ExtendedIndex = 169, + kX86InstIdRepeScasD_ExtendedIndex = 169, + kX86InstIdRepeScasQ_ExtendedIndex = 169, + kX86InstIdRepeScasW_ExtendedIndex = 169, + kX86InstIdRepneCmpsB_ExtendedIndex = 169, + kX86InstIdRepneCmpsD_ExtendedIndex = 169, + kX86InstIdRepneCmpsQ_ExtendedIndex = 169, + kX86InstIdRepneCmpsW_ExtendedIndex = 169, + kX86InstIdRepneScasB_ExtendedIndex = 169, + kX86InstIdRepneScasD_ExtendedIndex = 169, + kX86InstIdRepneScasQ_ExtendedIndex = 169, + kX86InstIdRepneScasW_ExtendedIndex = 169, + kX86InstIdRet_ExtendedIndex = 170, + kX86InstIdRol_ExtendedIndex = 171, + kX86InstIdRor_ExtendedIndex = 171, + kX86InstIdRorx_ExtendedIndex = 172, + kX86InstIdRoundpd_ExtendedIndex = 150, + kX86InstIdRoundps_ExtendedIndex = 150, + kX86InstIdRoundsd_ExtendedIndex = 173, + kX86InstIdRoundss_ExtendedIndex = 174, + kX86InstIdRsqrtps_ExtendedIndex = 36, + kX86InstIdRsqrtss_ExtendedIndex = 41, + kX86InstIdSahf_ExtendedIndex = 175, + kX86InstIdSal_ExtendedIndex = 176, + kX86InstIdSar_ExtendedIndex = 176, + kX86InstIdSarx_ExtendedIndex = 177, kX86InstIdSbb_ExtendedIndex = 1, - kX86InstIdScasB_ExtendedIndex = 31, - kX86InstIdScasD_ExtendedIndex = 31, - kX86InstIdScasQ_ExtendedIndex = 32, - kX86InstIdScasW_ExtendedIndex = 33, - kX86InstIdSeta_ExtendedIndex = 180, - kX86InstIdSetae_ExtendedIndex = 181, - kX86InstIdSetb_ExtendedIndex = 181, - kX86InstIdSetbe_ExtendedIndex = 180, - kX86InstIdSetc_ExtendedIndex = 181, - kX86InstIdSete_ExtendedIndex = 182, - kX86InstIdSetg_ExtendedIndex = 183, - kX86InstIdSetge_ExtendedIndex = 184, - kX86InstIdSetl_ExtendedIndex = 184, - kX86InstIdSetle_ExtendedIndex = 183, - kX86InstIdSetna_ExtendedIndex = 180, - kX86InstIdSetnae_ExtendedIndex = 181, - kX86InstIdSetnb_ExtendedIndex = 181, - kX86InstIdSetnbe_ExtendedIndex = 180, - kX86InstIdSetnc_ExtendedIndex = 181, - kX86InstIdSetne_ExtendedIndex = 182, - kX86InstIdSetng_ExtendedIndex = 183, - kX86InstIdSetnge_ExtendedIndex = 184, - kX86InstIdSetnl_ExtendedIndex = 184, - kX86InstIdSetnle_ExtendedIndex = 183, - kX86InstIdSetno_ExtendedIndex = 185, - kX86InstIdSetnp_ExtendedIndex = 186, - kX86InstIdSetns_ExtendedIndex = 187, - kX86InstIdSetnz_ExtendedIndex = 182, - kX86InstIdSeto_ExtendedIndex = 185, - kX86InstIdSetp_ExtendedIndex = 186, - kX86InstIdSetpe_ExtendedIndex = 186, - kX86InstIdSetpo_ExtendedIndex = 186, - kX86InstIdSets_ExtendedIndex = 187, - kX86InstIdSetz_ExtendedIndex = 182, - kX86InstIdSfence_ExtendedIndex = 92, - kX86InstIdShl_ExtendedIndex = 178, - kX86InstIdShld_ExtendedIndex = 188, - kX86InstIdShlx_ExtendedIndex = 179, - kX86InstIdShr_ExtendedIndex = 178, - kX86InstIdShrd_ExtendedIndex = 189, - kX86InstIdShrx_ExtendedIndex = 179, + kX86InstIdScasB_ExtendedIndex = 30, + kX86InstIdScasD_ExtendedIndex = 30, + kX86InstIdScasQ_ExtendedIndex = 30, + kX86InstIdScasW_ExtendedIndex = 31, + kX86InstIdSeta_ExtendedIndex = 178, + kX86InstIdSetae_ExtendedIndex = 179, + kX86InstIdSetb_ExtendedIndex = 179, + kX86InstIdSetbe_ExtendedIndex = 178, + kX86InstIdSetc_ExtendedIndex = 179, + kX86InstIdSete_ExtendedIndex = 180, + kX86InstIdSetg_ExtendedIndex = 181, + kX86InstIdSetge_ExtendedIndex = 182, + kX86InstIdSetl_ExtendedIndex = 182, + kX86InstIdSetle_ExtendedIndex = 181, + kX86InstIdSetna_ExtendedIndex = 178, + kX86InstIdSetnae_ExtendedIndex = 179, + kX86InstIdSetnb_ExtendedIndex = 179, + kX86InstIdSetnbe_ExtendedIndex = 178, + kX86InstIdSetnc_ExtendedIndex = 179, + kX86InstIdSetne_ExtendedIndex = 180, + kX86InstIdSetng_ExtendedIndex = 181, + kX86InstIdSetnge_ExtendedIndex = 182, + kX86InstIdSetnl_ExtendedIndex = 182, + kX86InstIdSetnle_ExtendedIndex = 181, + kX86InstIdSetno_ExtendedIndex = 183, + kX86InstIdSetnp_ExtendedIndex = 184, + kX86InstIdSetns_ExtendedIndex = 185, + kX86InstIdSetnz_ExtendedIndex = 180, + kX86InstIdSeto_ExtendedIndex = 183, + kX86InstIdSetp_ExtendedIndex = 184, + kX86InstIdSetpe_ExtendedIndex = 184, + kX86InstIdSetpo_ExtendedIndex = 184, + kX86InstIdSets_ExtendedIndex = 185, + kX86InstIdSetz_ExtendedIndex = 180, + kX86InstIdSfence_ExtendedIndex = 91, + kX86InstIdShl_ExtendedIndex = 176, + kX86InstIdShld_ExtendedIndex = 186, + kX86InstIdShlx_ExtendedIndex = 177, + kX86InstIdShr_ExtendedIndex = 176, + kX86InstIdShrd_ExtendedIndex = 187, + kX86InstIdShrx_ExtendedIndex = 177, kX86InstIdShufpd_ExtendedIndex = 4, kX86InstIdShufps_ExtendedIndex = 4, - kX86InstIdSqrtpd_ExtendedIndex = 39, - kX86InstIdSqrtps_ExtendedIndex = 39, - kX86InstIdSqrtsd_ExtendedIndex = 47, - kX86InstIdSqrtss_ExtendedIndex = 44, - kX86InstIdStc_ExtendedIndex = 18, - kX86InstIdStd_ExtendedIndex = 19, - kX86InstIdStmxcsr_ExtendedIndex = 20, - kX86InstIdStosB_ExtendedIndex = 190, - kX86InstIdStosD_ExtendedIndex = 190, - kX86InstIdStosQ_ExtendedIndex = 191, - kX86InstIdStosW_ExtendedIndex = 192, + kX86InstIdSqrtpd_ExtendedIndex = 36, + kX86InstIdSqrtps_ExtendedIndex = 36, + kX86InstIdSqrtsd_ExtendedIndex = 44, + kX86InstIdSqrtss_ExtendedIndex = 41, + kX86InstIdStc_ExtendedIndex = 17, + kX86InstIdStd_ExtendedIndex = 18, + kX86InstIdStmxcsr_ExtendedIndex = 19, + kX86InstIdStosB_ExtendedIndex = 188, + kX86InstIdStosD_ExtendedIndex = 188, + kX86InstIdStosQ_ExtendedIndex = 188, + kX86InstIdStosW_ExtendedIndex = 189, kX86InstIdSub_ExtendedIndex = 2, kX86InstIdSubpd_ExtendedIndex = 3, kX86InstIdSubps_ExtendedIndex = 3, kX86InstIdSubsd_ExtendedIndex = 3, kX86InstIdSubss_ExtendedIndex = 3, - kX86InstIdTest_ExtendedIndex = 193, - kX86InstIdTzcnt_ExtendedIndex = 194, - kX86InstIdUcomisd_ExtendedIndex = 37, - kX86InstIdUcomiss_ExtendedIndex = 37, - kX86InstIdUd2_ExtendedIndex = 51, + kX86InstIdTest_ExtendedIndex = 190, + kX86InstIdTzcnt_ExtendedIndex = 191, + kX86InstIdUcomisd_ExtendedIndex = 34, + kX86InstIdUcomiss_ExtendedIndex = 34, + kX86InstIdUd2_ExtendedIndex = 48, kX86InstIdUnpckhpd_ExtendedIndex = 3, kX86InstIdUnpckhps_ExtendedIndex = 3, kX86InstIdUnpcklpd_ExtendedIndex = 3, kX86InstIdUnpcklps_ExtendedIndex = 3, - kX86InstIdVaddpd_ExtendedIndex = 195, - kX86InstIdVaddps_ExtendedIndex = 195, - kX86InstIdVaddsd_ExtendedIndex = 195, - kX86InstIdVaddss_ExtendedIndex = 195, - kX86InstIdVaddsubpd_ExtendedIndex = 195, - kX86InstIdVaddsubps_ExtendedIndex = 195, - kX86InstIdVaesdec_ExtendedIndex = 196, - kX86InstIdVaesdeclast_ExtendedIndex = 196, - kX86InstIdVaesenc_ExtendedIndex = 196, - kX86InstIdVaesenclast_ExtendedIndex = 196, - kX86InstIdVaesimc_ExtendedIndex = 197, - kX86InstIdVaeskeygenassist_ExtendedIndex = 198, - kX86InstIdVandnpd_ExtendedIndex = 195, - kX86InstIdVandnps_ExtendedIndex = 195, - kX86InstIdVandpd_ExtendedIndex = 195, - kX86InstIdVandps_ExtendedIndex = 195, - kX86InstIdVblendpd_ExtendedIndex = 199, - kX86InstIdVblendps_ExtendedIndex = 199, - kX86InstIdVblendvpd_ExtendedIndex = 200, - kX86InstIdVblendvps_ExtendedIndex = 200, - kX86InstIdVbroadcastf128_ExtendedIndex = 201, - kX86InstIdVbroadcasti128_ExtendedIndex = 201, - kX86InstIdVbroadcastsd_ExtendedIndex = 202, - kX86InstIdVbroadcastss_ExtendedIndex = 202, - kX86InstIdVcmppd_ExtendedIndex = 199, - kX86InstIdVcmpps_ExtendedIndex = 199, - kX86InstIdVcmpsd_ExtendedIndex = 203, - kX86InstIdVcmpss_ExtendedIndex = 203, - kX86InstIdVcomisd_ExtendedIndex = 197, - kX86InstIdVcomiss_ExtendedIndex = 197, - kX86InstIdVcvtdq2pd_ExtendedIndex = 204, - kX86InstIdVcvtdq2ps_ExtendedIndex = 205, - kX86InstIdVcvtpd2dq_ExtendedIndex = 206, - kX86InstIdVcvtpd2ps_ExtendedIndex = 206, - kX86InstIdVcvtph2ps_ExtendedIndex = 204, - kX86InstIdVcvtps2dq_ExtendedIndex = 205, - kX86InstIdVcvtps2pd_ExtendedIndex = 204, - kX86InstIdVcvtps2ph_ExtendedIndex = 207, - kX86InstIdVcvtsd2si_ExtendedIndex = 208, - kX86InstIdVcvtsd2ss_ExtendedIndex = 196, - kX86InstIdVcvtsi2sd_ExtendedIndex = 209, - kX86InstIdVcvtsi2ss_ExtendedIndex = 209, - kX86InstIdVcvtss2sd_ExtendedIndex = 196, - kX86InstIdVcvtss2si_ExtendedIndex = 208, - kX86InstIdVcvttpd2dq_ExtendedIndex = 210, - kX86InstIdVcvttps2dq_ExtendedIndex = 205, - kX86InstIdVcvttsd2si_ExtendedIndex = 208, - kX86InstIdVcvttss2si_ExtendedIndex = 208, - kX86InstIdVdivpd_ExtendedIndex = 195, - kX86InstIdVdivps_ExtendedIndex = 195, - kX86InstIdVdivsd_ExtendedIndex = 196, - kX86InstIdVdivss_ExtendedIndex = 196, - kX86InstIdVdppd_ExtendedIndex = 203, - kX86InstIdVdpps_ExtendedIndex = 199, - kX86InstIdVextractf128_ExtendedIndex = 211, - kX86InstIdVextracti128_ExtendedIndex = 211, - kX86InstIdVextractps_ExtendedIndex = 212, - kX86InstIdVfmadd132pd_ExtendedIndex = 213, - kX86InstIdVfmadd132ps_ExtendedIndex = 195, - kX86InstIdVfmadd132sd_ExtendedIndex = 214, - kX86InstIdVfmadd132ss_ExtendedIndex = 196, - kX86InstIdVfmadd213pd_ExtendedIndex = 213, - kX86InstIdVfmadd213ps_ExtendedIndex = 195, - kX86InstIdVfmadd213sd_ExtendedIndex = 214, - kX86InstIdVfmadd213ss_ExtendedIndex = 196, - kX86InstIdVfmadd231pd_ExtendedIndex = 213, - kX86InstIdVfmadd231ps_ExtendedIndex = 195, - kX86InstIdVfmadd231sd_ExtendedIndex = 214, - kX86InstIdVfmadd231ss_ExtendedIndex = 196, - kX86InstIdVfmaddpd_ExtendedIndex = 215, - kX86InstIdVfmaddps_ExtendedIndex = 215, - kX86InstIdVfmaddsd_ExtendedIndex = 216, - kX86InstIdVfmaddss_ExtendedIndex = 216, - kX86InstIdVfmaddsub132pd_ExtendedIndex = 213, - kX86InstIdVfmaddsub132ps_ExtendedIndex = 195, - kX86InstIdVfmaddsub213pd_ExtendedIndex = 213, - kX86InstIdVfmaddsub213ps_ExtendedIndex = 195, - kX86InstIdVfmaddsub231pd_ExtendedIndex = 213, - kX86InstIdVfmaddsub231ps_ExtendedIndex = 195, - kX86InstIdVfmaddsubpd_ExtendedIndex = 215, - kX86InstIdVfmaddsubps_ExtendedIndex = 215, - kX86InstIdVfmsub132pd_ExtendedIndex = 213, - kX86InstIdVfmsub132ps_ExtendedIndex = 195, - kX86InstIdVfmsub132sd_ExtendedIndex = 214, - kX86InstIdVfmsub132ss_ExtendedIndex = 196, - kX86InstIdVfmsub213pd_ExtendedIndex = 213, - kX86InstIdVfmsub213ps_ExtendedIndex = 195, - kX86InstIdVfmsub213sd_ExtendedIndex = 214, - kX86InstIdVfmsub213ss_ExtendedIndex = 196, - kX86InstIdVfmsub231pd_ExtendedIndex = 213, - kX86InstIdVfmsub231ps_ExtendedIndex = 195, - kX86InstIdVfmsub231sd_ExtendedIndex = 214, - kX86InstIdVfmsub231ss_ExtendedIndex = 196, - kX86InstIdVfmsubadd132pd_ExtendedIndex = 213, - kX86InstIdVfmsubadd132ps_ExtendedIndex = 195, - kX86InstIdVfmsubadd213pd_ExtendedIndex = 213, - kX86InstIdVfmsubadd213ps_ExtendedIndex = 195, - kX86InstIdVfmsubadd231pd_ExtendedIndex = 213, - kX86InstIdVfmsubadd231ps_ExtendedIndex = 195, - kX86InstIdVfmsubaddpd_ExtendedIndex = 215, - kX86InstIdVfmsubaddps_ExtendedIndex = 215, - kX86InstIdVfmsubpd_ExtendedIndex = 215, - kX86InstIdVfmsubps_ExtendedIndex = 215, - kX86InstIdVfmsubsd_ExtendedIndex = 216, - kX86InstIdVfmsubss_ExtendedIndex = 216, - kX86InstIdVfnmadd132pd_ExtendedIndex = 213, - kX86InstIdVfnmadd132ps_ExtendedIndex = 195, - kX86InstIdVfnmadd132sd_ExtendedIndex = 214, - kX86InstIdVfnmadd132ss_ExtendedIndex = 196, - kX86InstIdVfnmadd213pd_ExtendedIndex = 213, - kX86InstIdVfnmadd213ps_ExtendedIndex = 195, - kX86InstIdVfnmadd213sd_ExtendedIndex = 214, - kX86InstIdVfnmadd213ss_ExtendedIndex = 196, - kX86InstIdVfnmadd231pd_ExtendedIndex = 213, - kX86InstIdVfnmadd231ps_ExtendedIndex = 195, - kX86InstIdVfnmadd231sd_ExtendedIndex = 214, - kX86InstIdVfnmadd231ss_ExtendedIndex = 196, - kX86InstIdVfnmaddpd_ExtendedIndex = 215, - kX86InstIdVfnmaddps_ExtendedIndex = 215, - kX86InstIdVfnmaddsd_ExtendedIndex = 216, - kX86InstIdVfnmaddss_ExtendedIndex = 216, - kX86InstIdVfnmsub132pd_ExtendedIndex = 213, - kX86InstIdVfnmsub132ps_ExtendedIndex = 195, - kX86InstIdVfnmsub132sd_ExtendedIndex = 214, - kX86InstIdVfnmsub132ss_ExtendedIndex = 196, - kX86InstIdVfnmsub213pd_ExtendedIndex = 213, - kX86InstIdVfnmsub213ps_ExtendedIndex = 195, - kX86InstIdVfnmsub213sd_ExtendedIndex = 214, - kX86InstIdVfnmsub213ss_ExtendedIndex = 196, - kX86InstIdVfnmsub231pd_ExtendedIndex = 213, - kX86InstIdVfnmsub231ps_ExtendedIndex = 195, - kX86InstIdVfnmsub231sd_ExtendedIndex = 214, - kX86InstIdVfnmsub231ss_ExtendedIndex = 196, - kX86InstIdVfnmsubpd_ExtendedIndex = 215, - kX86InstIdVfnmsubps_ExtendedIndex = 215, - kX86InstIdVfnmsubsd_ExtendedIndex = 216, - kX86InstIdVfnmsubss_ExtendedIndex = 216, - kX86InstIdVfrczpd_ExtendedIndex = 217, - kX86InstIdVfrczps_ExtendedIndex = 217, - kX86InstIdVfrczsd_ExtendedIndex = 218, - kX86InstIdVfrczss_ExtendedIndex = 218, - kX86InstIdVgatherdpd_ExtendedIndex = 219, - kX86InstIdVgatherdps_ExtendedIndex = 220, - kX86InstIdVgatherqpd_ExtendedIndex = 219, - kX86InstIdVgatherqps_ExtendedIndex = 221, - kX86InstIdVhaddpd_ExtendedIndex = 195, - kX86InstIdVhaddps_ExtendedIndex = 195, - kX86InstIdVhsubpd_ExtendedIndex = 195, - kX86InstIdVhsubps_ExtendedIndex = 195, - kX86InstIdVinsertf128_ExtendedIndex = 222, - kX86InstIdVinserti128_ExtendedIndex = 222, - kX86InstIdVinsertps_ExtendedIndex = 203, - kX86InstIdVlddqu_ExtendedIndex = 223, - kX86InstIdVldmxcsr_ExtendedIndex = 224, - kX86InstIdVmaskmovdqu_ExtendedIndex = 225, - kX86InstIdVmaskmovpd_ExtendedIndex = 226, - kX86InstIdVmaskmovps_ExtendedIndex = 227, - kX86InstIdVmaxpd_ExtendedIndex = 195, - kX86InstIdVmaxps_ExtendedIndex = 195, - kX86InstIdVmaxsd_ExtendedIndex = 195, - kX86InstIdVmaxss_ExtendedIndex = 195, - kX86InstIdVminpd_ExtendedIndex = 195, - kX86InstIdVminps_ExtendedIndex = 195, - kX86InstIdVminsd_ExtendedIndex = 195, - kX86InstIdVminss_ExtendedIndex = 195, - kX86InstIdVmovapd_ExtendedIndex = 228, - kX86InstIdVmovaps_ExtendedIndex = 229, - kX86InstIdVmovd_ExtendedIndex = 230, - kX86InstIdVmovddup_ExtendedIndex = 205, - kX86InstIdVmovdqa_ExtendedIndex = 231, - kX86InstIdVmovdqu_ExtendedIndex = 232, - kX86InstIdVmovhlps_ExtendedIndex = 233, - kX86InstIdVmovhpd_ExtendedIndex = 234, - kX86InstIdVmovhps_ExtendedIndex = 235, - kX86InstIdVmovlhps_ExtendedIndex = 233, - kX86InstIdVmovlpd_ExtendedIndex = 236, - kX86InstIdVmovlps_ExtendedIndex = 237, - kX86InstIdVmovmskpd_ExtendedIndex = 238, - kX86InstIdVmovmskps_ExtendedIndex = 238, - kX86InstIdVmovntdq_ExtendedIndex = 239, - kX86InstIdVmovntdqa_ExtendedIndex = 223, - kX86InstIdVmovntpd_ExtendedIndex = 240, - kX86InstIdVmovntps_ExtendedIndex = 240, - kX86InstIdVmovq_ExtendedIndex = 241, - kX86InstIdVmovsd_ExtendedIndex = 242, - kX86InstIdVmovshdup_ExtendedIndex = 205, - kX86InstIdVmovsldup_ExtendedIndex = 205, - kX86InstIdVmovss_ExtendedIndex = 243, - kX86InstIdVmovupd_ExtendedIndex = 244, - kX86InstIdVmovups_ExtendedIndex = 245, - kX86InstIdVmpsadbw_ExtendedIndex = 199, - kX86InstIdVmulpd_ExtendedIndex = 195, - kX86InstIdVmulps_ExtendedIndex = 195, - kX86InstIdVmulsd_ExtendedIndex = 195, - kX86InstIdVmulss_ExtendedIndex = 195, - kX86InstIdVorpd_ExtendedIndex = 195, - kX86InstIdVorps_ExtendedIndex = 195, - kX86InstIdVpabsb_ExtendedIndex = 205, - kX86InstIdVpabsd_ExtendedIndex = 205, - kX86InstIdVpabsw_ExtendedIndex = 205, - kX86InstIdVpackssdw_ExtendedIndex = 195, - kX86InstIdVpacksswb_ExtendedIndex = 195, - kX86InstIdVpackusdw_ExtendedIndex = 195, - kX86InstIdVpackuswb_ExtendedIndex = 195, - kX86InstIdVpaddb_ExtendedIndex = 195, - kX86InstIdVpaddd_ExtendedIndex = 195, - kX86InstIdVpaddq_ExtendedIndex = 195, - kX86InstIdVpaddsb_ExtendedIndex = 195, - kX86InstIdVpaddsw_ExtendedIndex = 195, - kX86InstIdVpaddusb_ExtendedIndex = 195, - kX86InstIdVpaddusw_ExtendedIndex = 195, - kX86InstIdVpaddw_ExtendedIndex = 195, - kX86InstIdVpalignr_ExtendedIndex = 199, - kX86InstIdVpand_ExtendedIndex = 195, - kX86InstIdVpandn_ExtendedIndex = 195, - kX86InstIdVpavgb_ExtendedIndex = 195, - kX86InstIdVpavgw_ExtendedIndex = 195, - kX86InstIdVpblendd_ExtendedIndex = 199, - kX86InstIdVpblendvb_ExtendedIndex = 246, - kX86InstIdVpblendw_ExtendedIndex = 199, - kX86InstIdVpbroadcastb_ExtendedIndex = 204, - kX86InstIdVpbroadcastd_ExtendedIndex = 204, - kX86InstIdVpbroadcastq_ExtendedIndex = 204, - kX86InstIdVpbroadcastw_ExtendedIndex = 204, - kX86InstIdVpclmulqdq_ExtendedIndex = 203, - kX86InstIdVpcmov_ExtendedIndex = 247, - kX86InstIdVpcmpeqb_ExtendedIndex = 195, - kX86InstIdVpcmpeqd_ExtendedIndex = 195, - kX86InstIdVpcmpeqq_ExtendedIndex = 195, - kX86InstIdVpcmpeqw_ExtendedIndex = 195, - kX86InstIdVpcmpestri_ExtendedIndex = 198, - kX86InstIdVpcmpestrm_ExtendedIndex = 198, - kX86InstIdVpcmpgtb_ExtendedIndex = 195, - kX86InstIdVpcmpgtd_ExtendedIndex = 195, - kX86InstIdVpcmpgtq_ExtendedIndex = 195, - kX86InstIdVpcmpgtw_ExtendedIndex = 195, - kX86InstIdVpcmpistri_ExtendedIndex = 198, - kX86InstIdVpcmpistrm_ExtendedIndex = 198, - kX86InstIdVpcomb_ExtendedIndex = 248, - kX86InstIdVpcomd_ExtendedIndex = 248, - kX86InstIdVpcomq_ExtendedIndex = 248, - kX86InstIdVpcomub_ExtendedIndex = 248, - kX86InstIdVpcomud_ExtendedIndex = 248, - kX86InstIdVpcomuq_ExtendedIndex = 248, - kX86InstIdVpcomuw_ExtendedIndex = 248, - kX86InstIdVpcomw_ExtendedIndex = 248, - kX86InstIdVperm2f128_ExtendedIndex = 249, - kX86InstIdVperm2i128_ExtendedIndex = 249, - kX86InstIdVpermd_ExtendedIndex = 250, - kX86InstIdVpermil2pd_ExtendedIndex = 251, - kX86InstIdVpermil2ps_ExtendedIndex = 251, - kX86InstIdVpermilpd_ExtendedIndex = 252, - kX86InstIdVpermilps_ExtendedIndex = 253, - kX86InstIdVpermpd_ExtendedIndex = 254, - kX86InstIdVpermps_ExtendedIndex = 250, - kX86InstIdVpermq_ExtendedIndex = 254, - kX86InstIdVpextrb_ExtendedIndex = 255, - kX86InstIdVpextrd_ExtendedIndex = 212, - kX86InstIdVpextrq_ExtendedIndex = 256, - kX86InstIdVpextrw_ExtendedIndex = 257, - kX86InstIdVpgatherdd_ExtendedIndex = 220, - kX86InstIdVpgatherdq_ExtendedIndex = 219, - kX86InstIdVpgatherqd_ExtendedIndex = 221, - kX86InstIdVpgatherqq_ExtendedIndex = 219, - kX86InstIdVphaddbd_ExtendedIndex = 218, - kX86InstIdVphaddbq_ExtendedIndex = 218, - kX86InstIdVphaddbw_ExtendedIndex = 218, - kX86InstIdVphaddd_ExtendedIndex = 195, - kX86InstIdVphadddq_ExtendedIndex = 218, - kX86InstIdVphaddsw_ExtendedIndex = 195, - kX86InstIdVphaddubd_ExtendedIndex = 218, - kX86InstIdVphaddubq_ExtendedIndex = 218, - kX86InstIdVphaddubw_ExtendedIndex = 218, - kX86InstIdVphaddudq_ExtendedIndex = 218, - kX86InstIdVphadduwd_ExtendedIndex = 218, - kX86InstIdVphadduwq_ExtendedIndex = 218, - kX86InstIdVphaddw_ExtendedIndex = 195, - kX86InstIdVphaddwd_ExtendedIndex = 218, - kX86InstIdVphaddwq_ExtendedIndex = 218, - kX86InstIdVphminposuw_ExtendedIndex = 197, - kX86InstIdVphsubbw_ExtendedIndex = 218, - kX86InstIdVphsubd_ExtendedIndex = 195, - kX86InstIdVphsubdq_ExtendedIndex = 218, - kX86InstIdVphsubsw_ExtendedIndex = 195, - kX86InstIdVphsubw_ExtendedIndex = 195, - kX86InstIdVphsubwd_ExtendedIndex = 218, - kX86InstIdVpinsrb_ExtendedIndex = 258, - kX86InstIdVpinsrd_ExtendedIndex = 259, - kX86InstIdVpinsrq_ExtendedIndex = 260, - kX86InstIdVpinsrw_ExtendedIndex = 261, - kX86InstIdVpmacsdd_ExtendedIndex = 262, - kX86InstIdVpmacsdqh_ExtendedIndex = 262, - kX86InstIdVpmacsdql_ExtendedIndex = 262, - kX86InstIdVpmacssdd_ExtendedIndex = 262, - kX86InstIdVpmacssdqh_ExtendedIndex = 262, - kX86InstIdVpmacssdql_ExtendedIndex = 262, - kX86InstIdVpmacsswd_ExtendedIndex = 262, - kX86InstIdVpmacssww_ExtendedIndex = 262, - kX86InstIdVpmacswd_ExtendedIndex = 262, - kX86InstIdVpmacsww_ExtendedIndex = 262, - kX86InstIdVpmadcsswd_ExtendedIndex = 262, - kX86InstIdVpmadcswd_ExtendedIndex = 262, - kX86InstIdVpmaddubsw_ExtendedIndex = 195, - kX86InstIdVpmaddwd_ExtendedIndex = 195, - kX86InstIdVpmaskmovd_ExtendedIndex = 263, - kX86InstIdVpmaskmovq_ExtendedIndex = 264, - kX86InstIdVpmaxsb_ExtendedIndex = 195, - kX86InstIdVpmaxsd_ExtendedIndex = 195, - kX86InstIdVpmaxsw_ExtendedIndex = 195, - kX86InstIdVpmaxub_ExtendedIndex = 195, - kX86InstIdVpmaxud_ExtendedIndex = 195, - kX86InstIdVpmaxuw_ExtendedIndex = 195, - kX86InstIdVpminsb_ExtendedIndex = 195, - kX86InstIdVpminsd_ExtendedIndex = 195, - kX86InstIdVpminsw_ExtendedIndex = 195, - kX86InstIdVpminub_ExtendedIndex = 195, - kX86InstIdVpminud_ExtendedIndex = 195, - kX86InstIdVpminuw_ExtendedIndex = 195, - kX86InstIdVpmovmskb_ExtendedIndex = 238, - kX86InstIdVpmovsxbd_ExtendedIndex = 205, - kX86InstIdVpmovsxbq_ExtendedIndex = 205, - kX86InstIdVpmovsxbw_ExtendedIndex = 205, - kX86InstIdVpmovsxdq_ExtendedIndex = 205, - kX86InstIdVpmovsxwd_ExtendedIndex = 205, - kX86InstIdVpmovsxwq_ExtendedIndex = 205, - kX86InstIdVpmovzxbd_ExtendedIndex = 205, - kX86InstIdVpmovzxbq_ExtendedIndex = 205, - kX86InstIdVpmovzxbw_ExtendedIndex = 205, - kX86InstIdVpmovzxdq_ExtendedIndex = 205, - kX86InstIdVpmovzxwd_ExtendedIndex = 205, - kX86InstIdVpmovzxwq_ExtendedIndex = 205, - kX86InstIdVpmuldq_ExtendedIndex = 195, - kX86InstIdVpmulhrsw_ExtendedIndex = 195, - kX86InstIdVpmulhuw_ExtendedIndex = 195, - kX86InstIdVpmulhw_ExtendedIndex = 195, - kX86InstIdVpmulld_ExtendedIndex = 195, - kX86InstIdVpmullw_ExtendedIndex = 195, - kX86InstIdVpmuludq_ExtendedIndex = 195, - kX86InstIdVpor_ExtendedIndex = 195, - kX86InstIdVpperm_ExtendedIndex = 265, - kX86InstIdVprotb_ExtendedIndex = 266, - kX86InstIdVprotd_ExtendedIndex = 267, - kX86InstIdVprotq_ExtendedIndex = 268, - kX86InstIdVprotw_ExtendedIndex = 269, - kX86InstIdVpsadbw_ExtendedIndex = 195, - kX86InstIdVpshab_ExtendedIndex = 270, - kX86InstIdVpshad_ExtendedIndex = 270, - kX86InstIdVpshaq_ExtendedIndex = 270, - kX86InstIdVpshaw_ExtendedIndex = 270, - kX86InstIdVpshlb_ExtendedIndex = 270, - kX86InstIdVpshld_ExtendedIndex = 270, - kX86InstIdVpshlq_ExtendedIndex = 270, - kX86InstIdVpshlw_ExtendedIndex = 270, - kX86InstIdVpshufb_ExtendedIndex = 195, - kX86InstIdVpshufd_ExtendedIndex = 271, - kX86InstIdVpshufhw_ExtendedIndex = 271, - kX86InstIdVpshuflw_ExtendedIndex = 271, - kX86InstIdVpsignb_ExtendedIndex = 195, - kX86InstIdVpsignd_ExtendedIndex = 195, - kX86InstIdVpsignw_ExtendedIndex = 195, - kX86InstIdVpslld_ExtendedIndex = 272, - kX86InstIdVpslldq_ExtendedIndex = 273, - kX86InstIdVpsllq_ExtendedIndex = 274, - kX86InstIdVpsllvd_ExtendedIndex = 195, - kX86InstIdVpsllvq_ExtendedIndex = 213, - kX86InstIdVpsllw_ExtendedIndex = 275, - kX86InstIdVpsrad_ExtendedIndex = 276, - kX86InstIdVpsravd_ExtendedIndex = 195, - kX86InstIdVpsraw_ExtendedIndex = 277, - kX86InstIdVpsrld_ExtendedIndex = 278, - kX86InstIdVpsrldq_ExtendedIndex = 273, - kX86InstIdVpsrlq_ExtendedIndex = 279, - kX86InstIdVpsrlvd_ExtendedIndex = 195, - kX86InstIdVpsrlvq_ExtendedIndex = 213, - kX86InstIdVpsrlw_ExtendedIndex = 280, - kX86InstIdVpsubb_ExtendedIndex = 195, - kX86InstIdVpsubd_ExtendedIndex = 195, - kX86InstIdVpsubq_ExtendedIndex = 195, - kX86InstIdVpsubsb_ExtendedIndex = 195, - kX86InstIdVpsubsw_ExtendedIndex = 195, - kX86InstIdVpsubusb_ExtendedIndex = 195, - kX86InstIdVpsubusw_ExtendedIndex = 195, - kX86InstIdVpsubw_ExtendedIndex = 195, - kX86InstIdVptest_ExtendedIndex = 281, - kX86InstIdVpunpckhbw_ExtendedIndex = 195, - kX86InstIdVpunpckhdq_ExtendedIndex = 195, - kX86InstIdVpunpckhqdq_ExtendedIndex = 195, - kX86InstIdVpunpckhwd_ExtendedIndex = 195, - kX86InstIdVpunpcklbw_ExtendedIndex = 195, - kX86InstIdVpunpckldq_ExtendedIndex = 195, - kX86InstIdVpunpcklqdq_ExtendedIndex = 195, - kX86InstIdVpunpcklwd_ExtendedIndex = 195, - kX86InstIdVpxor_ExtendedIndex = 195, - kX86InstIdVrcpps_ExtendedIndex = 205, - kX86InstIdVrcpss_ExtendedIndex = 196, - kX86InstIdVroundpd_ExtendedIndex = 271, - kX86InstIdVroundps_ExtendedIndex = 271, - kX86InstIdVroundsd_ExtendedIndex = 203, - kX86InstIdVroundss_ExtendedIndex = 203, - kX86InstIdVrsqrtps_ExtendedIndex = 205, - kX86InstIdVrsqrtss_ExtendedIndex = 196, - kX86InstIdVshufpd_ExtendedIndex = 199, - kX86InstIdVshufps_ExtendedIndex = 199, - kX86InstIdVsqrtpd_ExtendedIndex = 205, - kX86InstIdVsqrtps_ExtendedIndex = 205, - kX86InstIdVsqrtsd_ExtendedIndex = 196, - kX86InstIdVsqrtss_ExtendedIndex = 196, - kX86InstIdVstmxcsr_ExtendedIndex = 224, - kX86InstIdVsubpd_ExtendedIndex = 195, - kX86InstIdVsubps_ExtendedIndex = 195, - kX86InstIdVsubsd_ExtendedIndex = 196, - kX86InstIdVsubss_ExtendedIndex = 196, - kX86InstIdVtestpd_ExtendedIndex = 282, - kX86InstIdVtestps_ExtendedIndex = 282, - kX86InstIdVucomisd_ExtendedIndex = 283, - kX86InstIdVucomiss_ExtendedIndex = 283, - kX86InstIdVunpckhpd_ExtendedIndex = 195, - kX86InstIdVunpckhps_ExtendedIndex = 195, - kX86InstIdVunpcklpd_ExtendedIndex = 195, - kX86InstIdVunpcklps_ExtendedIndex = 195, - kX86InstIdVxorpd_ExtendedIndex = 195, - kX86InstIdVxorps_ExtendedIndex = 195, - kX86InstIdVzeroall_ExtendedIndex = 284, - kX86InstIdVzeroupper_ExtendedIndex = 284, - kX86InstIdWrfsbase_ExtendedIndex = 285, - kX86InstIdWrgsbase_ExtendedIndex = 285, - kX86InstIdXadd_ExtendedIndex = 286, - kX86InstIdXchg_ExtendedIndex = 287, + kX86InstIdVaddpd_ExtendedIndex = 192, + kX86InstIdVaddps_ExtendedIndex = 192, + kX86InstIdVaddsd_ExtendedIndex = 193, + kX86InstIdVaddss_ExtendedIndex = 193, + kX86InstIdVaddsubpd_ExtendedIndex = 192, + kX86InstIdVaddsubps_ExtendedIndex = 192, + kX86InstIdVaesdec_ExtendedIndex = 193, + kX86InstIdVaesdeclast_ExtendedIndex = 193, + kX86InstIdVaesenc_ExtendedIndex = 193, + kX86InstIdVaesenclast_ExtendedIndex = 193, + kX86InstIdVaesimc_ExtendedIndex = 194, + kX86InstIdVaeskeygenassist_ExtendedIndex = 195, + kX86InstIdVandnpd_ExtendedIndex = 192, + kX86InstIdVandnps_ExtendedIndex = 192, + kX86InstIdVandpd_ExtendedIndex = 192, + kX86InstIdVandps_ExtendedIndex = 192, + kX86InstIdVblendpd_ExtendedIndex = 196, + kX86InstIdVblendps_ExtendedIndex = 196, + kX86InstIdVblendvpd_ExtendedIndex = 197, + kX86InstIdVblendvps_ExtendedIndex = 197, + kX86InstIdVbroadcastf128_ExtendedIndex = 198, + kX86InstIdVbroadcasti128_ExtendedIndex = 198, + kX86InstIdVbroadcastsd_ExtendedIndex = 199, + kX86InstIdVbroadcastss_ExtendedIndex = 200, + kX86InstIdVcmppd_ExtendedIndex = 196, + kX86InstIdVcmpps_ExtendedIndex = 196, + kX86InstIdVcmpsd_ExtendedIndex = 201, + kX86InstIdVcmpss_ExtendedIndex = 201, + kX86InstIdVcomisd_ExtendedIndex = 194, + kX86InstIdVcomiss_ExtendedIndex = 194, + kX86InstIdVcvtdq2pd_ExtendedIndex = 202, + kX86InstIdVcvtdq2ps_ExtendedIndex = 203, + kX86InstIdVcvtpd2dq_ExtendedIndex = 204, + kX86InstIdVcvtpd2ps_ExtendedIndex = 204, + kX86InstIdVcvtph2ps_ExtendedIndex = 202, + kX86InstIdVcvtps2dq_ExtendedIndex = 203, + kX86InstIdVcvtps2pd_ExtendedIndex = 202, + kX86InstIdVcvtps2ph_ExtendedIndex = 205, + kX86InstIdVcvtsd2si_ExtendedIndex = 206, + kX86InstIdVcvtsd2ss_ExtendedIndex = 193, + kX86InstIdVcvtsi2sd_ExtendedIndex = 207, + kX86InstIdVcvtsi2ss_ExtendedIndex = 207, + kX86InstIdVcvtss2sd_ExtendedIndex = 193, + kX86InstIdVcvtss2si_ExtendedIndex = 206, + kX86InstIdVcvttpd2dq_ExtendedIndex = 208, + kX86InstIdVcvttps2dq_ExtendedIndex = 203, + kX86InstIdVcvttsd2si_ExtendedIndex = 206, + kX86InstIdVcvttss2si_ExtendedIndex = 206, + kX86InstIdVdivpd_ExtendedIndex = 192, + kX86InstIdVdivps_ExtendedIndex = 192, + kX86InstIdVdivsd_ExtendedIndex = 193, + kX86InstIdVdivss_ExtendedIndex = 193, + kX86InstIdVdppd_ExtendedIndex = 201, + kX86InstIdVdpps_ExtendedIndex = 196, + kX86InstIdVextractf128_ExtendedIndex = 209, + kX86InstIdVextracti128_ExtendedIndex = 209, + kX86InstIdVextractps_ExtendedIndex = 210, + kX86InstIdVfmadd132pd_ExtendedIndex = 192, + kX86InstIdVfmadd132ps_ExtendedIndex = 192, + kX86InstIdVfmadd132sd_ExtendedIndex = 193, + kX86InstIdVfmadd132ss_ExtendedIndex = 193, + kX86InstIdVfmadd213pd_ExtendedIndex = 192, + kX86InstIdVfmadd213ps_ExtendedIndex = 192, + kX86InstIdVfmadd213sd_ExtendedIndex = 193, + kX86InstIdVfmadd213ss_ExtendedIndex = 193, + kX86InstIdVfmadd231pd_ExtendedIndex = 192, + kX86InstIdVfmadd231ps_ExtendedIndex = 192, + kX86InstIdVfmadd231sd_ExtendedIndex = 193, + kX86InstIdVfmadd231ss_ExtendedIndex = 193, + kX86InstIdVfmaddpd_ExtendedIndex = 211, + kX86InstIdVfmaddps_ExtendedIndex = 211, + kX86InstIdVfmaddsd_ExtendedIndex = 212, + kX86InstIdVfmaddss_ExtendedIndex = 212, + kX86InstIdVfmaddsub132pd_ExtendedIndex = 192, + kX86InstIdVfmaddsub132ps_ExtendedIndex = 192, + kX86InstIdVfmaddsub213pd_ExtendedIndex = 192, + kX86InstIdVfmaddsub213ps_ExtendedIndex = 192, + kX86InstIdVfmaddsub231pd_ExtendedIndex = 192, + kX86InstIdVfmaddsub231ps_ExtendedIndex = 192, + kX86InstIdVfmaddsubpd_ExtendedIndex = 211, + kX86InstIdVfmaddsubps_ExtendedIndex = 211, + kX86InstIdVfmsub132pd_ExtendedIndex = 192, + kX86InstIdVfmsub132ps_ExtendedIndex = 192, + kX86InstIdVfmsub132sd_ExtendedIndex = 193, + kX86InstIdVfmsub132ss_ExtendedIndex = 193, + kX86InstIdVfmsub213pd_ExtendedIndex = 192, + kX86InstIdVfmsub213ps_ExtendedIndex = 192, + kX86InstIdVfmsub213sd_ExtendedIndex = 193, + kX86InstIdVfmsub213ss_ExtendedIndex = 193, + kX86InstIdVfmsub231pd_ExtendedIndex = 192, + kX86InstIdVfmsub231ps_ExtendedIndex = 192, + kX86InstIdVfmsub231sd_ExtendedIndex = 193, + kX86InstIdVfmsub231ss_ExtendedIndex = 193, + kX86InstIdVfmsubadd132pd_ExtendedIndex = 192, + kX86InstIdVfmsubadd132ps_ExtendedIndex = 192, + kX86InstIdVfmsubadd213pd_ExtendedIndex = 192, + kX86InstIdVfmsubadd213ps_ExtendedIndex = 192, + kX86InstIdVfmsubadd231pd_ExtendedIndex = 192, + kX86InstIdVfmsubadd231ps_ExtendedIndex = 192, + kX86InstIdVfmsubaddpd_ExtendedIndex = 211, + kX86InstIdVfmsubaddps_ExtendedIndex = 211, + kX86InstIdVfmsubpd_ExtendedIndex = 211, + kX86InstIdVfmsubps_ExtendedIndex = 211, + kX86InstIdVfmsubsd_ExtendedIndex = 212, + kX86InstIdVfmsubss_ExtendedIndex = 212, + kX86InstIdVfnmadd132pd_ExtendedIndex = 192, + kX86InstIdVfnmadd132ps_ExtendedIndex = 192, + kX86InstIdVfnmadd132sd_ExtendedIndex = 193, + kX86InstIdVfnmadd132ss_ExtendedIndex = 193, + kX86InstIdVfnmadd213pd_ExtendedIndex = 192, + kX86InstIdVfnmadd213ps_ExtendedIndex = 192, + kX86InstIdVfnmadd213sd_ExtendedIndex = 193, + kX86InstIdVfnmadd213ss_ExtendedIndex = 193, + kX86InstIdVfnmadd231pd_ExtendedIndex = 192, + kX86InstIdVfnmadd231ps_ExtendedIndex = 192, + kX86InstIdVfnmadd231sd_ExtendedIndex = 193, + kX86InstIdVfnmadd231ss_ExtendedIndex = 193, + kX86InstIdVfnmaddpd_ExtendedIndex = 211, + kX86InstIdVfnmaddps_ExtendedIndex = 211, + kX86InstIdVfnmaddsd_ExtendedIndex = 212, + kX86InstIdVfnmaddss_ExtendedIndex = 212, + kX86InstIdVfnmsub132pd_ExtendedIndex = 192, + kX86InstIdVfnmsub132ps_ExtendedIndex = 192, + kX86InstIdVfnmsub132sd_ExtendedIndex = 193, + kX86InstIdVfnmsub132ss_ExtendedIndex = 193, + kX86InstIdVfnmsub213pd_ExtendedIndex = 192, + kX86InstIdVfnmsub213ps_ExtendedIndex = 192, + kX86InstIdVfnmsub213sd_ExtendedIndex = 193, + kX86InstIdVfnmsub213ss_ExtendedIndex = 193, + kX86InstIdVfnmsub231pd_ExtendedIndex = 192, + kX86InstIdVfnmsub231ps_ExtendedIndex = 192, + kX86InstIdVfnmsub231sd_ExtendedIndex = 193, + kX86InstIdVfnmsub231ss_ExtendedIndex = 193, + kX86InstIdVfnmsubpd_ExtendedIndex = 211, + kX86InstIdVfnmsubps_ExtendedIndex = 211, + kX86InstIdVfnmsubsd_ExtendedIndex = 212, + kX86InstIdVfnmsubss_ExtendedIndex = 212, + kX86InstIdVfrczpd_ExtendedIndex = 213, + kX86InstIdVfrczps_ExtendedIndex = 213, + kX86InstIdVfrczsd_ExtendedIndex = 214, + kX86InstIdVfrczss_ExtendedIndex = 214, + kX86InstIdVgatherdpd_ExtendedIndex = 215, + kX86InstIdVgatherdps_ExtendedIndex = 215, + kX86InstIdVgatherqpd_ExtendedIndex = 215, + kX86InstIdVgatherqps_ExtendedIndex = 216, + kX86InstIdVhaddpd_ExtendedIndex = 192, + kX86InstIdVhaddps_ExtendedIndex = 192, + kX86InstIdVhsubpd_ExtendedIndex = 192, + kX86InstIdVhsubps_ExtendedIndex = 192, + kX86InstIdVinsertf128_ExtendedIndex = 217, + kX86InstIdVinserti128_ExtendedIndex = 217, + kX86InstIdVinsertps_ExtendedIndex = 201, + kX86InstIdVlddqu_ExtendedIndex = 218, + kX86InstIdVldmxcsr_ExtendedIndex = 219, + kX86InstIdVmaskmovdqu_ExtendedIndex = 220, + kX86InstIdVmaskmovpd_ExtendedIndex = 221, + kX86InstIdVmaskmovps_ExtendedIndex = 222, + kX86InstIdVmaxpd_ExtendedIndex = 192, + kX86InstIdVmaxps_ExtendedIndex = 192, + kX86InstIdVmaxsd_ExtendedIndex = 192, + kX86InstIdVmaxss_ExtendedIndex = 192, + kX86InstIdVminpd_ExtendedIndex = 192, + kX86InstIdVminps_ExtendedIndex = 192, + kX86InstIdVminsd_ExtendedIndex = 192, + kX86InstIdVminss_ExtendedIndex = 192, + kX86InstIdVmovapd_ExtendedIndex = 223, + kX86InstIdVmovaps_ExtendedIndex = 224, + kX86InstIdVmovd_ExtendedIndex = 225, + kX86InstIdVmovddup_ExtendedIndex = 203, + kX86InstIdVmovdqa_ExtendedIndex = 226, + kX86InstIdVmovdqu_ExtendedIndex = 227, + kX86InstIdVmovhlps_ExtendedIndex = 228, + kX86InstIdVmovhpd_ExtendedIndex = 229, + kX86InstIdVmovhps_ExtendedIndex = 230, + kX86InstIdVmovlhps_ExtendedIndex = 228, + kX86InstIdVmovlpd_ExtendedIndex = 231, + kX86InstIdVmovlps_ExtendedIndex = 232, + kX86InstIdVmovmskpd_ExtendedIndex = 233, + kX86InstIdVmovmskps_ExtendedIndex = 233, + kX86InstIdVmovntdq_ExtendedIndex = 234, + kX86InstIdVmovntdqa_ExtendedIndex = 218, + kX86InstIdVmovntpd_ExtendedIndex = 235, + kX86InstIdVmovntps_ExtendedIndex = 235, + kX86InstIdVmovq_ExtendedIndex = 225, + kX86InstIdVmovsd_ExtendedIndex = 236, + kX86InstIdVmovshdup_ExtendedIndex = 203, + kX86InstIdVmovsldup_ExtendedIndex = 203, + kX86InstIdVmovss_ExtendedIndex = 237, + kX86InstIdVmovupd_ExtendedIndex = 238, + kX86InstIdVmovups_ExtendedIndex = 239, + kX86InstIdVmpsadbw_ExtendedIndex = 196, + kX86InstIdVmulpd_ExtendedIndex = 192, + kX86InstIdVmulps_ExtendedIndex = 192, + kX86InstIdVmulsd_ExtendedIndex = 192, + kX86InstIdVmulss_ExtendedIndex = 192, + kX86InstIdVorpd_ExtendedIndex = 192, + kX86InstIdVorps_ExtendedIndex = 192, + kX86InstIdVpabsb_ExtendedIndex = 203, + kX86InstIdVpabsd_ExtendedIndex = 203, + kX86InstIdVpabsw_ExtendedIndex = 203, + kX86InstIdVpackssdw_ExtendedIndex = 192, + kX86InstIdVpacksswb_ExtendedIndex = 192, + kX86InstIdVpackusdw_ExtendedIndex = 192, + kX86InstIdVpackuswb_ExtendedIndex = 192, + kX86InstIdVpaddb_ExtendedIndex = 192, + kX86InstIdVpaddd_ExtendedIndex = 192, + kX86InstIdVpaddq_ExtendedIndex = 192, + kX86InstIdVpaddsb_ExtendedIndex = 192, + kX86InstIdVpaddsw_ExtendedIndex = 192, + kX86InstIdVpaddusb_ExtendedIndex = 192, + kX86InstIdVpaddusw_ExtendedIndex = 192, + kX86InstIdVpaddw_ExtendedIndex = 192, + kX86InstIdVpalignr_ExtendedIndex = 196, + kX86InstIdVpand_ExtendedIndex = 192, + kX86InstIdVpandn_ExtendedIndex = 192, + kX86InstIdVpavgb_ExtendedIndex = 192, + kX86InstIdVpavgw_ExtendedIndex = 192, + kX86InstIdVpblendd_ExtendedIndex = 196, + kX86InstIdVpblendvb_ExtendedIndex = 240, + kX86InstIdVpblendw_ExtendedIndex = 196, + kX86InstIdVpbroadcastb_ExtendedIndex = 202, + kX86InstIdVpbroadcastd_ExtendedIndex = 202, + kX86InstIdVpbroadcastq_ExtendedIndex = 202, + kX86InstIdVpbroadcastw_ExtendedIndex = 202, + kX86InstIdVpclmulqdq_ExtendedIndex = 201, + kX86InstIdVpcmov_ExtendedIndex = 241, + kX86InstIdVpcmpeqb_ExtendedIndex = 192, + kX86InstIdVpcmpeqd_ExtendedIndex = 192, + kX86InstIdVpcmpeqq_ExtendedIndex = 192, + kX86InstIdVpcmpeqw_ExtendedIndex = 192, + kX86InstIdVpcmpestri_ExtendedIndex = 195, + kX86InstIdVpcmpestrm_ExtendedIndex = 195, + kX86InstIdVpcmpgtb_ExtendedIndex = 192, + kX86InstIdVpcmpgtd_ExtendedIndex = 192, + kX86InstIdVpcmpgtq_ExtendedIndex = 192, + kX86InstIdVpcmpgtw_ExtendedIndex = 192, + kX86InstIdVpcmpistri_ExtendedIndex = 195, + kX86InstIdVpcmpistrm_ExtendedIndex = 195, + kX86InstIdVpcomb_ExtendedIndex = 242, + kX86InstIdVpcomd_ExtendedIndex = 242, + kX86InstIdVpcomq_ExtendedIndex = 242, + kX86InstIdVpcomub_ExtendedIndex = 242, + kX86InstIdVpcomud_ExtendedIndex = 242, + kX86InstIdVpcomuq_ExtendedIndex = 242, + kX86InstIdVpcomuw_ExtendedIndex = 242, + kX86InstIdVpcomw_ExtendedIndex = 242, + kX86InstIdVperm2f128_ExtendedIndex = 243, + kX86InstIdVperm2i128_ExtendedIndex = 243, + kX86InstIdVpermd_ExtendedIndex = 244, + kX86InstIdVpermil2pd_ExtendedIndex = 245, + kX86InstIdVpermil2ps_ExtendedIndex = 245, + kX86InstIdVpermilpd_ExtendedIndex = 246, + kX86InstIdVpermilps_ExtendedIndex = 247, + kX86InstIdVpermpd_ExtendedIndex = 248, + kX86InstIdVpermps_ExtendedIndex = 244, + kX86InstIdVpermq_ExtendedIndex = 248, + kX86InstIdVpextrb_ExtendedIndex = 249, + kX86InstIdVpextrd_ExtendedIndex = 210, + kX86InstIdVpextrq_ExtendedIndex = 250, + kX86InstIdVpextrw_ExtendedIndex = 251, + kX86InstIdVpgatherdd_ExtendedIndex = 215, + kX86InstIdVpgatherdq_ExtendedIndex = 215, + kX86InstIdVpgatherqd_ExtendedIndex = 216, + kX86InstIdVpgatherqq_ExtendedIndex = 215, + kX86InstIdVphaddbd_ExtendedIndex = 214, + kX86InstIdVphaddbq_ExtendedIndex = 214, + kX86InstIdVphaddbw_ExtendedIndex = 214, + kX86InstIdVphaddd_ExtendedIndex = 192, + kX86InstIdVphadddq_ExtendedIndex = 214, + kX86InstIdVphaddsw_ExtendedIndex = 192, + kX86InstIdVphaddubd_ExtendedIndex = 214, + kX86InstIdVphaddubq_ExtendedIndex = 214, + kX86InstIdVphaddubw_ExtendedIndex = 214, + kX86InstIdVphaddudq_ExtendedIndex = 214, + kX86InstIdVphadduwd_ExtendedIndex = 214, + kX86InstIdVphadduwq_ExtendedIndex = 214, + kX86InstIdVphaddw_ExtendedIndex = 192, + kX86InstIdVphaddwd_ExtendedIndex = 214, + kX86InstIdVphaddwq_ExtendedIndex = 214, + kX86InstIdVphminposuw_ExtendedIndex = 194, + kX86InstIdVphsubbw_ExtendedIndex = 214, + kX86InstIdVphsubd_ExtendedIndex = 192, + kX86InstIdVphsubdq_ExtendedIndex = 214, + kX86InstIdVphsubsw_ExtendedIndex = 192, + kX86InstIdVphsubw_ExtendedIndex = 192, + kX86InstIdVphsubwd_ExtendedIndex = 214, + kX86InstIdVpinsrb_ExtendedIndex = 252, + kX86InstIdVpinsrd_ExtendedIndex = 253, + kX86InstIdVpinsrq_ExtendedIndex = 254, + kX86InstIdVpinsrw_ExtendedIndex = 255, + kX86InstIdVpmacsdd_ExtendedIndex = 256, + kX86InstIdVpmacsdqh_ExtendedIndex = 256, + kX86InstIdVpmacsdql_ExtendedIndex = 256, + kX86InstIdVpmacssdd_ExtendedIndex = 256, + kX86InstIdVpmacssdqh_ExtendedIndex = 256, + kX86InstIdVpmacssdql_ExtendedIndex = 256, + kX86InstIdVpmacsswd_ExtendedIndex = 256, + kX86InstIdVpmacssww_ExtendedIndex = 256, + kX86InstIdVpmacswd_ExtendedIndex = 256, + kX86InstIdVpmacsww_ExtendedIndex = 256, + kX86InstIdVpmadcsswd_ExtendedIndex = 256, + kX86InstIdVpmadcswd_ExtendedIndex = 256, + kX86InstIdVpmaddubsw_ExtendedIndex = 192, + kX86InstIdVpmaddwd_ExtendedIndex = 192, + kX86InstIdVpmaskmovd_ExtendedIndex = 257, + kX86InstIdVpmaskmovq_ExtendedIndex = 257, + kX86InstIdVpmaxsb_ExtendedIndex = 192, + kX86InstIdVpmaxsd_ExtendedIndex = 192, + kX86InstIdVpmaxsw_ExtendedIndex = 192, + kX86InstIdVpmaxub_ExtendedIndex = 192, + kX86InstIdVpmaxud_ExtendedIndex = 192, + kX86InstIdVpmaxuw_ExtendedIndex = 192, + kX86InstIdVpminsb_ExtendedIndex = 192, + kX86InstIdVpminsd_ExtendedIndex = 192, + kX86InstIdVpminsw_ExtendedIndex = 192, + kX86InstIdVpminub_ExtendedIndex = 192, + kX86InstIdVpminud_ExtendedIndex = 192, + kX86InstIdVpminuw_ExtendedIndex = 192, + kX86InstIdVpmovmskb_ExtendedIndex = 233, + kX86InstIdVpmovsxbd_ExtendedIndex = 203, + kX86InstIdVpmovsxbq_ExtendedIndex = 203, + kX86InstIdVpmovsxbw_ExtendedIndex = 203, + kX86InstIdVpmovsxdq_ExtendedIndex = 203, + kX86InstIdVpmovsxwd_ExtendedIndex = 203, + kX86InstIdVpmovsxwq_ExtendedIndex = 203, + kX86InstIdVpmovzxbd_ExtendedIndex = 203, + kX86InstIdVpmovzxbq_ExtendedIndex = 203, + kX86InstIdVpmovzxbw_ExtendedIndex = 203, + kX86InstIdVpmovzxdq_ExtendedIndex = 203, + kX86InstIdVpmovzxwd_ExtendedIndex = 203, + kX86InstIdVpmovzxwq_ExtendedIndex = 203, + kX86InstIdVpmuldq_ExtendedIndex = 192, + kX86InstIdVpmulhrsw_ExtendedIndex = 192, + kX86InstIdVpmulhuw_ExtendedIndex = 192, + kX86InstIdVpmulhw_ExtendedIndex = 192, + kX86InstIdVpmulld_ExtendedIndex = 192, + kX86InstIdVpmullw_ExtendedIndex = 192, + kX86InstIdVpmuludq_ExtendedIndex = 192, + kX86InstIdVpor_ExtendedIndex = 192, + kX86InstIdVpperm_ExtendedIndex = 258, + kX86InstIdVprotb_ExtendedIndex = 259, + kX86InstIdVprotd_ExtendedIndex = 260, + kX86InstIdVprotq_ExtendedIndex = 261, + kX86InstIdVprotw_ExtendedIndex = 262, + kX86InstIdVpsadbw_ExtendedIndex = 192, + kX86InstIdVpshab_ExtendedIndex = 263, + kX86InstIdVpshad_ExtendedIndex = 263, + kX86InstIdVpshaq_ExtendedIndex = 263, + kX86InstIdVpshaw_ExtendedIndex = 263, + kX86InstIdVpshlb_ExtendedIndex = 263, + kX86InstIdVpshld_ExtendedIndex = 263, + kX86InstIdVpshlq_ExtendedIndex = 263, + kX86InstIdVpshlw_ExtendedIndex = 263, + kX86InstIdVpshufb_ExtendedIndex = 192, + kX86InstIdVpshufd_ExtendedIndex = 264, + kX86InstIdVpshufhw_ExtendedIndex = 264, + kX86InstIdVpshuflw_ExtendedIndex = 264, + kX86InstIdVpsignb_ExtendedIndex = 192, + kX86InstIdVpsignd_ExtendedIndex = 192, + kX86InstIdVpsignw_ExtendedIndex = 192, + kX86InstIdVpslld_ExtendedIndex = 265, + kX86InstIdVpslldq_ExtendedIndex = 266, + kX86InstIdVpsllq_ExtendedIndex = 267, + kX86InstIdVpsllvd_ExtendedIndex = 192, + kX86InstIdVpsllvq_ExtendedIndex = 192, + kX86InstIdVpsllw_ExtendedIndex = 268, + kX86InstIdVpsrad_ExtendedIndex = 269, + kX86InstIdVpsravd_ExtendedIndex = 192, + kX86InstIdVpsraw_ExtendedIndex = 270, + kX86InstIdVpsrld_ExtendedIndex = 271, + kX86InstIdVpsrldq_ExtendedIndex = 266, + kX86InstIdVpsrlq_ExtendedIndex = 272, + kX86InstIdVpsrlvd_ExtendedIndex = 192, + kX86InstIdVpsrlvq_ExtendedIndex = 192, + kX86InstIdVpsrlw_ExtendedIndex = 273, + kX86InstIdVpsubb_ExtendedIndex = 192, + kX86InstIdVpsubd_ExtendedIndex = 192, + kX86InstIdVpsubq_ExtendedIndex = 192, + kX86InstIdVpsubsb_ExtendedIndex = 192, + kX86InstIdVpsubsw_ExtendedIndex = 192, + kX86InstIdVpsubusb_ExtendedIndex = 192, + kX86InstIdVpsubusw_ExtendedIndex = 192, + kX86InstIdVpsubw_ExtendedIndex = 192, + kX86InstIdVptest_ExtendedIndex = 274, + kX86InstIdVpunpckhbw_ExtendedIndex = 192, + kX86InstIdVpunpckhdq_ExtendedIndex = 192, + kX86InstIdVpunpckhqdq_ExtendedIndex = 192, + kX86InstIdVpunpckhwd_ExtendedIndex = 192, + kX86InstIdVpunpcklbw_ExtendedIndex = 192, + kX86InstIdVpunpckldq_ExtendedIndex = 192, + kX86InstIdVpunpcklqdq_ExtendedIndex = 192, + kX86InstIdVpunpcklwd_ExtendedIndex = 192, + kX86InstIdVpxor_ExtendedIndex = 192, + kX86InstIdVrcpps_ExtendedIndex = 203, + kX86InstIdVrcpss_ExtendedIndex = 193, + kX86InstIdVroundpd_ExtendedIndex = 264, + kX86InstIdVroundps_ExtendedIndex = 264, + kX86InstIdVroundsd_ExtendedIndex = 201, + kX86InstIdVroundss_ExtendedIndex = 201, + kX86InstIdVrsqrtps_ExtendedIndex = 203, + kX86InstIdVrsqrtss_ExtendedIndex = 193, + kX86InstIdVshufpd_ExtendedIndex = 196, + kX86InstIdVshufps_ExtendedIndex = 196, + kX86InstIdVsqrtpd_ExtendedIndex = 203, + kX86InstIdVsqrtps_ExtendedIndex = 203, + kX86InstIdVsqrtsd_ExtendedIndex = 193, + kX86InstIdVsqrtss_ExtendedIndex = 193, + kX86InstIdVstmxcsr_ExtendedIndex = 219, + kX86InstIdVsubpd_ExtendedIndex = 192, + kX86InstIdVsubps_ExtendedIndex = 192, + kX86InstIdVsubsd_ExtendedIndex = 193, + kX86InstIdVsubss_ExtendedIndex = 193, + kX86InstIdVtestpd_ExtendedIndex = 275, + kX86InstIdVtestps_ExtendedIndex = 275, + kX86InstIdVucomisd_ExtendedIndex = 276, + kX86InstIdVucomiss_ExtendedIndex = 276, + kX86InstIdVunpckhpd_ExtendedIndex = 192, + kX86InstIdVunpckhps_ExtendedIndex = 192, + kX86InstIdVunpcklpd_ExtendedIndex = 192, + kX86InstIdVunpcklps_ExtendedIndex = 192, + kX86InstIdVxorpd_ExtendedIndex = 192, + kX86InstIdVxorps_ExtendedIndex = 192, + kX86InstIdVzeroall_ExtendedIndex = 277, + kX86InstIdVzeroupper_ExtendedIndex = 277, + kX86InstIdWrfsbase_ExtendedIndex = 278, + kX86InstIdWrgsbase_ExtendedIndex = 278, + kX86InstIdXadd_ExtendedIndex = 279, + kX86InstIdXchg_ExtendedIndex = 280, + kX86InstIdXgetbv_ExtendedIndex = 16, kX86InstIdXor_ExtendedIndex = 2, kX86InstIdXorpd_ExtendedIndex = 3, - kX86InstIdXorps_ExtendedIndex = 3 + kX86InstIdXorps_ExtendedIndex = 3, + kX86InstIdXrstor_ExtendedIndex = 281, + kX86InstIdXrstor64_ExtendedIndex = 281, + kX86InstIdXsave_ExtendedIndex = 281, + kX86InstIdXsave64_ExtendedIndex = 281, + kX86InstIdXsaveopt_ExtendedIndex = 281, + kX86InstIdXsaveopt64_ExtendedIndex = 281, + kX86InstIdXsetbv_ExtendedIndex = 16 }; // ${X86InstData:End} -// Instruction data. -// -// Please rerun tools/src-gendefs.js (by using node.js) to regenerate instruction -// names and extended info tables. +// Please run tools/src-gendefs.js (by using just node.js, without any dependencies) to regenerate the code above. const X86InstInfo _x86InstInfo[] = { - // Inst-Code | Inst-Name | Inst-Group | Inst-Flags | M | Op-Flags[0] | Op-Flags[1] | Op-Flags[2] | Op-Flags[2] | E-OSZAPCDX | OpCode[0] | OpCode[1] | - INST(kInstIdNone , "" , G(None) , F(None) , 0 , U , U , U , U , E(________) , U , U ), - INST(kX86InstIdAdc , "adc" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWWWX__) , O_000000(10,2) , U ), - INST(kX86InstIdAdd , "add" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWWWW__) , O_000000(00,0) , U ), - INST(kX86InstIdAddpd , "addpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(58,U) , U ), - INST(kX86InstIdAddps , "addps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(58,U) , U ), - INST(kX86InstIdAddsd , "addsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(58,U) , U ), - INST(kX86InstIdAddss , "addss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(58,U) , U ), - INST(kX86InstIdAddsubpd , "addsubpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(D0,U) , U ), - INST(kX86InstIdAddsubps , "addsubps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(D0,U) , U ), - INST(kX86InstIdAesdec , "aesdec" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DE,U) , U ), - INST(kX86InstIdAesdeclast , "aesdeclast" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DF,U) , U ), - INST(kX86InstIdAesenc , "aesenc" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DC,U) , U ), - INST(kX86InstIdAesenclast , "aesenclast" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DD,U) , U ), - INST(kX86InstIdAesimc , "aesimc" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DB,U) , U ), - INST(kX86InstIdAeskeygenassist , "aeskeygenassist" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(DF,U) , U ), - INST(kX86InstIdAnd , "and" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWUWW__) , O_000000(20,4) , U ), - INST(kX86InstIdAndn , "andn" , G(AvxRvm) , F(None) , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , E(WWWUUW__) , O_000F38(F2,U) , U ), - INST(kX86InstIdAndnpd , "andnpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(55,U) , U ), - INST(kX86InstIdAndnps , "andnps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(55,U) , U ), - INST(kX86InstIdAndpd , "andpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(54,U) , U ), - INST(kX86InstIdAndps , "andps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(54,U) , U ), - INST(kX86InstIdBextr , "bextr" , G(AvxRmv) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , E(WUWUUW__) , O_000F38(F7,U) , U ), - INST(kX86InstIdBlendpd , "blendpd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(0D,U) , U ), - INST(kX86InstIdBlendps , "blendps" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(0C,U) , U ), - INST(kX86InstIdBlendvpd , "blendvpd" , G(ExtRm) , F(None)|F(Special) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(15,U) , U ), - INST(kX86InstIdBlendvps , "blendvps" , G(ExtRm) , F(None)|F(Special) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(14,U) , U ), - INST(kX86InstIdBlsi , "blsi" , G(AvxVm) , F(None) , 0 , O(Gqd) , O(GqdMem) , U , U , E(WWWUUW__) , O_000F38(F3,3) , U ), - INST(kX86InstIdBlsmsk , "blsmsk" , G(AvxVm) , F(None) , 0 , O(Gqd) , O(GqdMem) , U , U , E(WWWUUW__) , O_000F38(F3,2) , U ), - INST(kX86InstIdBlsr , "blsr" , G(AvxVm) , F(None) , 0 , O(Gqd) , O(GqdMem) , U , U , E(WWWUUW__) , O_000F38(F3,1) , U ), - INST(kX86InstIdBsf , "bsf" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(UUWUUU__) , O_000F00(BC,U) , U ), - INST(kX86InstIdBsr , "bsr" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(UUWUUU__) , O_000F00(BD,U) , U ), - INST(kX86InstIdBswap , "bswap" , G(X86BSwap) , F(None) , 0 , O(Gqd) , U , U , U , E(________) , O_000F00(C8,U) , U ), - INST(kX86InstIdBt , "bt" , G(X86BTest) , F(Test) , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , E(UU_UUW__) , O_000F00(A3,U) , O_000F00(BA,4) ), - INST(kX86InstIdBtc , "btc" , G(X86BTest) , F(Lock) , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , E(UU_UUW__) , O_000F00(BB,U) , O_000F00(BA,7) ), - INST(kX86InstIdBtr , "btr" , G(X86BTest) , F(Lock) , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , E(UU_UUW__) , O_000F00(B3,U) , O_000F00(BA,6) ), - INST(kX86InstIdBts , "bts" , G(X86BTest) , F(Lock) , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , E(UU_UUW__) , O_000F00(AB,U) , O_000F00(BA,5) ), - INST(kX86InstIdBzhi , "bzhi" , G(AvxRmv) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , E(WWWUUW__) , O_000F38(F5,U) , U ), - INST(kX86InstIdCall , "call" , G(X86Call) , F(Flow) , 0 , O(GqdMem)|O(Imm)|O(Label), U , U , U , E(________) , O_000000(FF,2) , O_000000(E8,U) ), - INST(kX86InstIdCbw , "cbw" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_660000(98,U) , U ), - INST(kX86InstIdCdq , "cdq" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(99,U) , U ), - INST(kX86InstIdCdqe , "cdqe" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(________) , O_000000(98,U) , U ), - INST(kX86InstIdClc , "clc" , G(X86Op) , F(None) , 0 , U , U , U , U , E(_____W__) , O_000000(F8,U) , U ), - INST(kX86InstIdCld , "cld" , G(X86Op) , F(None) , 0 , U , U , U , U , E(______W_) , O_000000(FC,U) , U ), - INST(kX86InstIdClflush , "clflush" , G(X86M) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,7) , U ), - INST(kX86InstIdCmc , "cmc" , G(X86Op) , F(None) , 0 , U , U , U , U , E(_____X__) , O_000000(F5,U) , U ), - INST(kX86InstIdCmova , "cmova" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R__R__) , O_000F00(47,U) , U ), - INST(kX86InstIdCmovae , "cmovae" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(43,U) , U ), - INST(kX86InstIdCmovb , "cmovb" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(42,U) , U ), - INST(kX86InstIdCmovbe , "cmovbe" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R__R__) , O_000F00(46,U) , U ), - INST(kX86InstIdCmovc , "cmovc" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(42,U) , U ), - INST(kX86InstIdCmove , "cmove" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R_____) , O_000F00(44,U) , U ), - INST(kX86InstIdCmovg , "cmovg" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RRR_____) , O_000F00(4F,U) , U ), - INST(kX86InstIdCmovge , "cmovge" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RR______) , O_000F00(4D,U) , U ), - INST(kX86InstIdCmovl , "cmovl" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RR______) , O_000F00(4C,U) , U ), - INST(kX86InstIdCmovle , "cmovle" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RRR_____) , O_000F00(4E,U) , U ), - INST(kX86InstIdCmovna , "cmovna" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R__R__) , O_000F00(46,U) , U ), - INST(kX86InstIdCmovnae , "cmovnae" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(42,U) , U ), - INST(kX86InstIdCmovnb , "cmovnb" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(43,U) , U ), - INST(kX86InstIdCmovnbe , "cmovnbe" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R__R__) , O_000F00(47,U) , U ), - INST(kX86InstIdCmovnc , "cmovnc" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_____R__) , O_000F00(43,U) , U ), - INST(kX86InstIdCmovne , "cmovne" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R_____) , O_000F00(45,U) , U ), - INST(kX86InstIdCmovng , "cmovng" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RRR_____) , O_000F00(4E,U) , U ), - INST(kX86InstIdCmovnge , "cmovnge" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RR______) , O_000F00(4C,U) , U ), - INST(kX86InstIdCmovnl , "cmovnl" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RR______) , O_000F00(4D,U) , U ), - INST(kX86InstIdCmovnle , "cmovnle" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(RRR_____) , O_000F00(4F,U) , U ), - INST(kX86InstIdCmovno , "cmovno" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(R_______) , O_000F00(41,U) , U ), - INST(kX86InstIdCmovnp , "cmovnp" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(____R___) , O_000F00(4B,U) , U ), - INST(kX86InstIdCmovns , "cmovns" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_R______) , O_000F00(49,U) , U ), - INST(kX86InstIdCmovnz , "cmovnz" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R_____) , O_000F00(45,U) , U ), - INST(kX86InstIdCmovo , "cmovo" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(R_______) , O_000F00(40,U) , U ), - INST(kX86InstIdCmovp , "cmovp" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(____R___) , O_000F00(4A,U) , U ), - INST(kX86InstIdCmovpe , "cmovpe" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(____R___) , O_000F00(4A,U) , U ), - INST(kX86InstIdCmovpo , "cmovpo" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(____R___) , O_000F00(4B,U) , U ), - INST(kX86InstIdCmovs , "cmovs" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(_R______) , O_000F00(48,U) , U ), - INST(kX86InstIdCmovz , "cmovz" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(__R_____) , O_000F00(44,U) , U ), - INST(kX86InstIdCmp , "cmp" , G(X86Arith) , F(Test) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWWWW__) , O_000000(38,7) , U ), - INST(kX86InstIdCmppd , "cmppd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F00(C2,U) , U ), - INST(kX86InstIdCmpps , "cmpps" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_000F00(C2,U) , U ), - INST(kX86InstIdCmpsB , "cmps_b" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(A6,U) , U ), - INST(kX86InstIdCmpsD , "cmps_d" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(A7,U) , U ), - INST(kX86InstIdCmpsQ , "cmps_q" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(WWWWWWR_) , O_000000(A7,U) , U ), - INST(kX86InstIdCmpsW , "cmps_w" , G(X86Op_66H) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(A7,U) , U ), - INST(kX86InstIdCmpsd , "cmpsd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_F20F00(C2,U) , U ), - INST(kX86InstIdCmpss , "cmpss" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_F30F00(C2,U) , U ), - INST(kX86InstIdCmpxchg , "cmpxchg" , G(X86RmReg) , F(Lock)|F(Special) , 0 , U , U , U , U , E(WWWWWW__) , O_000F00(B0,U) , U ), - INST(kX86InstIdCmpxchg16b , "cmpxchg16b" , G(X86M) , F(None)|F(Special)|F(W), 0 , O(Mem) , U , U , U , E(__W_____) , O_000F00(C7,1) , U ), - INST(kX86InstIdCmpxchg8b , "cmpxchg8b" , G(X86M) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(__W_____) , O_000F00(C7,1) , U ), - INST(kX86InstIdComisd , "comisd" , G(ExtRm) , F(Test) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_660F00(2F,U) , U ), - INST(kX86InstIdComiss , "comiss" , G(ExtRm) , F(Test) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_000F00(2F,U) , U ), - INST(kX86InstIdCpuid , "cpuid" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000F00(A2,U) , U ), - INST(kX86InstIdCqo , "cqo" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(________) , O_000000(99,U) , U ), - INST(kX86InstIdCrc32 , "crc32" , G(ExtCrc) , F(None) , 0 , O(Gqd) , O(GqdwbMem) , U , U , E(________) , O_F20F38(F0,U) , U ), - INST(kX86InstIdCvtdq2pd , "cvtdq2pd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(E6,U) , U ), - INST(kX86InstIdCvtdq2ps , "cvtdq2ps" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5B,U) , U ), - INST(kX86InstIdCvtpd2dq , "cvtpd2dq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(E6,U) , U ), - INST(kX86InstIdCvtpd2pi , "cvtpd2pi" , G(ExtRm) , F(Move) , 8 , O(Mm) , O(XmmMem) , U , U , E(________) , O_660F00(2D,U) , U ), - INST(kX86InstIdCvtpd2ps , "cvtpd2ps" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5A,U) , U ), - INST(kX86InstIdCvtpi2pd , "cvtpi2pd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(MmMem) , U , U , E(________) , O_660F00(2A,U) , U ), - INST(kX86InstIdCvtpi2ps , "cvtpi2ps" , G(ExtRm) , F(Move) , 8 , O(Xmm) , O(MmMem) , U , U , E(________) , O_000F00(2A,U) , U ), - INST(kX86InstIdCvtps2dq , "cvtps2dq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5B,U) , U ), - INST(kX86InstIdCvtps2pd , "cvtps2pd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5A,U) , U ), - INST(kX86InstIdCvtps2pi , "cvtps2pi" , G(ExtRm) , F(Move) , 8 , O(Mm) , O(XmmMem) , U , U , E(________) , O_000F00(2D,U) , U ), - INST(kX86InstIdCvtsd2si , "cvtsd2si" , G(ExtRm_Q) , F(Move) , 8 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F20F00(2D,U) , U ), - INST(kX86InstIdCvtsd2ss , "cvtsd2ss" , G(ExtRm) , F(Move) , 4 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(5A,U) , U ), - INST(kX86InstIdCvtsi2sd , "cvtsi2sd" , G(ExtRm_Q) , F(Move) , 8 , O(Xmm) , O(GqdMem) , U , U , E(________) , O_F20F00(2A,U) , U ), - INST(kX86InstIdCvtsi2ss , "cvtsi2ss" , G(ExtRm_Q) , F(Move) , 4 , O(Xmm) , O(GqdMem) , U , U , E(________) , O_F30F00(2A,U) , U ), - INST(kX86InstIdCvtss2sd , "cvtss2sd" , G(ExtRm) , F(Move) , 8 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5A,U) , U ), - INST(kX86InstIdCvtss2si , "cvtss2si" , G(ExtRm_Q) , F(Move) , 8 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F30F00(2D,U) , U ), - INST(kX86InstIdCvttpd2dq , "cvttpd2dq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(E6,U) , U ), - INST(kX86InstIdCvttpd2pi , "cvttpd2pi" , G(ExtRm) , F(Move) , 8 , O(Mm) , O(XmmMem) , U , U , E(________) , O_660F00(2C,U) , U ), - INST(kX86InstIdCvttps2dq , "cvttps2dq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5B,U) , U ), - INST(kX86InstIdCvttps2pi , "cvttps2pi" , G(ExtRm) , F(Move) , 8 , O(Mm) , O(XmmMem) , U , U , E(________) , O_000F00(2C,U) , U ), - INST(kX86InstIdCvttsd2si , "cvttsd2si" , G(ExtRm_Q) , F(Move) , 8 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F20F00(2C,U) , U ), - INST(kX86InstIdCvttss2si , "cvttss2si" , G(ExtRm_Q) , F(Move) , 8 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F30F00(2C,U) , U ), - INST(kX86InstIdCwd , "cwd" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_660000(99,U) , U ), - INST(kX86InstIdCwde , "cwde" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(98,U) , U ), - INST(kX86InstIdDaa , "daa" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(UWWXWX__) , O_000000(27,U) , U ), - INST(kX86InstIdDas , "das" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(UWWXWX__) , O_000000(2F,U) , U ), - INST(kX86InstIdDec , "dec" , G(X86IncDec) , F(Lock) , 0 , O(GqdwbMem) , U , U , U , E(WWWWW___) , O_000000(FE,1) , O_000000(48,U) ), - INST(kX86InstIdDiv , "div" , G(X86Rm_B) , F(None)|F(Special) , 0 , U , U , U , U , E(UUUUUU__) , O_000000(F6,6) , U ), - INST(kX86InstIdDivpd , "divpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5E,U) , U ), - INST(kX86InstIdDivps , "divps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5E,U) , U ), - INST(kX86InstIdDivsd , "divsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(5E,U) , U ), - INST(kX86InstIdDivss , "divss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5E,U) , U ), - INST(kX86InstIdDppd , "dppd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(41,U) , U ), - INST(kX86InstIdDpps , "dpps" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(40,U) , U ), - INST(kX86InstIdEmms , "emms" , G(X86Op) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(77,U) , U ), - INST(kX86InstIdEnter , "enter" , G(X86Enter) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(C8,U) , U ), - INST(kX86InstIdExtractps , "extractps" , G(ExtExtract) , F(Move) , 8 , O(GqdMem) , O(Xmm) , U , U , E(________) , O_660F3A(17,U) , O_660F3A(17,U) ), - INST(kX86InstIdF2xm1 , "f2xm1" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F0,U) , U ), - INST(kX86InstIdFabs , "fabs" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E1,U) , U ), - INST(kX86InstIdFadd , "fadd" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(C0C0,0) , U ), - INST(kX86InstIdFaddp , "faddp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEC0,U) , U ), - INST(kX86InstIdFbld , "fbld" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DF,4) , U ), - INST(kX86InstIdFbstp , "fbstp" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DF,6) , U ), - INST(kX86InstIdFchs , "fchs" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E0,U) , U ), - INST(kX86InstIdFclex , "fclex" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_9B_X(DBE2,U) , U ), - INST(kX86InstIdFcmovb , "fcmovb" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(_____R__) , O_00_X(DAC0,U) , U ), - INST(kX86InstIdFcmovbe , "fcmovbe" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(__R__R__) , O_00_X(DAD0,U) , U ), - INST(kX86InstIdFcmove , "fcmove" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(__R_____) , O_00_X(DAC8,U) , U ), - INST(kX86InstIdFcmovnb , "fcmovnb" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(_____R__) , O_00_X(DBC0,U) , U ), - INST(kX86InstIdFcmovnbe , "fcmovnbe" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(__R__R__) , O_00_X(DBD0,U) , U ), - INST(kX86InstIdFcmovne , "fcmovne" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(__R_____) , O_00_X(DBC8,U) , U ), - INST(kX86InstIdFcmovnu , "fcmovnu" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(____R___) , O_00_X(DBD8,U) , U ), - INST(kX86InstIdFcmovu , "fcmovu" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(____R___) , O_00_X(DAD8,U) , U ), - INST(kX86InstIdFcom , "fcom" , G(FpuCom) , F(Fp) , 0 , O(Fp)|O(Mem) , O(Fp) , U , U , E(________) , O_00_X(D0D0,2) , U ), - INST(kX86InstIdFcomi , "fcomi" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(WWWWWW__) , O_00_X(DBF0,U) , U ), - INST(kX86InstIdFcomip , "fcomip" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(WWWWWW__) , O_00_X(DFF0,U) , U ), - INST(kX86InstIdFcomp , "fcomp" , G(FpuCom) , F(Fp) , 0 , O(Fp)|O(Mem) , O(Fp) , U , U , E(________) , O_00_X(D8D8,3) , U ), - INST(kX86InstIdFcompp , "fcompp" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(DED9,U) , U ), - INST(kX86InstIdFcos , "fcos" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FF,U) , U ), - INST(kX86InstIdFdecstp , "fdecstp" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F6,U) , U ), - INST(kX86InstIdFdiv , "fdiv" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(F0F8,6) , U ), - INST(kX86InstIdFdivp , "fdivp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEF8,U) , U ), - INST(kX86InstIdFdivr , "fdivr" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(F8F0,7) , U ), - INST(kX86InstIdFdivrp , "fdivrp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEF0,U) , U ), - INST(kX86InstIdFemms , "femms" , G(X86Op) , F(Fp) , 0 , U , U , U , U , E(________) , O_000F00(0E,U) , U ), - INST(kX86InstIdFfree , "ffree" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DDC0,U) , U ), - INST(kX86InstIdFiadd , "fiadd" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,0) , U ), - INST(kX86InstIdFicom , "ficom" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,2) , U ), - INST(kX86InstIdFicomp , "ficomp" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,3) , U ), - INST(kX86InstIdFidiv , "fidiv" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,6) , U ), - INST(kX86InstIdFidivr , "fidivr" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,7) , U ), - INST(kX86InstIdFild , "fild" , G(FpuM) , F(Fp)|F(Mem2_4_8) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DB,0) , O_000000(DF,5) ), - INST(kX86InstIdFimul , "fimul" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,1) , U ), - INST(kX86InstIdFincstp , "fincstp" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F7,U) , U ), - INST(kX86InstIdFinit , "finit" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_9B_X(DBE3,U) , U ), - INST(kX86InstIdFist , "fist" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DB,2) , U ), - INST(kX86InstIdFistp , "fistp" , G(FpuM) , F(Fp)|F(Mem2_4_8) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DB,3) , O_000000(DF,7) ), - INST(kX86InstIdFisttp , "fisttp" , G(FpuM) , F(Fp)|F(Mem2_4_8) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DB,1) , O_000000(DD,1) ), - INST(kX86InstIdFisub , "fisub" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,4) , U ), - INST(kX86InstIdFisubr , "fisubr" , G(FpuM) , F(Fp)|F(Mem2_4) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DA,5) , U ), - INST(kX86InstIdFld , "fld" , G(FpuFldFst) , F(Fp)|F(Mem4_8_10) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,0) , O_000000(DB,5) ), - INST(kX86InstIdFld1 , "fld1" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E8,U) , U ), - INST(kX86InstIdFldcw , "fldcw" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,5) , U ), - INST(kX86InstIdFldenv , "fldenv" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,4) , U ), - INST(kX86InstIdFldl2e , "fldl2e" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9EA,U) , U ), - INST(kX86InstIdFldl2t , "fldl2t" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E9,U) , U ), - INST(kX86InstIdFldlg2 , "fldlg2" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9EC,U) , U ), - INST(kX86InstIdFldln2 , "fldln2" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9ED,U) , U ), - INST(kX86InstIdFldpi , "fldpi" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9EB,U) , U ), - INST(kX86InstIdFldz , "fldz" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9EE,U) , U ), - INST(kX86InstIdFmul , "fmul" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(C8C8,1) , U ), - INST(kX86InstIdFmulp , "fmulp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEC8,U) , U ), - INST(kX86InstIdFnclex , "fnclex" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(DBE2,U) , U ), - INST(kX86InstIdFninit , "fninit" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(DBE3,U) , U ), - INST(kX86InstIdFnop , "fnop" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9D0,U) , U ), - INST(kX86InstIdFnsave , "fnsave" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DD,6) , U ), - INST(kX86InstIdFnstcw , "fnstcw" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,7) , U ), - INST(kX86InstIdFnstenv , "fnstenv" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,6) , U ), - INST(kX86InstIdFnstsw , "fnstsw" , G(FpuStsw) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DD,7) , O_00_X(DFE0,U) ), - INST(kX86InstIdFpatan , "fpatan" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F3,U) , U ), - INST(kX86InstIdFprem , "fprem" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F8,U) , U ), - INST(kX86InstIdFprem1 , "fprem1" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F5,U) , U ), - INST(kX86InstIdFptan , "fptan" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F2,U) , U ), - INST(kX86InstIdFrndint , "frndint" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FC,U) , U ), - INST(kX86InstIdFrstor , "frstor" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000000(DD,4) , U ), - INST(kX86InstIdFsave , "fsave" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_9B0000(DD,6) , U ), - INST(kX86InstIdFscale , "fscale" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FD,U) , U ), - INST(kX86InstIdFsin , "fsin" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FE,U) , U ), - INST(kX86InstIdFsincos , "fsincos" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FB,U) , U ), - INST(kX86InstIdFsqrt , "fsqrt" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9FA,U) , U ), - INST(kX86InstIdFst , "fst" , G(FpuFldFst) , F(Fp)|F(Mem4_8) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,2) , U ), - INST(kX86InstIdFstcw , "fstcw" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_9B0000(D9,7) , U ), - INST(kX86InstIdFstenv , "fstenv" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_9B0000(D9,6) , U ), - INST(kX86InstIdFstp , "fstp" , G(FpuFldFst) , F(Fp)|F(Mem4_8_10) , 0 , O(Mem) , U , U , U , E(________) , O_000000(D9,3) , O_000000(DB,7) ), - INST(kX86InstIdFstsw , "fstsw" , G(FpuStsw) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_9B0000(DD,7) , O_9B_X(DFE0,U) ), - INST(kX86InstIdFsub , "fsub" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(E0E8,4) , U ), - INST(kX86InstIdFsubp , "fsubp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEE8,U) , U ), - INST(kX86InstIdFsubr , "fsubr" , G(FpuArith) , F(Fp)|F(Mem4_8) , 0 , O(FpMem) , O(Fp) , U , U , E(________) , O_00_X(E8E0,5) , U ), - INST(kX86InstIdFsubrp , "fsubrp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DEE0,U) , U ), - INST(kX86InstIdFtst , "ftst" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E4,U) , U ), - INST(kX86InstIdFucom , "fucom" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DDE0,U) , U ), - INST(kX86InstIdFucomi , "fucomi" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(WWWWWW__) , O_00_X(DBE8,U) , U ), - INST(kX86InstIdFucomip , "fucomip" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(WWWWWW__) , O_00_X(DFE8,U) , U ), - INST(kX86InstIdFucomp , "fucomp" , G(FpuRDef) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(DDE8,U) , U ), - INST(kX86InstIdFucompp , "fucompp" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(DAE9,U) , U ), - INST(kX86InstIdFwait , "fwait" , G(X86Op) , F(Fp) , 0 , U , U , U , U , E(________) , O_000000(DB,U) , U ), - INST(kX86InstIdFxam , "fxam" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9E5,U) , U ), - INST(kX86InstIdFxch , "fxch" , G(FpuR) , F(Fp) , 0 , O(Fp) , U , U , U , E(________) , O_00_X(D9C8,U) , U ), - INST(kX86InstIdFxrstor , "fxrstor" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,1) , U ), - INST(kX86InstIdFxsave , "fxsave" , G(X86M) , F(Fp) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,0) , U ), - INST(kX86InstIdFxtract , "fxtract" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F4,U) , U ), - INST(kX86InstIdFyl2x , "fyl2x" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F1,U) , U ), - INST(kX86InstIdFyl2xp1 , "fyl2xp1" , G(FpuOp) , F(Fp) , 0 , U , U , U , U , E(________) , O_00_X(D9F9,U) , U ), - INST(kX86InstIdHaddpd , "haddpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(7C,U) , U ), - INST(kX86InstIdHaddps , "haddps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(7C,U) , U ), - INST(kX86InstIdHsubpd , "hsubpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(7D,U) , U ), - INST(kX86InstIdHsubps , "hsubps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(7D,U) , U ), - INST(kX86InstIdIdiv , "idiv" , G(X86Rm_B) , F(None)|F(Special) , 0 , 0 , 0 , U , U , E(UUUUUU__) , O_000000(F6,7) , U ), - INST(kX86InstIdImul , "imul" , G(X86Imul) , F(None)|F(Special) , 0 , 0 , 0 , U , U , E(WUUUUW__) , U , U ), - INST(kX86InstIdInc , "inc" , G(X86IncDec) , F(Lock) , 0 , O(GqdwbMem) , U , U , U , E(WWWWW___) , O_000000(FE,0) , O_000000(40,U) ), - INST(kX86InstIdInsertps , "insertps" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(21,U) , U ), - INST(kX86InstIdInt , "int" , G(X86Int) , F(None) , 0 , U , U , U , U , E(_______W) , O_000000(CC,U) , U ), - INST(kX86InstIdJa , "ja" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R__R__) , O_000000(77,U) , U ), - INST(kX86InstIdJae , "jae" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(73,U) , U ), - INST(kX86InstIdJb , "jb" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(72,U) , U ), - INST(kX86InstIdJbe , "jbe" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R__R__) , O_000000(76,U) , U ), - INST(kX86InstIdJc , "jc" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(72,U) , U ), - INST(kX86InstIdJe , "je" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R_____) , O_000000(74,U) , U ), - INST(kX86InstIdJg , "jg" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RRR_____) , O_000000(7F,U) , U ), - INST(kX86InstIdJge , "jge" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RR______) , O_000000(7D,U) , U ), - INST(kX86InstIdJl , "jl" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RR______) , O_000000(7C,U) , U ), - INST(kX86InstIdJle , "jle" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RRR_____) , O_000000(7E,U) , U ), - INST(kX86InstIdJna , "jna" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R__R__) , O_000000(76,U) , U ), - INST(kX86InstIdJnae , "jnae" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(72,U) , U ), - INST(kX86InstIdJnb , "jnb" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(73,U) , U ), - INST(kX86InstIdJnbe , "jnbe" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R__R__) , O_000000(77,U) , U ), - INST(kX86InstIdJnc , "jnc" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_____R__) , O_000000(73,U) , U ), - INST(kX86InstIdJne , "jne" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R_____) , O_000000(75,U) , U ), - INST(kX86InstIdJng , "jng" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RRR_____) , O_000000(7E,U) , U ), - INST(kX86InstIdJnge , "jnge" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RR______) , O_000000(7C,U) , U ), - INST(kX86InstIdJnl , "jnl" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RR______) , O_000000(7D,U) , U ), - INST(kX86InstIdJnle , "jnle" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(RRR_____) , O_000000(7F,U) , U ), - INST(kX86InstIdJno , "jno" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(R_______) , O_000000(71,U) , U ), - INST(kX86InstIdJnp , "jnp" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(____R___) , O_000000(7B,U) , U ), - INST(kX86InstIdJns , "jns" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_R______) , O_000000(79,U) , U ), - INST(kX86InstIdJnz , "jnz" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R_____) , O_000000(75,U) , U ), - INST(kX86InstIdJo , "jo" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(R_______) , O_000000(70,U) , U ), - INST(kX86InstIdJp , "jp" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(____R___) , O_000000(7A,U) , U ), - INST(kX86InstIdJpe , "jpe" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(____R___) , O_000000(7A,U) , U ), - INST(kX86InstIdJpo , "jpo" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(____R___) , O_000000(7B,U) , U ), - INST(kX86InstIdJs , "js" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(_R______) , O_000000(78,U) , U ), - INST(kX86InstIdJz , "jz" , G(X86Jcc) , F(Flow) , 0 , O(Label) , U , U , U , E(__R_____) , O_000000(74,U) , U ), - INST(kX86InstIdJecxz , "jecxz" , G(X86Jecxz) , F(Flow)|F(Special) , 0 , O(Gqdw) , O(Label) , U , U , E(________) , O_000000(E3,U) , U ), - INST(kX86InstIdJmp , "jmp" , G(X86Jmp) , F(Flow) , 0 , O(Imm)|O(Label) , U , U , U , E(________) , O_000000(FF,4) , O_000000(E9,U) ), - INST(kX86InstIdLahf , "lahf" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(_RRRRR__) , O_000000(9F,U) , U ), - INST(kX86InstIdLddqu , "lddqu" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(Mem) , U , U , E(________) , O_F20F00(F0,U) , U ), - INST(kX86InstIdLdmxcsr , "ldmxcsr" , G(X86M) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,2) , U ), - INST(kX86InstIdLea , "lea" , G(X86Lea) , F(Move) , 0 , O(Gqd) , O(Mem) , U , U , E(________) , O_000000(8D,U) , U ), - INST(kX86InstIdLeave , "leave" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(C9,U) , U ), - INST(kX86InstIdLfence , "lfence" , G(ExtFence) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(AE,5) , U ), - INST(kX86InstIdLodsB , "lods_b" , G(X86Op) , F(Move)|F(Special) , 1 , U , U , U , U , E(______R_) , O_000000(AC,U) , U ), - INST(kX86InstIdLodsD , "lods_d" , G(X86Op) , F(Move)|F(Special) , 4 , U , U , U , U , E(______R_) , O_000000(AD,U) , U ), - INST(kX86InstIdLodsQ , "lods_q" , G(X86Op) , F(Move)|F(Special)|F(W), 8 , U , U , U , U , E(______R_) , O_000000(AD,U) , U ), - INST(kX86InstIdLodsW , "lods_w" , G(X86Op_66H) , F(Move)|F(Special) , 2 , U , U , U , U , E(______R_) , O_000000(AD,U) , U ), - INST(kX86InstIdLzcnt , "lzcnt" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(UUWUUW__) , O_F30F00(BD,U) , U ), - INST(kX86InstIdMaskmovdqu , "maskmovdqu" , G(ExtRm) , F(None)|F(Special) , 0 , O(Xmm) , O(Xmm) , U , U , E(________) , O_660F00(57,U) , U ), - INST(kX86InstIdMaskmovq , "maskmovq" , G(ExtRm) , F(None)|F(Special) , 0 , O(Mm) , O(Mm) , U , U , E(________) , O_000F00(F7,U) , U ), - INST(kX86InstIdMaxpd , "maxpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5F,U) , U ), - INST(kX86InstIdMaxps , "maxps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5F,U) , U ), - INST(kX86InstIdMaxsd , "maxsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(5F,U) , U ), - INST(kX86InstIdMaxss , "maxss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5F,U) , U ), - INST(kX86InstIdMfence , "mfence" , G(ExtFence) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(AE,6) , U ), - INST(kX86InstIdMinpd , "minpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5D,U) , U ), - INST(kX86InstIdMinps , "minps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5D,U) , U ), - INST(kX86InstIdMinsd , "minsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(5D,U) , U ), - INST(kX86InstIdMinss , "minss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5D,U) , U ), - INST(kX86InstIdMonitor , "monitor" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000F01(C8,U) , U ), - INST(kX86InstIdMov , "mov" , G(X86Mov) , F(Move) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(________) , U , U ), - INST(kX86InstIdMovPtr , "mov_ptr" , G(X86MovPtr) , F(Move)|F(Special) , 0 , O(Gqdwb) , O(Imm) , U , U , E(________) , O_000000(A0,U) , O_000000(A2,U) ), - INST(kX86InstIdMovapd , "movapd" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(28,U) , O_660F00(29,U) ), - INST(kX86InstIdMovaps , "movaps" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_000F00(28,U) , O_000F00(29,U) ), - INST(kX86InstIdMovbe , "movbe" , G(ExtMovBe) , F(Move) , 0 , O(GqdwMem) , O(GqdwMem) , U , U , E(________) , O_000F38(F0,U) , O_000F38(F1,U) ), - INST(kX86InstIdMovd , "movd" , G(ExtMovD) , F(Move) , 16, O(Gd)|O(MmXmmMem) , O(Gd)|O(MmXmmMem) , U , U , E(________) , O_000F00(6E,U) , O_000F00(7E,U) ), - INST(kX86InstIdMovddup , "movddup" , G(ExtMov) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(12,U) , U ), - INST(kX86InstIdMovdq2q , "movdq2q" , G(ExtMov) , F(Move) , 8 , O(Mm) , O(Xmm) , U , U , E(________) , O_F20F00(D6,U) , U ), - INST(kX86InstIdMovdqa , "movdqa" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(6F,U) , O_660F00(7F,U) ), - INST(kX86InstIdMovdqu , "movdqu" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_F30F00(6F,U) , O_F30F00(7F,U) ), - INST(kX86InstIdMovhlps , "movhlps" , G(ExtMov) , F(Move) , 8 , O(Xmm) , O(Xmm) , U , U , E(________) , O_000F00(12,U) , U ), - INST(kX86InstIdMovhpd , "movhpd" , G(ExtMov) , F(None) , 0 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(16,U) , O_660F00(17,U) ), - INST(kX86InstIdMovhps , "movhps" , G(ExtMov) , F(None) , 0 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_000F00(16,U) , O_000F00(17,U) ), - INST(kX86InstIdMovlhps , "movlhps" , G(ExtMov) , F(None) , 0 , O(Xmm) , O(Xmm) , U , U , E(________) , O_000F00(16,U) , U ), - INST(kX86InstIdMovlpd , "movlpd" , G(ExtMov) , F(Move) , 8 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(12,U) , O_660F00(13,U) ), - INST(kX86InstIdMovlps , "movlps" , G(ExtMov) , F(Move) , 8 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_000F00(12,U) , O_000F00(13,U) ), - INST(kX86InstIdMovmskpd , "movmskpd" , G(ExtMovNoRexW) , F(Move) , 8 , O(Gqd) , O(Xmm) , U , U , E(________) , O_660F00(50,U) , U ), - INST(kX86InstIdMovmskps , "movmskps" , G(ExtMovNoRexW) , F(Move) , 8 , O(Gqd) , O(Xmm) , U , U , E(________) , O_000F00(50,U) , U ), - INST(kX86InstIdMovntdq , "movntdq" , G(ExtMov) , F(Move) , 16, O(Mem) , O(Xmm) , U , U , E(________) , U , O_660F00(E7,U) ), - INST(kX86InstIdMovntdqa , "movntdqa" , G(ExtMov) , F(Move) , 16, O(Xmm) , O(Mem) , U , U , E(________) , O_660F38(2A,U) , U ), - INST(kX86InstIdMovnti , "movnti" , G(ExtMov) , F(Move) , 8 , O(Mem) , O(Gqd) , U , U , E(________) , U , O_000F00(C3,U) ), - INST(kX86InstIdMovntpd , "movntpd" , G(ExtMov) , F(Move) , 16, O(Mem) , O(Xmm) , U , U , E(________) , U , O_660F00(2B,U) ), - INST(kX86InstIdMovntps , "movntps" , G(ExtMov) , F(Move) , 16, O(Mem) , O(Xmm) , U , U , E(________) , U , O_000F00(2B,U) ), - INST(kX86InstIdMovntq , "movntq" , G(ExtMov) , F(Move) , 8 , O(Mem) , O(Mm) , U , U , E(________) , U , O_000F00(E7,U) ), - INST(kX86InstIdMovq , "movq" , G(ExtMovQ) , F(Move) , 16, O(Gq)|O(MmXmmMem) , O(Gq)|O(MmXmmMem) , U , U , E(________) , U , U ), - INST(kX86InstIdMovq2dq , "movq2dq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(Mm) , U , U , E(________) , O_F30F00(D6,U) , U ), - INST(kX86InstIdMovsB , "movs_b" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(A4,U) , U ), - INST(kX86InstIdMovsD , "movs_d" , G(X86Op) , F(Move)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(A5,U) , U ), - INST(kX86InstIdMovsQ , "movs_q" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(________) , O_000000(A5,U) , U ), - INST(kX86InstIdMovsW , "movs_w" , G(X86Op_66H) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(A5,U) , U ), - INST(kX86InstIdMovsd , "movsd" , G(ExtMov) , F(Move) |F(Z), 8 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_F20F00(10,U) , O_F20F00(11,U) ), - INST(kX86InstIdMovshdup , "movshdup" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(16,U) , U ), - INST(kX86InstIdMovsldup , "movsldup" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(12,U) , U ), - INST(kX86InstIdMovss , "movss" , G(ExtMov) , F(Move) |F(Z), 4 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_F30F00(10,U) , O_F30F00(11,U) ), - INST(kX86InstIdMovsx , "movsx" , G(X86MovSxZx) , F(Move) , 0 , O(Gqdw) , O(GwbMem) , U , U , E(________) , O_000F00(BE,U) , U ), - INST(kX86InstIdMovsxd , "movsxd" , G(X86MovSxd) , F(Move) , 0 , O(Gq) , O(GdMem) , U , U , E(________) , O_000000(63,U) , U ), - INST(kX86InstIdMovupd , "movupd" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(10,U) , O_660F00(11,U) ), - INST(kX86InstIdMovups , "movups" , G(ExtMov) , F(Move) , 16, O(XmmMem) , O(XmmMem) , U , U , E(________) , O_000F00(10,U) , O_000F00(11,U) ), - INST(kX86InstIdMovzx , "movzx" , G(X86MovSxZx) , F(Move) , 0 , O(Gqdw) , O(GwbMem) , U , U , E(________) , O_000F00(B6,U) , U ), - INST(kX86InstIdMpsadbw , "mpsadbw" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(42,U) , U ), - INST(kX86InstIdMul , "mul" , G(X86Rm_B) , F(None)|F(Special) , 0 , 0 , 0 , U , U , E(WUUUUW__) , O_000000(F6,4) , U ), - INST(kX86InstIdMulpd , "mulpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(59,U) , U ), - INST(kX86InstIdMulps , "mulps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(59,U) , U ), - INST(kX86InstIdMulsd , "mulsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(59,U) , U ), - INST(kX86InstIdMulss , "mulss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(59,U) , U ), - INST(kX86InstIdMulx , "mulx" , G(AvxRvm) , F(None) , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , E(________) , O_F20F38(F6,U) , U ), - INST(kX86InstIdMwait , "mwait" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000F01(C9,U) , U ), - INST(kX86InstIdNeg , "neg" , G(X86Rm_B) , F(Lock) , 0 , O(GqdwbMem) , U , U , U , E(WWWWWW__) , O_000000(F6,3) , U ), - INST(kX86InstIdNop , "nop" , G(X86Op) , F(None) , 0 , U , U , U , U , E(________) , O_000000(90,U) , U ), - INST(kX86InstIdNot , "not" , G(X86Rm_B) , F(Lock) , 0 , O(GqdwbMem) , U , U , U , E(________) , O_000000(F6,2) , U ), - INST(kX86InstIdOr , "or" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWUWW__) , O_000000(08,1) , U ), - INST(kX86InstIdOrpd , "orpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(56,U) , U ), - INST(kX86InstIdOrps , "orps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(56,U) , U ), - INST(kX86InstIdPabsb , "pabsb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(1C,U) , U ), - INST(kX86InstIdPabsd , "pabsd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(1E,U) , U ), - INST(kX86InstIdPabsw , "pabsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(1D,U) , U ), - INST(kX86InstIdPackssdw , "packssdw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(6B,U) , U ), - INST(kX86InstIdPacksswb , "packsswb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(63,U) , U ), - INST(kX86InstIdPackusdw , "packusdw" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(2B,U) , U ), - INST(kX86InstIdPackuswb , "packuswb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(67,U) , U ), - INST(kX86InstIdPaddb , "paddb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(FC,U) , U ), - INST(kX86InstIdPaddd , "paddd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(FE,U) , U ), - INST(kX86InstIdPaddq , "paddq" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(D4,U) , U ), - INST(kX86InstIdPaddsb , "paddsb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(EC,U) , U ), - INST(kX86InstIdPaddsw , "paddsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(ED,U) , U ), - INST(kX86InstIdPaddusb , "paddusb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DC,U) , U ), - INST(kX86InstIdPaddusw , "paddusw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DD,U) , U ), - INST(kX86InstIdPaddw , "paddw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(FD,U) , U ), - INST(kX86InstIdPalignr , "palignr" , G(ExtRmi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , O(Imm) , U , E(________) , O_000F3A(0F,U) , U ), - INST(kX86InstIdPand , "pand" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DB,U) , U ), - INST(kX86InstIdPandn , "pandn" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DF,U) , U ), - INST(kX86InstIdPause , "pause" , G(X86Op) , F(None) , 0 , U , U , U , U , E(________) , O_F30000(90,U) , U ), - INST(kX86InstIdPavgb , "pavgb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E0,U) , U ), - INST(kX86InstIdPavgw , "pavgw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E3,U) , U ), - INST(kX86InstIdPblendvb , "pblendvb" , G(ExtRm) , F(None)|F(Special) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(10,U) , U ), - INST(kX86InstIdPblendw , "pblendw" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(0E,U) , U ), - INST(kX86InstIdPclmulqdq , "pclmulqdq" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(44,U) , U ), - INST(kX86InstIdPcmpeqb , "pcmpeqb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(74,U) , U ), - INST(kX86InstIdPcmpeqd , "pcmpeqd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(76,U) , U ), - INST(kX86InstIdPcmpeqq , "pcmpeqq" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(29,U) , U ), - INST(kX86InstIdPcmpeqw , "pcmpeqw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(75,U) , U ), - INST(kX86InstIdPcmpestri , "pcmpestri" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(61,U) , U ), - INST(kX86InstIdPcmpestrm , "pcmpestrm" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(60,U) , U ), - INST(kX86InstIdPcmpgtb , "pcmpgtb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(64,U) , U ), - INST(kX86InstIdPcmpgtd , "pcmpgtd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(66,U) , U ), - INST(kX86InstIdPcmpgtq , "pcmpgtq" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(37,U) , U ), - INST(kX86InstIdPcmpgtw , "pcmpgtw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(65,U) , U ), - INST(kX86InstIdPcmpistri , "pcmpistri" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(63,U) , U ), - INST(kX86InstIdPcmpistrm , "pcmpistrm" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(62,U) , U ), - INST(kX86InstIdPdep , "pdep" , G(AvxRvm) , F(None) , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , E(________) , O_F20F38(F5,U) , U ), - INST(kX86InstIdPext , "pext" , G(AvxRvm) , F(None) , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , E(________) , O_F30F38(F5,U) , U ), - INST(kX86InstIdPextrb , "pextrb" , G(ExtExtract) , F(Move) , 8 , O(Gd)|O(Gb)|O(Mem) , O(Xmm) , U , U , E(________) , O_000F3A(14,U) , O_000F3A(14,U) ), - INST(kX86InstIdPextrd , "pextrd" , G(ExtExtract) , F(Move) , 8 , O(GdMem) , O(Xmm) , U , U , E(________) , O_000F3A(16,U) , O_000F3A(16,U) ), - INST(kX86InstIdPextrq , "pextrq" , G(ExtExtract) , F(Move) |F(W), 8 , O(GqdMem) , O(Xmm) , U , U , E(________) , O_000F3A(16,U) , O_000F3A(16,U) ), - INST(kX86InstIdPextrw , "pextrw" , G(ExtExtract) , F(Move) , 8 , O(GdMem) , O(MmXmm) , U , U , E(________) , O_000F00(C5,U) , O_000F3A(15,U) ), - INST(kX86InstIdPf2id , "pf2id" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(1D,U) , U ), - INST(kX86InstIdPf2iw , "pf2iw" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(1C,U) , U ), - INST(kX86InstIdPfacc , "pfacc" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(AE,U) , U ), - INST(kX86InstIdPfadd , "pfadd" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(9E,U) , U ), - INST(kX86InstIdPfcmpeq , "pfcmpeq" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(B0,U) , U ), - INST(kX86InstIdPfcmpge , "pfcmpge" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(90,U) , U ), - INST(kX86InstIdPfcmpgt , "pfcmpgt" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(A0,U) , U ), - INST(kX86InstIdPfmax , "pfmax" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(A4,U) , U ), - INST(kX86InstIdPfmin , "pfmin" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(94,U) , U ), - INST(kX86InstIdPfmul , "pfmul" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(B4,U) , U ), - INST(kX86InstIdPfnacc , "pfnacc" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(8A,U) , U ), - INST(kX86InstIdPfpnacc , "pfpnacc" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(8E,U) , U ), - INST(kX86InstIdPfrcp , "pfrcp" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(96,U) , U ), - INST(kX86InstIdPfrcpit1 , "pfrcpit1" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(A6,U) , U ), - INST(kX86InstIdPfrcpit2 , "pfrcpit2" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(B6,U) , U ), - INST(kX86InstIdPfrsqit1 , "pfrsqit1" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(A7,U) , U ), - INST(kX86InstIdPfrsqrt , "pfrsqrt" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(97,U) , U ), - INST(kX86InstIdPfsub , "pfsub" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(9A,U) , U ), - INST(kX86InstIdPfsubr , "pfsubr" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(AA,U) , U ), - INST(kX86InstIdPhaddd , "phaddd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(02,U) , U ), - INST(kX86InstIdPhaddsw , "phaddsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(03,U) , U ), - INST(kX86InstIdPhaddw , "phaddw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(01,U) , U ), - INST(kX86InstIdPhminposuw , "phminposuw" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(41,U) , U ), - INST(kX86InstIdPhsubd , "phsubd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(06,U) , U ), - INST(kX86InstIdPhsubsw , "phsubsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(07,U) , U ), - INST(kX86InstIdPhsubw , "phsubw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(05,U) , U ), - INST(kX86InstIdPi2fd , "pi2fd" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(0D,U) , U ), - INST(kX86InstIdPi2fw , "pi2fw" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(0C,U) , U ), - INST(kX86InstIdPinsrb , "pinsrb" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(GdMem) , O(Imm) , U , E(________) , O_660F3A(20,U) , U ), - INST(kX86InstIdPinsrd , "pinsrd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(GdMem) , O(Imm) , U , E(________) , O_660F3A(22,U) , U ), - INST(kX86InstIdPinsrq , "pinsrq" , G(ExtRmi) , F(None) |F(W), 0 , O(Xmm) , O(GqMem) , O(Imm) , U , E(________) , O_660F3A(22,U) , U ), - INST(kX86InstIdPinsrw , "pinsrw" , G(ExtRmi_P) , F(None) , 0 , O(MmXmm) , O(GdMem) , O(Imm) , U , E(________) , O_000F00(C4,U) , U ), - INST(kX86InstIdPmaddubsw , "pmaddubsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(04,U) , U ), - INST(kX86InstIdPmaddwd , "pmaddwd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(F5,U) , U ), - INST(kX86InstIdPmaxsb , "pmaxsb" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3C,U) , U ), - INST(kX86InstIdPmaxsd , "pmaxsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3D,U) , U ), - INST(kX86InstIdPmaxsw , "pmaxsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(EE,U) , U ), - INST(kX86InstIdPmaxub , "pmaxub" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DE,U) , U ), - INST(kX86InstIdPmaxud , "pmaxud" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3F,U) , U ), - INST(kX86InstIdPmaxuw , "pmaxuw" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3E,U) , U ), - INST(kX86InstIdPminsb , "pminsb" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(38,U) , U ), - INST(kX86InstIdPminsd , "pminsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(39,U) , U ), - INST(kX86InstIdPminsw , "pminsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(EA,U) , U ), - INST(kX86InstIdPminub , "pminub" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(DA,U) , U ), - INST(kX86InstIdPminud , "pminud" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3B,U) , U ), - INST(kX86InstIdPminuw , "pminuw" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(3A,U) , U ), - INST(kX86InstIdPmovmskb , "pmovmskb" , G(ExtRm_PQ) , F(Move) , 8 , O(Gqd) , O(MmXmm) , U , U , E(________) , O_000F00(D7,U) , U ), - INST(kX86InstIdPmovsxbd , "pmovsxbd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(21,U) , U ), - INST(kX86InstIdPmovsxbq , "pmovsxbq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(22,U) , U ), - INST(kX86InstIdPmovsxbw , "pmovsxbw" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(20,U) , U ), - INST(kX86InstIdPmovsxdq , "pmovsxdq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(25,U) , U ), - INST(kX86InstIdPmovsxwd , "pmovsxwd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(23,U) , U ), - INST(kX86InstIdPmovsxwq , "pmovsxwq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(24,U) , U ), - INST(kX86InstIdPmovzxbd , "pmovzxbd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(31,U) , U ), - INST(kX86InstIdPmovzxbq , "pmovzxbq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(32,U) , U ), - INST(kX86InstIdPmovzxbw , "pmovzxbw" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(30,U) , U ), - INST(kX86InstIdPmovzxdq , "pmovzxdq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(35,U) , U ), - INST(kX86InstIdPmovzxwd , "pmovzxwd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(33,U) , U ), - INST(kX86InstIdPmovzxwq , "pmovzxwq" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(34,U) , U ), - INST(kX86InstIdPmuldq , "pmuldq" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(28,U) , U ), - INST(kX86InstIdPmulhrsw , "pmulhrsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(0B,U) , U ), - INST(kX86InstIdPmulhuw , "pmulhuw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E4,U) , U ), - INST(kX86InstIdPmulhw , "pmulhw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E5,U) , U ), - INST(kX86InstIdPmulld , "pmulld" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(40,U) , U ), - INST(kX86InstIdPmullw , "pmullw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(D5,U) , U ), - INST(kX86InstIdPmuludq , "pmuludq" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(F4,U) , U ), - INST(kX86InstIdPop , "pop" , G(X86Pop) , F(None)|F(Special) , 0 , 0 , U , U , U , E(________) , O_000000(8F,0) , O_000000(58,U) ), - INST(kX86InstIdPopa , "popa" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(61,U) , U ), - INST(kX86InstIdPopcnt , "popcnt" , G(X86RegRm) , F(None) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(WWWWWW__) , O_F30F00(B8,U) , U ), - INST(kX86InstIdPopf , "popf" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWWW) , O_000000(9D,U) , U ), - INST(kX86InstIdPor , "por" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(EB,U) , U ), - INST(kX86InstIdPrefetch , "prefetch" , G(ExtPrefetch) , F(None) , 0 , O(Mem) , O(Imm) , U , U , E(________) , O_000F00(18,U) , U ), - INST(kX86InstIdPrefetch3dNow , "prefetch_3dnow" , G(X86M) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(0D,0) , U ), - INST(kX86InstIdPrefetchw3dNow , "prefetchw_3dnow" , G(X86M) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(0D,1) , U ), - INST(kX86InstIdPsadbw , "psadbw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(F6,U) , U ), - INST(kX86InstIdPshufb , "pshufb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(00,U) , U ), - INST(kX86InstIdPshufd , "pshufd" , G(ExtRmi) , F(Move) , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F00(70,U) , U ), - INST(kX86InstIdPshufhw , "pshufhw" , G(ExtRmi) , F(Move) , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_F30F00(70,U) , U ), - INST(kX86InstIdPshuflw , "pshuflw" , G(ExtRmi) , F(Move) , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_F20F00(70,U) , U ), - INST(kX86InstIdPshufw , "pshufw" , G(ExtRmi_P) , F(Move) , 8 , O(Mm) , O(MmMem) , O(Imm) , U , E(________) , O_000F00(70,U) , U ), - INST(kX86InstIdPsignb , "psignb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(08,U) , U ), - INST(kX86InstIdPsignd , "psignd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(0A,U) , U ), - INST(kX86InstIdPsignw , "psignw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F38(09,U) , U ), - INST(kX86InstIdPslld , "pslld" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(F2,U) , O_000F00(72,6) ), - INST(kX86InstIdPslldq , "pslldq" , G(ExtRmRi) , F(None) , 0 , O(Xmm) , O(Imm) , U , U , E(________) , U , O_660F00(73,7) ), - INST(kX86InstIdPsllq , "psllq" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(F3,U) , O_000F00(73,6) ), - INST(kX86InstIdPsllw , "psllw" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(F1,U) , O_000F00(71,6) ), - INST(kX86InstIdPsrad , "psrad" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(E2,U) , O_000F00(72,4) ), - INST(kX86InstIdPsraw , "psraw" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(E1,U) , O_000F00(71,4) ), - INST(kX86InstIdPsrld , "psrld" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(D2,U) , O_000F00(72,2) ), - INST(kX86InstIdPsrldq , "psrldq" , G(ExtRmRi) , F(None) , 0 , O(Xmm) , O(Imm) , U , U , E(________) , U , O_660F00(73,3) ), - INST(kX86InstIdPsrlq , "psrlq" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(D3,U) , O_000F00(73,2) ), - INST(kX86InstIdPsrlw , "psrlw" , G(ExtRmRi_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm) , U , U , E(________) , O_000F00(D1,U) , O_000F00(71,2) ), - INST(kX86InstIdPsubb , "psubb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(F8,U) , U ), - INST(kX86InstIdPsubd , "psubd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(FA,U) , U ), - INST(kX86InstIdPsubq , "psubq" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(FB,U) , U ), - INST(kX86InstIdPsubsb , "psubsb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E8,U) , U ), - INST(kX86InstIdPsubsw , "psubsw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(E9,U) , U ), - INST(kX86InstIdPsubusb , "psubusb" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(D8,U) , U ), - INST(kX86InstIdPsubusw , "psubusw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(D9,U) , U ), - INST(kX86InstIdPsubw , "psubw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(F9,U) , U ), - INST(kX86InstIdPswapd , "pswapd" , G(3dNow) , F(None) , 0 , O(Mm) , O(MmMem) , U , U , E(________) , O_000F0F(BB,U) , U ), - INST(kX86InstIdPtest , "ptest" , G(ExtRm) , F(Test) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_660F38(17,U) , U ), - INST(kX86InstIdPunpckhbw , "punpckhbw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(68,U) , U ), - INST(kX86InstIdPunpckhdq , "punpckhdq" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(6A,U) , U ), - INST(kX86InstIdPunpckhqdq , "punpckhqdq" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(6D,U) , U ), - INST(kX86InstIdPunpckhwd , "punpckhwd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(69,U) , U ), - INST(kX86InstIdPunpcklbw , "punpcklbw" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(60,U) , U ), - INST(kX86InstIdPunpckldq , "punpckldq" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(62,U) , U ), - INST(kX86InstIdPunpcklqdq , "punpcklqdq" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(6C,U) , U ), - INST(kX86InstIdPunpcklwd , "punpcklwd" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(61,U) , U ), - INST(kX86InstIdPush , "push" , G(X86Push) , F(None)|F(Special) , 0 , 0 , U , U , U , E(________) , O_000000(FF,6) , O_000000(50,U) ), - INST(kX86InstIdPusha , "pusha" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(60,U) , U ), - INST(kX86InstIdPushf , "pushf" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(RRRRRRRR) , O_000000(9C,U) , U ), - INST(kX86InstIdPxor , "pxor" , G(ExtRm_P) , F(None) , 0 , O(MmXmm) , O(MmXmmMem) , U , U , E(________) , O_000F00(EF,U) , U ), - INST(kX86InstIdRcl , "rcl" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(W____X__) , O_000000(D0,2) , U ), - INST(kX86InstIdRcpps , "rcpps" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(53,U) , U ), - INST(kX86InstIdRcpss , "rcpss" , G(ExtRm) , F(Move) , 4 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(53,U) , U ), - INST(kX86InstIdRcr , "rcr" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(W____X__) , O_000000(D0,3) , U ), - INST(kX86InstIdRdfsbase , "rdfsbase" , G(X86Rm) , F(Move) , 8 , O(Gqd) , U , U , U , E(________) , O_F30F00(AE,0) , U ), - INST(kX86InstIdRdgsbase , "rdgsbase" , G(X86Rm) , F(Move) , 8 , O(Gqd) , U , U , U , E(________) , O_F30F00(AE,1) , U ), - INST(kX86InstIdRdrand , "rdrand" , G(X86Rm) , F(Move) , 8 , O(Gqdw) , U , U , U , E(WWWWWW__) , O_000F00(C7,6) , U ), - INST(kX86InstIdRdtsc , "rdtsc" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000F00(31,U) , U ), - INST(kX86InstIdRdtscp , "rdtscp" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000F01(F9,U) , U ), - INST(kX86InstIdRepLodsB , "rep lods_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AC,1) , U ), - INST(kX86InstIdRepLodsD , "rep lods_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AD,1) , U ), - INST(kX86InstIdRepLodsQ , "rep lods_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AD,1) , U ), - INST(kX86InstIdRepLodsW , "rep lods_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_660000(AD,1) , U ), - INST(kX86InstIdRepMovsB , "rep movs_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(______R_) , O_000000(A4,1) , U ), - INST(kX86InstIdRepMovsD , "rep movs_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(______R_) , O_000000(A5,1) , U ), - INST(kX86InstIdRepMovsQ , "rep movs_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , O(Mem) , U , U , E(______R_) , O_000000(A5,1) , U ), - INST(kX86InstIdRepMovsW , "rep movs_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(______R_) , O_660000(A5,1) , U ), - INST(kX86InstIdRepStosB , "rep stos_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AA,1) , U ), - INST(kX86InstIdRepStosD , "rep stos_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AB,1) , U ), - INST(kX86InstIdRepStosQ , "rep stos_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , U , U , U , E(______R_) , O_000000(AB,1) , U ), - INST(kX86InstIdRepStosW , "rep stos_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , U , U , U , E(______R_) , O_660000(AB,1) , U ), - INST(kX86InstIdRepeCmpsB , "repe cmps_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A6,1) , U ), - INST(kX86InstIdRepeCmpsD , "repe cmps_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A7,1) , U ), - INST(kX86InstIdRepeCmpsQ , "repe cmps_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A7,1) , U ), - INST(kX86InstIdRepeCmpsW , "repe cmps_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_660000(A7,1) , U ), - INST(kX86InstIdRepeScasB , "repe scas_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AE,1) , U ), - INST(kX86InstIdRepeScasD , "repe scas_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AF,1) , U ), - INST(kX86InstIdRepeScasQ , "repe scas_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AF,1) , U ), - INST(kX86InstIdRepeScasW , "repe scas_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_660000(AF,1) , U ), - INST(kX86InstIdRepneCmpsB , "repne cmps_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A6,0) , U ), - INST(kX86InstIdRepneCmpsD , "repne cmps_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A7,0) , U ), - INST(kX86InstIdRepneCmpsQ , "repne cmps_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(A7,0) , U ), - INST(kX86InstIdRepneCmpsW , "repne cmps_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_660000(A7,0) , U ), - INST(kX86InstIdRepneScasB , "repne scas_b" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AE,0) , U ), - INST(kX86InstIdRepneScasD , "repne scas_d" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AF,0) , U ), - INST(kX86InstIdRepneScasQ , "repne scas_q" , G(X86Rep) , F(None)|F(Special)|F(W), 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_000000(AF,0) , U ), - INST(kX86InstIdRepneScasW , "repne scas_w" , G(X86Rep) , F(None)|F(Special) , 0 , O(Mem) , O(Mem) , U , U , E(WWWWWWR_) , O_660000(AF,0) , U ), - INST(kX86InstIdRet , "ret" , G(X86Ret) , F(None)|F(Special) , 0 , U , U , U , U , E(________) , O_000000(C2,U) , U ), - INST(kX86InstIdRol , "rol" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(W____W__) , O_000000(D0,0) , U ), - INST(kX86InstIdRor , "ror" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(W____W__) , O_000000(D0,1) , U ), - INST(kX86InstIdRorx , "rorx" , G(AvxRmi) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Imm) , U , E(________) , O_F20F3A(F0,U) , U ), - INST(kX86InstIdRoundpd , "roundpd" , G(ExtRmi) , F(Move) , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(09,U) , U ), - INST(kX86InstIdRoundps , "roundps" , G(ExtRmi) , F(Move) , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(08,U) , U ), - INST(kX86InstIdRoundsd , "roundsd" , G(ExtRmi) , F(Move) , 8 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(0B,U) , U ), - INST(kX86InstIdRoundss , "roundss" , G(ExtRmi) , F(Move) , 4 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(0A,U) , U ), - INST(kX86InstIdRsqrtps , "rsqrtps" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(52,U) , U ), - INST(kX86InstIdRsqrtss , "rsqrtss" , G(ExtRm) , F(Move) , 4 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(52,U) , U ), - INST(kX86InstIdSahf , "sahf" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(_WWWWW__) , O_000000(9E,U) , U ), - INST(kX86InstIdSal , "sal" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(WWWUWW__) , O_000000(D0,4) , U ), - INST(kX86InstIdSar , "sar" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(WWWUWW__) , O_000000(D0,7) , U ), - INST(kX86InstIdSarx , "sarx" , G(AvxRmv) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , E(________) , O_F30F38(F7,U) , U ), - INST(kX86InstIdSbb , "sbb" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWWWX__) , O_000000(18,3) , U ), - INST(kX86InstIdScasB , "scas_b" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(AE,U) , U ), - INST(kX86InstIdScasD , "scas_d" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(AF,U) , U ), - INST(kX86InstIdScasQ , "scas_q" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(WWWWWWR_) , O_000000(AF,U) , U ), - INST(kX86InstIdScasW , "scas_w" , G(X86Op_66H) , F(None)|F(Special) , 0 , U , U , U , U , E(WWWWWWR_) , O_000000(AF,U) , U ), - INST(kX86InstIdSeta , "seta" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R__R__) , O_000F00(97,U) , U ), - INST(kX86InstIdSetae , "setae" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(93,U) , U ), - INST(kX86InstIdSetb , "setb" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(92,U) , U ), - INST(kX86InstIdSetbe , "setbe" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R__R__) , O_000F00(96,U) , U ), - INST(kX86InstIdSetc , "setc" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(92,U) , U ), - INST(kX86InstIdSete , "sete" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R_____) , O_000F00(94,U) , U ), - INST(kX86InstIdSetg , "setg" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RRR_____) , O_000F00(9F,U) , U ), - INST(kX86InstIdSetge , "setge" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RR______) , O_000F00(9D,U) , U ), - INST(kX86InstIdSetl , "setl" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RR______) , O_000F00(9C,U) , U ), - INST(kX86InstIdSetle , "setle" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RRR_____) , O_000F00(9E,U) , U ), - INST(kX86InstIdSetna , "setna" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R__R__) , O_000F00(96,U) , U ), - INST(kX86InstIdSetnae , "setnae" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(92,U) , U ), - INST(kX86InstIdSetnb , "setnb" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(93,U) , U ), - INST(kX86InstIdSetnbe , "setnbe" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R__R__) , O_000F00(97,U) , U ), - INST(kX86InstIdSetnc , "setnc" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_____R__) , O_000F00(93,U) , U ), - INST(kX86InstIdSetne , "setne" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R_____) , O_000F00(95,U) , U ), - INST(kX86InstIdSetng , "setng" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RRR_____) , O_000F00(9E,U) , U ), - INST(kX86InstIdSetnge , "setnge" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RR______) , O_000F00(9C,U) , U ), - INST(kX86InstIdSetnl , "setnl" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RR______) , O_000F00(9D,U) , U ), - INST(kX86InstIdSetnle , "setnle" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(RRR_____) , O_000F00(9F,U) , U ), - INST(kX86InstIdSetno , "setno" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(R_______) , O_000F00(91,U) , U ), - INST(kX86InstIdSetnp , "setnp" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(____R___) , O_000F00(9B,U) , U ), - INST(kX86InstIdSetns , "setns" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_R______) , O_000F00(99,U) , U ), - INST(kX86InstIdSetnz , "setnz" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R_____) , O_000F00(95,U) , U ), - INST(kX86InstIdSeto , "seto" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(R_______) , O_000F00(90,U) , U ), - INST(kX86InstIdSetp , "setp" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(____R___) , O_000F00(9A,U) , U ), - INST(kX86InstIdSetpe , "setpe" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(____R___) , O_000F00(9A,U) , U ), - INST(kX86InstIdSetpo , "setpo" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(____R___) , O_000F00(9B,U) , U ), - INST(kX86InstIdSets , "sets" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(_R______) , O_000F00(98,U) , U ), - INST(kX86InstIdSetz , "setz" , G(X86Set) , F(Move) , 1 , O(GbMem) , U , U , U , E(__R_____) , O_000F00(94,U) , U ), - INST(kX86InstIdSfence , "sfence" , G(ExtFence) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(AE,7) , U ), - INST(kX86InstIdShl , "shl" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(WWWUWW__) , O_000000(D0,4) , U ), - INST(kX86InstIdShld , "shld" , G(X86Shlrd) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb) , U , U , E(UWWUWW__) , O_000F00(A4,U) , U ), - INST(kX86InstIdShlx , "shlx" , G(AvxRmv) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , E(________) , O_660F38(F7,U) , U ), - INST(kX86InstIdShr , "shr" , G(X86Rot) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , E(WWWUWW__) , O_000000(D0,5) , U ), - INST(kX86InstIdShrd , "shrd" , G(X86Shlrd) , F(None)|F(Special) , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , E(UWWUWW__) , O_000F00(AC,U) , U ), - INST(kX86InstIdShrx , "shrx" , G(AvxRmv) , F(None) , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , E(________) , O_F20F38(F7,U) , U ), - INST(kX86InstIdShufpd , "shufpd" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F00(C6,U) , U ), - INST(kX86InstIdShufps , "shufps" , G(ExtRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_000F00(C6,U) , U ), - INST(kX86InstIdSqrtpd , "sqrtpd" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(51,U) , U ), - INST(kX86InstIdSqrtps , "sqrtps" , G(ExtRm) , F(Move) , 16, O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(51,U) , U ), - INST(kX86InstIdSqrtsd , "sqrtsd" , G(ExtRm) , F(Move) , 8 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(51,U) , U ), - INST(kX86InstIdSqrtss , "sqrtss" , G(ExtRm) , F(Move) , 4 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(51,U) , U ), - INST(kX86InstIdStc , "stc" , G(X86Op) , F(None) , 0 , U , U , U , U , E(_____W__) , O_000000(F9,U) , U ), - INST(kX86InstIdStd , "std" , G(X86Op) , F(None) , 0 , U , U , U , U , E(______W_) , O_000000(FD,U) , U ), - INST(kX86InstIdStmxcsr , "stmxcsr" , G(X86M) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,3) , U ), - INST(kX86InstIdStosB , "stos_b" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(______R_) , O_000000(AA,U) , U ), - INST(kX86InstIdStosD , "stos_d" , G(X86Op) , F(None)|F(Special) , 0 , U , U , U , U , E(______R_) , O_000000(AB,U) , U ), - INST(kX86InstIdStosQ , "stos_q" , G(X86Op) , F(None)|F(Special)|F(W), 0 , U , U , U , U , E(______R_) , O_000000(AB,U) , U ), - INST(kX86InstIdStosW , "stos_w" , G(X86Op_66H) , F(None)|F(Special) , 0 , U , U , U , U , E(______R_) , O_000000(AB,U) , U ), - INST(kX86InstIdSub , "sub" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWWWW__) , O_000000(28,5) , U ), - INST(kX86InstIdSubpd , "subpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(5C,U) , U ), - INST(kX86InstIdSubps , "subps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(5C,U) , U ), - INST(kX86InstIdSubsd , "subsd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F20F00(5C,U) , U ), - INST(kX86InstIdSubss , "subss" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_F30F00(5C,U) , U ), - INST(kX86InstIdTest , "test" , G(X86Test) , F(Test) , 0 , O(GqdwbMem) , O(Gqdwb)|O(Imm) , U , U , E(WWWUWW__) , O_000000(84,U) , O_000000(F6,U) ), - INST(kX86InstIdTzcnt , "tzcnt" , G(X86RegRm) , F(Move) , 0 , O(Gqdw) , O(GqdwMem) , U , U , E(UUWUUW__) , O_F30F00(BC,U) , U ), - INST(kX86InstIdUcomisd , "ucomisd" , G(ExtRm) , F(Test) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_660F00(2E,U) , U ), - INST(kX86InstIdUcomiss , "ucomiss" , G(ExtRm) , F(Test) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_000F00(2E,U) , U ), - INST(kX86InstIdUd2 , "ud2" , G(X86Op) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(0B,U) , U ), - INST(kX86InstIdUnpckhpd , "unpckhpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(15,U) , U ), - INST(kX86InstIdUnpckhps , "unpckhps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(15,U) , U ), - INST(kX86InstIdUnpcklpd , "unpcklpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(14,U) , U ), - INST(kX86InstIdUnpcklps , "unpcklps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(14,U) , U ), - INST(kX86InstIdVaddpd , "vaddpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(58,U) , U ), - INST(kX86InstIdVaddps , "vaddps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(58,U) , U ), - INST(kX86InstIdVaddsd , "vaddsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(58,U) , U ), - INST(kX86InstIdVaddss , "vaddss" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F30F00(58,U) , U ), - INST(kX86InstIdVaddsubpd , "vaddsubpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(D0,U) , U ), - INST(kX86InstIdVaddsubps , "vaddsubps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(D0,U) , U ), - INST(kX86InstIdVaesdec , "vaesdec" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(DE,U) , U ), - INST(kX86InstIdVaesdeclast , "vaesdeclast" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(DF,U) , U ), - INST(kX86InstIdVaesenc , "vaesenc" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(DC,U) , U ), - INST(kX86InstIdVaesenclast , "vaesenclast" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(DD,U) , U ), - INST(kX86InstIdVaesimc , "vaesimc" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(DB,U) , U ), - INST(kX86InstIdVaeskeygenassist , "vaeskeygenassist" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(DF,U) , U ), - INST(kX86InstIdVandnpd , "vandnpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(55,U) , U ), - INST(kX86InstIdVandnps , "vandnps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(55,U) , U ), - INST(kX86InstIdVandpd , "vandpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(54,U) , U ), - INST(kX86InstIdVandps , "vandps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(54,U) , U ), - INST(kX86InstIdVblendpd , "vblendpd" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(0D,U) , U ), - INST(kX86InstIdVblendps , "vblendps" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(0C,U) , U ), - INST(kX86InstIdVblendvpd , "vblendvpd" , G(AvxRvmr_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmm) , E(________) , O_660F3A(4B,U) , U ), - INST(kX86InstIdVblendvps , "vblendvps" , G(AvxRvmr_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmm) , E(________) , O_660F3A(4A,U) , U ), - INST(kX86InstIdVbroadcastf128 , "vbroadcastf128" , G(AvxRm) , F(None) , 0 , O(Ymm) , O(Mem) , U , U , E(________) , O_660F38(1A,U)|L, U ), - INST(kX86InstIdVbroadcasti128 , "vbroadcasti128" , G(AvxRm) , F(None) , 0 , O(Ymm) , O(Mem) , U , U , E(________) , O_660F38(5A,U)|L, U ), - INST(kX86InstIdVbroadcastsd , "vbroadcastsd" , G(AvxRm) , F(None) , 0 , O(Ymm) , O(XmmMem) , U , U , E(________) , O_660F38(19,U)|L, U ), - INST(kX86InstIdVbroadcastss , "vbroadcastss" , G(AvxRm) , F(None) , 0 , O(Ymm) , O(XmmMem) , U , U , E(________) , O_660F38(18,U) , U ), - INST(kX86InstIdVcmppd , "vcmppd" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F00(C2,U) , U ), - INST(kX86InstIdVcmpps , "vcmpps" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_000F00(C2,U) , U ), - INST(kX86InstIdVcmpsd , "vcmpsd" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_F20F00(C2,U) , U ), - INST(kX86InstIdVcmpss , "vcmpss" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_F30F00(C2,U) , U ), - INST(kX86InstIdVcomisd , "vcomisd" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(2F,U) , U ), - INST(kX86InstIdVcomiss , "vcomiss" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(2F,U) , U ), - INST(kX86InstIdVcvtdq2pd , "vcvtdq2pd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_F30F00(E6,U) , U ), - INST(kX86InstIdVcvtdq2ps , "vcvtdq2ps" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_000F00(5B,U) , U ), - INST(kX86InstIdVcvtpd2dq , "vcvtpd2dq" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmYmmMem) , U , U , E(________) , O_F20F00(E6,U) , U ), - INST(kX86InstIdVcvtpd2ps , "vcvtpd2ps" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmYmmMem) , U , U , E(________) , O_660F00(5A,U) , U ), - INST(kX86InstIdVcvtph2ps , "vcvtph2ps" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_660F38(13,U) , U ), - INST(kX86InstIdVcvtps2dq , "vcvtps2dq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F00(5B,U) , U ), - INST(kX86InstIdVcvtps2pd , "vcvtps2pd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_000F00(5A,U) , U ), - INST(kX86InstIdVcvtps2ph , "vcvtps2ph" , G(AvxMri_P) , F(None) , 0 , O(XmmMem) , O(XmmYmm) , O(Imm) , U , E(________) , O_660F3A(1D,U) , U ), - INST(kX86InstIdVcvtsd2si , "vcvtsd2si" , G(AvxRm) , F(None) , 0 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F20F00(2D,U) , U ), - INST(kX86InstIdVcvtsd2ss , "vcvtsd2ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F20F00(5A,U) , U ), - INST(kX86InstIdVcvtsi2sd , "vcvtsi2sd" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , U , E(________) , O_F20F00(2A,U) , U ), - INST(kX86InstIdVcvtsi2ss , "vcvtsi2ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , U , E(________) , O_F30F00(2A,U) , U ), - INST(kX86InstIdVcvtss2sd , "vcvtss2sd" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(5A,U) , U ), - INST(kX86InstIdVcvtss2si , "vcvtss2si" , G(AvxRm) , F(None) , 0 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F20F00(2D,U) , U ), - INST(kX86InstIdVcvttpd2dq , "vcvttpd2dq" , G(AvxRm_P) , F(None) , 0 , O(Xmm) , O(XmmYmmMem) , U , U , E(________) , O_660F00(E6,U) , U ), - INST(kX86InstIdVcvttps2dq , "vcvttps2dq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_F30F00(5B,U) , U ), - INST(kX86InstIdVcvttsd2si , "vcvttsd2si" , G(AvxRm) , F(None) , 0 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F20F00(2C,U) , U ), - INST(kX86InstIdVcvttss2si , "vcvttss2si" , G(AvxRm) , F(None) , 0 , O(Gqd) , O(XmmMem) , U , U , E(________) , O_F30F00(2C,U) , U ), - INST(kX86InstIdVdivpd , "vdivpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(5E,U) , U ), - INST(kX86InstIdVdivps , "vdivps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(5E,U) , U ), - INST(kX86InstIdVdivsd , "vdivsd" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F20F00(5E,U) , U ), - INST(kX86InstIdVdivss , "vdivss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(5E,U) , U ), - INST(kX86InstIdVdppd , "vdppd" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(41,U) , U ), - INST(kX86InstIdVdpps , "vdpps" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(40,U) , U ), - INST(kX86InstIdVextractf128 , "vextractf128" , G(AvxMri) , F(None) , 0 , O(XmmMem) , O(Ymm) , O(Imm) , U , E(________) , O_660F3A(19,U)|L, U ), - INST(kX86InstIdVextracti128 , "vextracti128" , G(AvxMri) , F(None) , 0 , O(XmmMem) , O(Ymm) , O(Imm) , U , E(________) , O_660F3A(39,U)|L, U ), - INST(kX86InstIdVextractps , "vextractps" , G(AvxMri) , F(None) , 0 , O(GqdMem) , O(Xmm) , O(Imm) , U , E(________) , O_660F3A(17,U) , U ), - INST(kX86InstIdVfmadd132pd , "vfmadd132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(98,U) , U ), - INST(kX86InstIdVfmadd132ps , "vfmadd132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(98,U) , U ), - INST(kX86InstIdVfmadd132sd , "vfmadd132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(99,U) , U ), - INST(kX86InstIdVfmadd132ss , "vfmadd132ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(99,U) , U ), - INST(kX86InstIdVfmadd213pd , "vfmadd213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A8,U) , U ), - INST(kX86InstIdVfmadd213ps , "vfmadd213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A8,U) , U ), - INST(kX86InstIdVfmadd213sd , "vfmadd213sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(A9,U) , U ), - INST(kX86InstIdVfmadd213ss , "vfmadd213ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(A9,U) , U ), - INST(kX86InstIdVfmadd231pd , "vfmadd231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B8,U) , U ), - INST(kX86InstIdVfmadd231ps , "vfmadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B8,U) , U ), - INST(kX86InstIdVfmadd231sd , "vfmadd231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(B9,U) , U ), - INST(kX86InstIdVfmadd231ss , "vfmadd231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(B9,U) , U ), - INST(kX86InstIdVfmaddpd , "vfmaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(69,U) , U ), - INST(kX86InstIdVfmaddps , "vfmaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(68,U) , U ), - INST(kX86InstIdVfmaddsd , "vfmaddsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(6B,U) , U ), - INST(kX86InstIdVfmaddss , "vfmaddss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(6A,U) , U ), - INST(kX86InstIdVfmaddsub132pd , "vfmaddsub132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(96,U) , U ), - INST(kX86InstIdVfmaddsub132ps , "vfmaddsub132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(96,U) , U ), - INST(kX86InstIdVfmaddsub213pd , "vfmaddsub213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A6,U) , U ), - INST(kX86InstIdVfmaddsub213ps , "vfmaddsub213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A6,U) , U ), - INST(kX86InstIdVfmaddsub231pd , "vfmaddsub231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B6,U) , U ), - INST(kX86InstIdVfmaddsub231ps , "vfmaddsub231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B6,U) , U ), - INST(kX86InstIdVfmaddsubpd , "vfmaddsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(5D,U) , U ), - INST(kX86InstIdVfmaddsubps , "vfmaddsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(5C,U) , U ), - INST(kX86InstIdVfmsub132pd , "vfmsub132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9A,U) , U ), - INST(kX86InstIdVfmsub132ps , "vfmsub132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9A,U) , U ), - INST(kX86InstIdVfmsub132sd , "vfmsub132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9B,U) , U ), - INST(kX86InstIdVfmsub132ss , "vfmsub132ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9B,U) , U ), - INST(kX86InstIdVfmsub213pd , "vfmsub213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AA,U) , U ), - INST(kX86InstIdVfmsub213ps , "vfmsub213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AA,U) , U ), - INST(kX86InstIdVfmsub213sd , "vfmsub213sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AB,U) , U ), - INST(kX86InstIdVfmsub213ss , "vfmsub213ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AB,U) , U ), - INST(kX86InstIdVfmsub231pd , "vfmsub231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BA,U) , U ), - INST(kX86InstIdVfmsub231ps , "vfmsub231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BA,U) , U ), - INST(kX86InstIdVfmsub231sd , "vfmsub231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BB,U) , U ), - INST(kX86InstIdVfmsub231ss , "vfmsub231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BB,U) , U ), - INST(kX86InstIdVfmsubadd132pd , "vfmsubadd132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(97,U) , U ), - INST(kX86InstIdVfmsubadd132ps , "vfmsubadd132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(97,U) , U ), - INST(kX86InstIdVfmsubadd213pd , "vfmsubadd213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A7,U) , U ), - INST(kX86InstIdVfmsubadd213ps , "vfmsubadd213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(A7,U) , U ), - INST(kX86InstIdVfmsubadd231pd , "vfmsubadd231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B7,U) , U ), - INST(kX86InstIdVfmsubadd231ps , "vfmsubadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(B7,U) , U ), - INST(kX86InstIdVfmsubaddpd , "vfmsubaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(5F,U) , U ), - INST(kX86InstIdVfmsubaddps , "vfmsubaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(5E,U) , U ), - INST(kX86InstIdVfmsubpd , "vfmsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(6D,U) , U ), - INST(kX86InstIdVfmsubps , "vfmsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(6C,U) , U ), - INST(kX86InstIdVfmsubsd , "vfmsubsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(6F,U) , U ), - INST(kX86InstIdVfmsubss , "vfmsubss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(6E,U) , U ), - INST(kX86InstIdVfnmadd132pd , "vfnmadd132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9C,U) , U ), - INST(kX86InstIdVfnmadd132ps , "vfnmadd132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9C,U) , U ), - INST(kX86InstIdVfnmadd132sd , "vfnmadd132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9D,U) , U ), - INST(kX86InstIdVfnmadd132ss , "vfnmadd132ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9D,U) , U ), - INST(kX86InstIdVfnmadd213pd , "vfnmadd213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AC,U) , U ), - INST(kX86InstIdVfnmadd213ps , "vfnmadd213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AC,U) , U ), - INST(kX86InstIdVfnmadd213sd , "vfnmadd213sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AD,U) , U ), - INST(kX86InstIdVfnmadd213ss , "vfnmadd213ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AD,U) , U ), - INST(kX86InstIdVfnmadd231pd , "vfnmadd231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BC,U) , U ), - INST(kX86InstIdVfnmadd231ps , "vfnmadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BC,U) , U ), - INST(kX86InstIdVfnmadd231sd , "vfnmadd231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BC,U) , U ), - INST(kX86InstIdVfnmadd231ss , "vfnmadd231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BC,U) , U ), - INST(kX86InstIdVfnmaddpd , "vfnmaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(79,U) , U ), - INST(kX86InstIdVfnmaddps , "vfnmaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(78,U) , U ), - INST(kX86InstIdVfnmaddsd , "vfnmaddsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(7B,U) , U ), - INST(kX86InstIdVfnmaddss , "vfnmaddss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(7A,U) , U ), - INST(kX86InstIdVfnmsub132pd , "vfnmsub132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9E,U) , U ), - INST(kX86InstIdVfnmsub132ps , "vfnmsub132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(9E,U) , U ), - INST(kX86InstIdVfnmsub132sd , "vfnmsub132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9F,U) , U ), - INST(kX86InstIdVfnmsub132ss , "vfnmsub132ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(9F,U) , U ), - INST(kX86InstIdVfnmsub213pd , "vfnmsub213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AE,U) , U ), - INST(kX86InstIdVfnmsub213ps , "vfnmsub213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(AE,U) , U ), - INST(kX86InstIdVfnmsub213sd , "vfnmsub213sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AF,U) , U ), - INST(kX86InstIdVfnmsub213ss , "vfnmsub213ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(AF,U) , U ), - INST(kX86InstIdVfnmsub231pd , "vfnmsub231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BE,U) , U ), - INST(kX86InstIdVfnmsub231ps , "vfnmsub231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(BE,U) , U ), - INST(kX86InstIdVfnmsub231sd , "vfnmsub231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BF,U) , U ), - INST(kX86InstIdVfnmsub231ss , "vfnmsub231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_660F38(BF,U) , U ), - INST(kX86InstIdVfnmsubpd , "vfnmsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(7D,U) , U ), - INST(kX86InstIdVfnmsubps , "vfnmsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_660F3A(7C,U) , U ), - INST(kX86InstIdVfnmsubsd , "vfnmsubsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(7F,U) , U ), - INST(kX86InstIdVfnmsubss , "vfnmsubss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_660F3A(7E,U) , U ), - INST(kX86InstIdVfrczpd , "vfrczpd" , G(XopRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_00_M09(81,U) , U ), - INST(kX86InstIdVfrczps , "vfrczps" , G(XopRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_00_M09(80,U) , U ), - INST(kX86InstIdVfrczsd , "vfrczsd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(83,U) , U ), - INST(kX86InstIdVfrczss , "vfrczss" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(82,U) , U ), - INST(kX86InstIdVgatherdpd , "vgatherdpd" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(92,U) , U ), - INST(kX86InstIdVgatherdps , "vgatherdps" , G(AvxGather) , F(None) , 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(92,U) , U ), - INST(kX86InstIdVgatherqpd , "vgatherqpd" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(93,U) , U ), - INST(kX86InstIdVgatherqps , "vgatherqps" , G(AvxGatherEx) , F(None) , 0 , O(Xmm) , O(Mem) , O(Xmm) , U , E(________) , O_660F38(93,U) , U ), - INST(kX86InstIdVhaddpd , "vhaddpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(7C,U) , U ), - INST(kX86InstIdVhaddps , "vhaddps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(7C,U) , U ), - INST(kX86InstIdVhsubpd , "vhsubpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(7D,U) , U ), - INST(kX86InstIdVhsubps , "vhsubps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(7D,U) , U ), - INST(kX86InstIdVinsertf128 , "vinsertf128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(18,U)|L, U ), - INST(kX86InstIdVinserti128 , "vinserti128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(38,U)|L, U ), - INST(kX86InstIdVinsertps , "vinsertps" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(21,U) , U ), - INST(kX86InstIdVlddqu , "vlddqu" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(Mem) , U , U , E(________) , O_F20F00(F0,U) , U ), - INST(kX86InstIdVldmxcsr , "vldmxcsr" , G(AvxM) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,2) , U ), - INST(kX86InstIdVmaskmovdqu , "vmaskmovdqu" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(Xmm) , U , U , E(________) , O_660F00(F7,U) , U ), - INST(kX86InstIdVmaskmovpd , "vmaskmovpd" , G(AvxRvmMvr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(2D,U) , O_660F38(2F,U) ), - INST(kX86InstIdVmaskmovps , "vmaskmovps" , G(AvxRvmMvr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(2C,U) , O_660F38(2E,U) ), - INST(kX86InstIdVmaxpd , "vmaxpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(5F,U) , U ), - INST(kX86InstIdVmaxps , "vmaxps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(5F,U) , U ), - INST(kX86InstIdVmaxsd , "vmaxsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(5F,U) , U ), - INST(kX86InstIdVmaxss , "vmaxss" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F30F00(5F,U) , U ), - INST(kX86InstIdVminpd , "vminpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(5D,U) , U ), - INST(kX86InstIdVminps , "vminps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(5D,U) , U ), - INST(kX86InstIdVminsd , "vminsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(5D,U) , U ), - INST(kX86InstIdVminss , "vminss" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F30F00(5D,U) , U ), - INST(kX86InstIdVmovapd , "vmovapd" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_660F00(28,U) , O_660F00(29,U) ), - INST(kX86InstIdVmovaps , "vmovaps" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_000F00(28,U) , O_000F00(29,U) ), - INST(kX86InstIdVmovd , "vmovd" , G(AvxRmMr) , F(None) , 0 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(6E,U) , O_660F00(7E,U) ), - INST(kX86InstIdVmovddup , "vmovddup" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_F20F00(12,U) , U ), - INST(kX86InstIdVmovdqa , "vmovdqa" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_660F00(6F,U) , O_660F00(7F,U) ), - INST(kX86InstIdVmovdqu , "vmovdqu" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_F30F00(6F,U) , O_F30F00(7F,U) ), - INST(kX86InstIdVmovhlps , "vmovhlps" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(Xmm) , U , E(________) , O_000F00(12,U) , U ), - INST(kX86InstIdVmovhpd , "vmovhpd" , G(AvxRvmMr) , F(None) , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , E(________) , O_660F00(16,U) , O_660F00(17,U) ), - INST(kX86InstIdVmovhps , "vmovhps" , G(AvxRvmMr) , F(None) , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , E(________) , O_000F00(16,U) , O_000F00(17,U) ), - INST(kX86InstIdVmovlhps , "vmovlhps" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(Xmm) , U , E(________) , O_000F00(16,U) , U ), - INST(kX86InstIdVmovlpd , "vmovlpd" , G(AvxRvmMr) , F(None) , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , E(________) , O_660F00(12,U) , O_660F00(13,U) ), - INST(kX86InstIdVmovlps , "vmovlps" , G(AvxRvmMr) , F(None) , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , E(________) , O_000F00(12,U) , O_000F00(13,U) ), - INST(kX86InstIdVmovmskpd , "vmovmskpd" , G(AvxRm_P) , F(None) , 0 , O(Gqd) , O(XmmYmm) , U , U , E(________) , O_660F00(50,U) , U ), - INST(kX86InstIdVmovmskps , "vmovmskps" , G(AvxRm_P) , F(None) , 0 , O(Gqd) , O(XmmYmm) , U , U , E(________) , O_000F00(50,U) , U ), - INST(kX86InstIdVmovntdq , "vmovntdq" , G(AvxMr) , F(None) , 0 , O(Mem) , O(XmmYmm) , U , U , E(________) , O_660F00(E7,U) , U ), - INST(kX86InstIdVmovntdqa , "vmovntdqa" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(Mem) , U , U , E(________) , O_660F38(2A,U) , U ), - INST(kX86InstIdVmovntpd , "vmovntpd" , G(AvxMr_P) , F(None) , 0 , O(Mem) , O(XmmYmm) , U , U , E(________) , O_660F00(2B,U) , U ), - INST(kX86InstIdVmovntps , "vmovntps" , G(AvxMr_P) , F(None) , 0 , O(Mem) , O(XmmYmm) , U , U , E(________) , O_000F00(2B,U) , U ), - INST(kX86InstIdVmovq , "vmovq" , G(AvxRmMr) , F(None) |F(W), 0 , O(XmmMem) , O(XmmMem) , U , U , E(________) , O_660F00(6E,U) , O_660F00(7E,U) ), - INST(kX86InstIdVmovsd , "vmovsd" , G(AvxMovSsSd) , F(None) , 0 , O(XmmMem) , O(XmmMem) , O(Xmm) , U , E(________) , O_F20F00(10,U) , O_F20F00(11,U) ), - INST(kX86InstIdVmovshdup , "vmovshdup" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_F30F00(16,U) , U ), - INST(kX86InstIdVmovsldup , "vmovsldup" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_F30F00(12,U) , U ), - INST(kX86InstIdVmovss , "vmovss" , G(AvxMovSsSd) , F(None) , 0 , O(XmmMem) , O(Xmm) , O(Xmm) , U , E(________) , O_F30F00(10,U) , O_F30F00(11,U) ), - INST(kX86InstIdVmovupd , "vmovupd" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_660F00(10,U) , O_660F00(11,U) ), - INST(kX86InstIdVmovups , "vmovups" , G(AvxRmMr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmmMem) , U , U , E(________) , O_000F00(10,U) , O_000F00(11,U) ), - INST(kX86InstIdVmpsadbw , "vmpsadbw" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(42,U) , U ), - INST(kX86InstIdVmulpd , "vmulpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(59,U) , U ), - INST(kX86InstIdVmulps , "vmulps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(59,U) , U ), - INST(kX86InstIdVmulsd , "vmulsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F20F00(59,U) , U ), - INST(kX86InstIdVmulss , "vmulss" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_F30F00(59,U) , U ), - INST(kX86InstIdVorpd , "vorpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(56,U) , U ), - INST(kX86InstIdVorps , "vorps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(56,U) , U ), - INST(kX86InstIdVpabsb , "vpabsb" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(1C,U) , U ), - INST(kX86InstIdVpabsd , "vpabsd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(1E,U) , U ), - INST(kX86InstIdVpabsw , "vpabsw" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(1D,U) , U ), - INST(kX86InstIdVpackssdw , "vpackssdw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(6B,U) , U ), - INST(kX86InstIdVpacksswb , "vpacksswb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(63,U) , U ), - INST(kX86InstIdVpackusdw , "vpackusdw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(2B,U) , U ), - INST(kX86InstIdVpackuswb , "vpackuswb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(67,U) , U ), - INST(kX86InstIdVpaddb , "vpaddb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(FC,U) , U ), - INST(kX86InstIdVpaddd , "vpaddd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(FE,U) , U ), - INST(kX86InstIdVpaddq , "vpaddq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(D4,U) , U ), - INST(kX86InstIdVpaddsb , "vpaddsb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(EC,U) , U ), - INST(kX86InstIdVpaddsw , "vpaddsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(ED,U) , U ), - INST(kX86InstIdVpaddusb , "vpaddusb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DC,U) , U ), - INST(kX86InstIdVpaddusw , "vpaddusw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DD,U) , U ), - INST(kX86InstIdVpaddw , "vpaddw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(FD,U) , U ), - INST(kX86InstIdVpalignr , "vpalignr" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(0F,U) , U ), - INST(kX86InstIdVpand , "vpand" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DB,U) , U ), - INST(kX86InstIdVpandn , "vpandn" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DF,U) , U ), - INST(kX86InstIdVpavgb , "vpavgb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E0,U) , U ), - INST(kX86InstIdVpavgw , "vpavgw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E3,U) , U ), - INST(kX86InstIdVpblendd , "vpblendd" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(02,U) , U ), - INST(kX86InstIdVpblendvb , "vpblendvb" , G(AvxRvmr) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmm) , E(________) , O_660F3A(4C,U) , U ), - INST(kX86InstIdVpblendw , "vpblendw" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F3A(0E,U) , U ), - INST(kX86InstIdVpbroadcastb , "vpbroadcastb" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_660F38(78,U) , U ), - INST(kX86InstIdVpbroadcastd , "vpbroadcastd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_660F38(58,U) , U ), - INST(kX86InstIdVpbroadcastq , "vpbroadcastq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_660F38(59,U) , U ), - INST(kX86InstIdVpbroadcastw , "vpbroadcastw" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , E(________) , O_660F38(79,U) , U ), - INST(kX86InstIdVpclmulqdq , "vpclmulqdq" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(44,U) , U ), - INST(kX86InstIdVpcmov , "vpcmov" , G(XopRvrmRvmr_P), F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_00_M08(A2,U) , U ), - INST(kX86InstIdVpcmpeqb , "vpcmpeqb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(74,U) , U ), - INST(kX86InstIdVpcmpeqd , "vpcmpeqd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(76,U) , U ), - INST(kX86InstIdVpcmpeqq , "vpcmpeqq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(29,U) , U ), - INST(kX86InstIdVpcmpeqw , "vpcmpeqw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(75,U) , U ), - INST(kX86InstIdVpcmpestri , "vpcmpestri" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(61,U) , U ), - INST(kX86InstIdVpcmpestrm , "vpcmpestrm" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(60,U) , U ), - INST(kX86InstIdVpcmpgtb , "vpcmpgtb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(64,U) , U ), - INST(kX86InstIdVpcmpgtd , "vpcmpgtd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(66,U) , U ), - INST(kX86InstIdVpcmpgtq , "vpcmpgtq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(37,U) , U ), - INST(kX86InstIdVpcmpgtw , "vpcmpgtw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(65,U) , U ), - INST(kX86InstIdVpcmpistri , "vpcmpistri" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(63,U) , U ), - INST(kX86InstIdVpcmpistrm , "vpcmpistrm" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , E(________) , O_660F3A(62,U) , U ), - INST(kX86InstIdVpcomb , "vpcomb" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(CC,U) , U ), - INST(kX86InstIdVpcomd , "vpcomd" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(CE,U) , U ), - INST(kX86InstIdVpcomq , "vpcomq" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(CF,U) , U ), - INST(kX86InstIdVpcomub , "vpcomub" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(EC,U) , U ), - INST(kX86InstIdVpcomud , "vpcomud" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(EE,U) , U ), - INST(kX86InstIdVpcomuq , "vpcomuq" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(EF,U) , U ), - INST(kX86InstIdVpcomuw , "vpcomuw" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(ED,U) , U ), - INST(kX86InstIdVpcomw , "vpcomw" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_00_M08(CD,U) , U ), - INST(kX86InstIdVperm2f128 , "vperm2f128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , E(________) , O_660F3A(06,U)|L, U ), - INST(kX86InstIdVperm2i128 , "vperm2i128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , E(________) , O_660F3A(46,U)|L, U ), - INST(kX86InstIdVpermd , "vpermd" , G(AvxRvm) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , U , E(________) , O_660F38(36,U)|L, U ), - INST(kX86InstIdVpermil2pd , "vpermil2pd" , G(AvxRvrmRvmr_P), F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_66_M03(49,U) , U ), - INST(kX86InstIdVpermil2ps , "vpermil2ps" , G(AvxRvrmRvmr_P), F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , E(________) , O_66_M03(48,U) , U ), - INST(kX86InstIdVpermilpd , "vpermilpd" , G(AvxRvmRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F38(0D,U) , O_660F3A(05,U) ), - INST(kX86InstIdVpermilps , "vpermilps" , G(AvxRvmRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F38(0C,U) , O_660F3A(04,U) ), - INST(kX86InstIdVpermpd , "vpermpd" , G(AvxRmi) , F(None) |F(W), 0 , O(Ymm) , O(YmmMem) , O(Imm) , U , E(________) , O_660F3A(01,U)|L, U ), - INST(kX86InstIdVpermps , "vpermps" , G(AvxRvm) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , U , E(________) , O_660F38(16,U)|L, U ), - INST(kX86InstIdVpermq , "vpermq" , G(AvxRmi) , F(None) |F(W), 0 , O(Ymm) , O(YmmMem) , O(Imm) , U , E(________) , O_660F3A(00,U)|L, U ), - INST(kX86InstIdVpextrb , "vpextrb" , G(AvxMri) , F(None) , 0 , O(GqdwbMem) , O(Xmm) , O(Imm) , U , E(________) , O_660F3A(14,U) , U ), - INST(kX86InstIdVpextrd , "vpextrd" , G(AvxMri) , F(None) , 0 , O(GqdMem) , O(Xmm) , O(Imm) , U , E(________) , O_660F3A(16,U) , U ), - INST(kX86InstIdVpextrq , "vpextrq" , G(AvxMri) , F(None) |F(W), 0 , O(GqMem) , O(Xmm) , O(Imm) , U , E(________) , O_660F3A(16,U) , U ), - INST(kX86InstIdVpextrw , "vpextrw" , G(AvxMri) , F(None) , 0 , O(GqdwMem) , O(Xmm) , O(Imm) , U , E(________) , O_660F3A(15,U) , U ), - INST(kX86InstIdVpgatherdd , "vpgatherdd" , G(AvxGather) , F(None) , 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(90,U) , U ), - INST(kX86InstIdVpgatherdq , "vpgatherdq" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(90,U) , U ), - INST(kX86InstIdVpgatherqd , "vpgatherqd" , G(AvxGatherEx) , F(None) , 0 , O(Xmm) , O(Mem) , O(Xmm) , U , E(________) , O_660F38(91,U) , U ), - INST(kX86InstIdVpgatherqq , "vpgatherqq" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , E(________) , O_660F38(91,U) , U ), - INST(kX86InstIdVphaddbd , "vphaddbd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(C2,U) , U ), - INST(kX86InstIdVphaddbq , "vphaddbq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(C3,U) , U ), - INST(kX86InstIdVphaddbw , "vphaddbw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(C1,U) , U ), - INST(kX86InstIdVphaddd , "vphaddd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(02,U) , U ), - INST(kX86InstIdVphadddq , "vphadddq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(CB,U) , U ), - INST(kX86InstIdVphaddsw , "vphaddsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(03,U) , U ), - INST(kX86InstIdVphaddubd , "vphaddubd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(D2,U) , U ), - INST(kX86InstIdVphaddubq , "vphaddubq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(D3,U) , U ), - INST(kX86InstIdVphaddubw , "vphaddubw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(D1,U) , U ), - INST(kX86InstIdVphaddudq , "vphaddudq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(DB,U) , U ), - INST(kX86InstIdVphadduwd , "vphadduwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(D6,U) , U ), - INST(kX86InstIdVphadduwq , "vphadduwq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(D7,U) , U ), - INST(kX86InstIdVphaddw , "vphaddw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(01,U) , U ), - INST(kX86InstIdVphaddwd , "vphaddwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(C6,U) , U ), - INST(kX86InstIdVphaddwq , "vphaddwq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(C7,U) , U ), - INST(kX86InstIdVphminposuw , "vphminposuw" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F38(41,U) , U ), - INST(kX86InstIdVphsubbw , "vphsubbw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(E1,U) , U ), - INST(kX86InstIdVphsubd , "vphsubd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(06,U) , U ), - INST(kX86InstIdVphsubdq , "vphsubdq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(E3,U) , U ), - INST(kX86InstIdVphsubsw , "vphsubsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(07,U) , U ), - INST(kX86InstIdVphsubw , "vphsubw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(05,U) , U ), - INST(kX86InstIdVphsubwd , "vphsubwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_00_M09(E2,U) , U ), - INST(kX86InstIdVpinsrb , "vpinsrb" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdwbMem) , O(Imm) , E(________) , O_660F3A(20,U) , U ), - INST(kX86InstIdVpinsrd , "vpinsrd" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , O(Imm) , E(________) , O_660F3A(22,U) , U ), - INST(kX86InstIdVpinsrq , "vpinsrq" , G(AvxRvmi) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(GqMem) , O(Imm) , E(________) , O_660F3A(22,U) , U ), - INST(kX86InstIdVpinsrw , "vpinsrw" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdwMem) , O(Imm) , E(________) , O_660F00(C4,U) , U ), - INST(kX86InstIdVpmacsdd , "vpmacsdd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(9E,U) , U ), - INST(kX86InstIdVpmacsdqh , "vpmacsdqh" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(9F,U) , U ), - INST(kX86InstIdVpmacsdql , "vpmacsdql" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(97,U) , U ), - INST(kX86InstIdVpmacssdd , "vpmacssdd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(8E,U) , U ), - INST(kX86InstIdVpmacssdqh , "vpmacssdqh" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(8F,U) , U ), - INST(kX86InstIdVpmacssdql , "vpmacssdql" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(87,U) , U ), - INST(kX86InstIdVpmacsswd , "vpmacsswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(86,U) , U ), - INST(kX86InstIdVpmacssww , "vpmacssww" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(85,U) , U ), - INST(kX86InstIdVpmacswd , "vpmacswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(96,U) , U ), - INST(kX86InstIdVpmacsww , "vpmacsww" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(95,U) , U ), - INST(kX86InstIdVpmadcsswd , "vpmadcsswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(A6,U) , U ), - INST(kX86InstIdVpmadcswd , "vpmadcswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , E(________) , O_00_M08(B6,U) , U ), - INST(kX86InstIdVpmaddubsw , "vpmaddubsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(04,U) , U ), - INST(kX86InstIdVpmaddwd , "vpmaddwd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(F5,U) , U ), - INST(kX86InstIdVpmaskmovd , "vpmaskmovd" , G(AvxRvmMvr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(8C,U) , O_660F38(8E,U) ), - INST(kX86InstIdVpmaskmovq , "vpmaskmovq" , G(AvxRvmMvr_P) , F(None) |F(W), 0 , O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(8C,U) , O_660F38(8E,U) ), - INST(kX86InstIdVpmaxsb , "vpmaxsb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3C,U) , U ), - INST(kX86InstIdVpmaxsd , "vpmaxsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3D,U) , U ), - INST(kX86InstIdVpmaxsw , "vpmaxsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(EE,U) , U ), - INST(kX86InstIdVpmaxub , "vpmaxub" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DE,U) , U ), - INST(kX86InstIdVpmaxud , "vpmaxud" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3F,U) , U ), - INST(kX86InstIdVpmaxuw , "vpmaxuw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3E,U) , U ), - INST(kX86InstIdVpminsb , "vpminsb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(38,U) , U ), - INST(kX86InstIdVpminsd , "vpminsd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(39,U) , U ), - INST(kX86InstIdVpminsw , "vpminsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(EA,U) , U ), - INST(kX86InstIdVpminub , "vpminub" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(DA,U) , U ), - INST(kX86InstIdVpminud , "vpminud" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3B,U) , U ), - INST(kX86InstIdVpminuw , "vpminuw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(3A,U) , U ), - INST(kX86InstIdVpmovmskb , "vpmovmskb" , G(AvxRm_P) , F(None) , 0 , O(Gqd) , O(XmmYmm) , U , U , E(________) , O_660F00(D7,U) , U ), - INST(kX86InstIdVpmovsxbd , "vpmovsxbd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(21,U) , U ), - INST(kX86InstIdVpmovsxbq , "vpmovsxbq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(22,U) , U ), - INST(kX86InstIdVpmovsxbw , "vpmovsxbw" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(20,U) , U ), - INST(kX86InstIdVpmovsxdq , "vpmovsxdq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(25,U) , U ), - INST(kX86InstIdVpmovsxwd , "vpmovsxwd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(23,U) , U ), - INST(kX86InstIdVpmovsxwq , "vpmovsxwq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(24,U) , U ), - INST(kX86InstIdVpmovzxbd , "vpmovzxbd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(31,U) , U ), - INST(kX86InstIdVpmovzxbq , "vpmovzxbq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(32,U) , U ), - INST(kX86InstIdVpmovzxbw , "vpmovzxbw" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(30,U) , U ), - INST(kX86InstIdVpmovzxdq , "vpmovzxdq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(35,U) , U ), - INST(kX86InstIdVpmovzxwd , "vpmovzxwd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(33,U) , U ), - INST(kX86InstIdVpmovzxwq , "vpmovzxwq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F38(34,U) , U ), - INST(kX86InstIdVpmuldq , "vpmuldq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(28,U) , U ), - INST(kX86InstIdVpmulhrsw , "vpmulhrsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(0B,U) , U ), - INST(kX86InstIdVpmulhuw , "vpmulhuw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E4,U) , U ), - INST(kX86InstIdVpmulhw , "vpmulhw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E5,U) , U ), - INST(kX86InstIdVpmulld , "vpmulld" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(40,U) , U ), - INST(kX86InstIdVpmullw , "vpmullw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(D5,U) , U ), - INST(kX86InstIdVpmuludq , "vpmuludq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(F4,U) , U ), - INST(kX86InstIdVpor , "vpor" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(EB,U) , U ), - INST(kX86InstIdVpperm , "vpperm" , G(XopRvrmRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , E(________) , O_00_M08(A3,U) , U ), - INST(kX86InstIdVprotb , "vprotb" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , E(________) , O_00_M09(90,U) , O_00_M08(C0,U) ), - INST(kX86InstIdVprotd , "vprotd" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , E(________) , O_00_M09(92,U) , O_00_M08(C2,U) ), - INST(kX86InstIdVprotq , "vprotq" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , E(________) , O_00_M09(93,U) , O_00_M08(C3,U) ), - INST(kX86InstIdVprotw , "vprotw" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , E(________) , O_00_M09(91,U) , O_00_M08(C1,U) ), - INST(kX86InstIdVpsadbw , "vpsadbw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(F6,U) , U ), - INST(kX86InstIdVpshab , "vpshab" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(98,U) , U ), - INST(kX86InstIdVpshad , "vpshad" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(9A,U) , U ), - INST(kX86InstIdVpshaq , "vpshaq" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(9B,U) , U ), - INST(kX86InstIdVpshaw , "vpshaw" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(99,U) , U ), - INST(kX86InstIdVpshlb , "vpshlb" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(94,U) , U ), - INST(kX86InstIdVpshld , "vpshld" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(96,U) , U ), - INST(kX86InstIdVpshlq , "vpshlq" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(97,U) , U ), - INST(kX86InstIdVpshlw , "vpshlw" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , E(________) , O_00_M09(95,U) , U ), - INST(kX86InstIdVpshufb , "vpshufb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(00,U) , U ), - INST(kX86InstIdVpshufd , "vpshufd" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_660F00(70,U) , U ), - INST(kX86InstIdVpshufhw , "vpshufhw" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_F30F00(70,U) , U ), - INST(kX86InstIdVpshuflw , "vpshuflw" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_F20F00(70,U) , U ), - INST(kX86InstIdVpsignb , "vpsignb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(08,U) , U ), - INST(kX86InstIdVpsignd , "vpsignd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(0A,U) , U ), - INST(kX86InstIdVpsignw , "vpsignw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(09,U) , U ), - INST(kX86InstIdVpslld , "vpslld" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(F2,U) , O_660F00(72,6) ), - INST(kX86InstIdVpslldq , "vpslldq" , G(AvxVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_660F00(73,7) , U ), - INST(kX86InstIdVpsllq , "vpsllq" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(F3,U) , O_660F00(73,6) ), - INST(kX86InstIdVpsllvd , "vpsllvd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(47,U) , U ), - INST(kX86InstIdVpsllvq , "vpsllvq" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(47,U) , U ), - INST(kX86InstIdVpsllw , "vpsllw" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(F1,U) , O_660F00(71,6) ), - INST(kX86InstIdVpsrad , "vpsrad" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(E2,U) , O_660F00(72,4) ), - INST(kX86InstIdVpsravd , "vpsravd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(46,U) , U ), - INST(kX86InstIdVpsraw , "vpsraw" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(E1,U) , O_660F00(71,4) ), - INST(kX86InstIdVpsrld , "vpsrld" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(D2,U) , O_660F00(72,2) ), - INST(kX86InstIdVpsrldq , "vpsrldq" , G(AvxVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_660F00(73,3) , U ), - INST(kX86InstIdVpsrlq , "vpsrlq" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(D3,U) , O_660F00(73,2) ), - INST(kX86InstIdVpsrlvd , "vpsrlvd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(45,U) , U ), - INST(kX86InstIdVpsrlvq , "vpsrlvq" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F38(45,U) , U ), - INST(kX86InstIdVpsrlw , "vpsrlw" , G(AvxRvmVmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , E(________) , O_660F00(D1,U) , O_660F00(71,2) ), - INST(kX86InstIdVpsubb , "vpsubb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(F8,U) , U ), - INST(kX86InstIdVpsubd , "vpsubd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(FA,U) , U ), - INST(kX86InstIdVpsubq , "vpsubq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(FB,U) , U ), - INST(kX86InstIdVpsubsb , "vpsubsb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E8,U) , U ), - INST(kX86InstIdVpsubsw , "vpsubsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(E9,U) , U ), - INST(kX86InstIdVpsubusb , "vpsubusb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(D8,U) , U ), - INST(kX86InstIdVpsubusw , "vpsubusw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(D9,U) , U ), - INST(kX86InstIdVpsubw , "vpsubw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(F9,U) , U ), - INST(kX86InstIdVptest , "vptest" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(WWWWWW__) , O_660F38(17,U) , U ), - INST(kX86InstIdVpunpckhbw , "vpunpckhbw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(68,U) , U ), - INST(kX86InstIdVpunpckhdq , "vpunpckhdq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(6A,U) , U ), - INST(kX86InstIdVpunpckhqdq , "vpunpckhqdq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(6D,U) , U ), - INST(kX86InstIdVpunpckhwd , "vpunpckhwd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(69,U) , U ), - INST(kX86InstIdVpunpcklbw , "vpunpcklbw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(60,U) , U ), - INST(kX86InstIdVpunpckldq , "vpunpckldq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(62,U) , U ), - INST(kX86InstIdVpunpcklqdq , "vpunpcklqdq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(6C,U) , U ), - INST(kX86InstIdVpunpcklwd , "vpunpcklwd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(61,U) , U ), - INST(kX86InstIdVpxor , "vpxor" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(EF,U) , U ), - INST(kX86InstIdVrcpps , "vrcpps" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_000F00(53,U) , U ), - INST(kX86InstIdVrcpss , "vrcpss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(53,U) , U ), - INST(kX86InstIdVroundpd , "vroundpd" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_660F3A(09,U) , U ), - INST(kX86InstIdVroundps , "vroundps" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , E(________) , O_660F3A(08,U) , U ), - INST(kX86InstIdVroundsd , "vroundsd" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(0B,U) , U ), - INST(kX86InstIdVroundss , "vroundss" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , E(________) , O_660F3A(0A,U) , U ), - INST(kX86InstIdVrsqrtps , "vrsqrtps" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_000F00(52,U) , U ), - INST(kX86InstIdVrsqrtss , "vrsqrtss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(52,U) , U ), - INST(kX86InstIdVshufpd , "vshufpd" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_660F00(C6,U) , U ), - INST(kX86InstIdVshufps , "vshufps" , G(AvxRvmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , E(________) , O_000F00(C6,U) , U ), - INST(kX86InstIdVsqrtpd , "vsqrtpd" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_660F00(51,U) , U ), - INST(kX86InstIdVsqrtps , "vsqrtps" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(________) , O_000F00(51,U) , U ), - INST(kX86InstIdVsqrtsd , "vsqrtsd" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F20F00(51,U) , U ), - INST(kX86InstIdVsqrtss , "vsqrtss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(51,U) , U ), - INST(kX86InstIdVstmxcsr , "vstmxcsr" , G(AvxM) , F(None) , 0 , O(Mem) , U , U , U , E(________) , O_000F00(AE,3) , U ), - INST(kX86InstIdVsubpd , "vsubpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(5C,U) , U ), - INST(kX86InstIdVsubps , "vsubps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(5C,U) , U ), - INST(kX86InstIdVsubsd , "vsubsd" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F20F00(5C,U) , U ), - INST(kX86InstIdVsubss , "vsubss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , E(________) , O_F30F00(5C,U) , U ), - INST(kX86InstIdVtestpd , "vtestpd" , G(AvxRm_P) , F(Test) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(WWWWWW__) , O_660F38(0F,U) , U ), - INST(kX86InstIdVtestps , "vtestps" , G(AvxRm_P) , F(Test) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , E(WWWWWW__) , O_660F38(0E,U) , U ), - INST(kX86InstIdVucomisd , "vucomisd" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_660F00(2E,U) , U ), - INST(kX86InstIdVucomiss , "vucomiss" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(WWWWWW__) , O_000F00(2E,U) , U ), - INST(kX86InstIdVunpckhpd , "vunpckhpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(15,U) , U ), - INST(kX86InstIdVunpckhps , "vunpckhps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(15,U) , U ), - INST(kX86InstIdVunpcklpd , "vunpcklpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(14,U) , U ), - INST(kX86InstIdVunpcklps , "vunpcklps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(14,U) , U ), - INST(kX86InstIdVxorpd , "vxorpd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_660F00(57,U) , U ), - INST(kX86InstIdVxorps , "vxorps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , E(________) , O_000F00(57,U) , U ), - INST(kX86InstIdVzeroall , "vzeroall" , G(AvxOp) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(77,U)|L, U ), - INST(kX86InstIdVzeroupper , "vzeroupper" , G(AvxOp) , F(None) , 0 , U , U , U , U , E(________) , O_000F00(77,U) , U ), - INST(kX86InstIdWrfsbase , "wrfsbase" , G(X86Rm) , F(None) , 0 , O(Gqd) , U , U , U , E(________) , O_F30F00(AE,2) , U ), - INST(kX86InstIdWrgsbase , "wrgsbase" , G(X86Rm) , F(None) , 0 , O(Gqd) , U , U , U , E(________) , O_F30F00(AE,3) , U ), - INST(kX86InstIdXadd , "xadd" , G(X86Xadd) , F(Xchg)|F(Lock) , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , E(WWWWWW__) , O_000F00(C0,U) , U ), - INST(kX86InstIdXchg , "xchg" , G(X86Xchg) , F(Xchg)|F(Lock) , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , E(________) , O_000000(86,U) , U ), - INST(kX86InstIdXor , "xor" , G(X86Arith) , F(Lock) , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm) , U , U , E(WWWUWW__) , O_000000(30,6) , U ), - INST(kX86InstIdXorpd , "xorpd" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_660F00(57,U) , U ), - INST(kX86InstIdXorps , "xorps" , G(ExtRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , E(________) , O_000F00(57,U) , U ) + // <----------------------------+--------------------+-------------------------------------------+-------------------+------------------------------------+-------------+-------+---------------------------------------------------------------------------------------------------+ + // | | Instruction Opcodes | | Instruction Flags | E-FLAGS | Write | Operands (Gp/Fp/Mm/K/Xmm/Ymm/Zmm Regs, Mem, Imm, Label, None/Undefined) | + // Instruction Id | Instruction Name +---------------------+---------------------+ Instruction Enc. +---------------+--------------------+-------------+---+---+-------------------+-------------------+-------------------+-------------------+-------------------+ + // | | 0:PP-MMM OP/O L/W/EW| 1:PP-MMM OP/O L/W/EW| | Global Flags |A512(ID|VL|kz|rnd|b)| EF:OSZAPCDX |Idx| Sz| [0] 1st Operand | [1] 2nd Operand | [2] 3rd Operand | [3] 4th Operand | [4] 5th Operand | + // <----------------------------+--------------------+---------------------+---------------------+-------------------+---------------+--------------------+-------------+---+---+-------------------+-------------------+-------------------+-------------------+-------------------+ + INST(kInstIdNone , "" , U , U , Enc(None) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdAdc , "adc" , O_000000(10,2,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWWWX__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdAdd , "add" , O_000000(00,0,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWWWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdAddpd , "addpd" , O_660F00(58,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAddps , "addps" , O_000F00(58,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAddsd , "addsd" , O_F20F00(58,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAddss , "addss" , O_F30F00(58,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAddsubpd , "addsubpd" , O_660F00(D0,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAddsubps , "addsubps" , O_F20F00(D0,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAesdec , "aesdec" , O_660F38(DE,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAesdeclast , "aesdeclast" , O_660F38(DF,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAesenc , "aesenc" , O_660F38(DC,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAesenclast , "aesenclast" , O_660F38(DD,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAesimc , "aesimc" , O_660F38(DB,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAeskeygenassist , "aeskeygenassist" , O_660F3A(DF,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdAnd , "and" , O_000000(20,4,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdAndn , "andn" , O_000F38(F2,U,_,_,_), U , Enc(AvxRvm) , F(None) , EF(WWWUUW__), 0 , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , U ), + INST(kX86InstIdAndnpd , "andnpd" , O_660F00(55,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAndnps , "andnps" , O_000F00(55,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAndpd , "andpd" , O_660F00(54,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdAndps , "andps" , O_000F00(54,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdBextr , "bextr" , O_000F38(F7,U,_,_,_), U , Enc(AvxRmv) , F(None) , EF(WUWUUW__), 0 , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , U ), + INST(kX86InstIdBlendpd , "blendpd" , O_660F3A(0D,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdBlendps , "blendps" , O_660F3A(0C,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdBlendvpd , "blendvpd" , O_660F38(15,U,_,_,_), U , Enc(ExtRm) , F(None)|F(Special) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdBlendvps , "blendvps" , O_660F38(14,U,_,_,_), U , Enc(ExtRm) , F(None)|F(Special) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdBlsi , "blsi" , O_000F38(F3,3,_,_,_), U , Enc(AvxVm) , F(None) , EF(WWWUUW__), 0 , 0 , O(Gqd) , O(GqdMem) , U , U , U ), + INST(kX86InstIdBlsmsk , "blsmsk" , O_000F38(F3,2,_,_,_), U , Enc(AvxVm) , F(None) , EF(WWWUUW__), 0 , 0 , O(Gqd) , O(GqdMem) , U , U , U ), + INST(kX86InstIdBlsr , "blsr" , O_000F38(F3,1,_,_,_), U , Enc(AvxVm) , F(None) , EF(WWWUUW__), 0 , 0 , O(Gqd) , O(GqdMem) , U , U , U ), + INST(kX86InstIdBsf , "bsf" , O_000F00(BC,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(UUWUUU__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdBsr , "bsr" , O_000F00(BD,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(UUWUUU__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdBswap , "bswap" , O_000F00(C8,U,_,_,_), U , Enc(X86BSwap) , F(None) , EF(________), 0 , 0 , O(Gqd) , U , U , U , U ), + INST(kX86InstIdBt , "bt" , O_000F00(A3,U,_,_,_), O_000F00(BA,4,_,_,_), Enc(X86BTest) , F(Test) , EF(UU_UUW__), 0 , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U ), + INST(kX86InstIdBtc , "btc" , O_000F00(BB,U,_,_,_), O_000F00(BA,7,_,_,_), Enc(X86BTest) , F(Lock) , EF(UU_UUW__), 0 , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U ), + INST(kX86InstIdBtr , "btr" , O_000F00(B3,U,_,_,_), O_000F00(BA,6,_,_,_), Enc(X86BTest) , F(Lock) , EF(UU_UUW__), 0 , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U ), + INST(kX86InstIdBts , "bts" , O_000F00(AB,U,_,_,_), O_000F00(BA,5,_,_,_), Enc(X86BTest) , F(Lock) , EF(UU_UUW__), 0 , 0 , O(GqdwMem) , O(Gqdw)|O(Imm) , U , U , U ), + INST(kX86InstIdBzhi , "bzhi" , O_000F38(F5,U,_,_,_), U , Enc(AvxRmv) , F(None) , EF(WWWUUW__), 0 , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , U ), + INST(kX86InstIdCall , "call" , O_000000(FF,2,_,_,_), O_000000(E8,U,_,_,_), Enc(X86Call) , F(Flow) , EF(________), 0 , 0 , O(GqdMem)|O(LbImm), U , U , U , U ), + INST(kX86InstIdCbw , "cbw" , O_660000(98,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCdq , "cdq" , O_000000(99,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCdqe , "cdqe" , O_000000(98,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdClc , "clc" , O_000000(F8,U,_,_,_), U , Enc(X86Op) , F(None) , EF(_____W__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCld , "cld" , O_000000(FC,U,_,_,_), U , Enc(X86Op) , F(None) , EF(______W_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdClflush , "clflush" , O_000F00(AE,7,_,_,_), U , Enc(X86M) , F(None) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdCmc , "cmc" , O_000000(F5,U,_,_,_), U , Enc(X86Op) , F(None) , EF(_____X__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmova , "cmova" , O_000F00(47,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R__R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovae , "cmovae" , O_000F00(43,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovb , "cmovb" , O_000F00(42,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovbe , "cmovbe" , O_000F00(46,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R__R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovc , "cmovc" , O_000F00(42,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmove , "cmove" , O_000F00(44,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovg , "cmovg" , O_000F00(4F,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RRR_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovge , "cmovge" , O_000F00(4D,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RR______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovl , "cmovl" , O_000F00(4C,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RR______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovle , "cmovle" , O_000F00(4E,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RRR_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovna , "cmovna" , O_000F00(46,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R__R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnae , "cmovnae" , O_000F00(42,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnb , "cmovnb" , O_000F00(43,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnbe , "cmovnbe" , O_000F00(47,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R__R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnc , "cmovnc" , O_000F00(43,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_____R__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovne , "cmovne" , O_000F00(45,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovng , "cmovng" , O_000F00(4E,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RRR_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnge , "cmovnge" , O_000F00(4C,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RR______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnl , "cmovnl" , O_000F00(4D,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RR______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnle , "cmovnle" , O_000F00(4F,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(RRR_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovno , "cmovno" , O_000F00(41,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(R_______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnp , "cmovnp" , O_000F00(4B,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(____R___), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovns , "cmovns" , O_000F00(49,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_R______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovnz , "cmovnz" , O_000F00(45,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovo , "cmovo" , O_000F00(40,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(R_______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovp , "cmovp" , O_000F00(4A,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(____R___), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovpe , "cmovpe" , O_000F00(4A,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(____R___), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovpo , "cmovpo" , O_000F00(4B,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(____R___), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovs , "cmovs" , O_000F00(48,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(_R______), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmovz , "cmovz" , O_000F00(44,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(__R_____), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdCmp , "cmp" , O_000000(38,7,_,_,_), U , Enc(X86Arith) , F(Test) , EF(WWWWWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdCmppd , "cmppd" , O_660F00(C2,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdCmpps , "cmpps" , O_000F00(C2,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdCmpsB , "cmps_b" , O_000000(A6,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmpsD , "cmps_d" , O_000000(A7,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmpsQ , "cmps_q" , O_000000(A7,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmpsW , "cmps_w" , O_000000(A7,U,_,_,_), U , Enc(X86Op_66H) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmpsd , "cmpsd" , O_F20F00(C2,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdCmpss , "cmpss" , O_F30F00(C2,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdCmpxchg , "cmpxchg" , O_000F00(B0,U,_,_,_), U , Enc(X86RmReg) , F(Lock)|F(Special) , EF(WWWWWW__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCmpxchg16b , "cmpxchg16b" , O_000F00(C7,1,_,W,_), U , Enc(X86M) , F(None)|F(Special) , EF(__W_____), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdCmpxchg8b , "cmpxchg8b" , O_000F00(C7,1,_,_,_), U , Enc(X86M) , F(None)|F(Special) , EF(__W_____), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdComisd , "comisd" , O_660F00(2F,U,_,_,_), U , Enc(ExtRm) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdComiss , "comiss" , O_000F00(2F,U,_,_,_), U , Enc(ExtRm) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCpuid , "cpuid" , O_000F00(A2,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCqo , "cqo" , O_000000(99,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCrc32 , "crc32" , O_F20F38(F0,U,_,_,_), U , Enc(ExtCrc) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(GqdwbMem) , U , U , U ), + INST(kX86InstIdCvtdq2pd , "cvtdq2pd" , O_F30F00(E6,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtdq2ps , "cvtdq2ps" , O_000F00(5B,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtpd2dq , "cvtpd2dq" , O_F20F00(E6,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtpd2pi , "cvtpd2pi" , O_660F00(2D,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtpd2ps , "cvtpd2ps" , O_660F00(5A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtpi2pd , "cvtpi2pd" , O_660F00(2A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(MmMem) , U , U , U ), + INST(kX86InstIdCvtpi2ps , "cvtpi2ps" , O_000F00(2A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(MmMem) , U , U , U ), + INST(kX86InstIdCvtps2dq , "cvtps2dq" , O_660F00(5B,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtps2pd , "cvtps2pd" , O_000F00(5A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtps2pi , "cvtps2pi" , O_000F00(2D,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtsd2si , "cvtsd2si" , O_F20F00(2D,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtsd2ss , "cvtsd2ss" , O_F20F00(5A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtsi2sd , "cvtsi2sd" , O_F20F00(2A,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(GqdMem) , U , U , U ), + INST(kX86InstIdCvtsi2ss , "cvtsi2ss" , O_F30F00(2A,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(GqdMem) , U , U , U ), + INST(kX86InstIdCvtss2sd , "cvtss2sd" , O_F30F00(5A,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvtss2si , "cvtss2si" , O_F30F00(2D,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttpd2dq , "cvttpd2dq" , O_660F00(E6,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttpd2pi , "cvttpd2pi" , O_660F00(2C,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttps2dq , "cvttps2dq" , O_F30F00(5B,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttps2pi , "cvttps2pi" , O_000F00(2C,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttsd2si , "cvttsd2si" , O_F20F00(2C,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCvttss2si , "cvttss2si" , O_F30F00(2C,U,_,_,_), U , Enc(ExtRm_Q) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdCwd , "cwd" , O_660000(99,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdCwde , "cwde" , O_000000(98,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdDaa , "daa" , O_000000(27,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(UWWXWX__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdDas , "das" , O_000000(2F,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(UWWXWX__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdDec , "dec" , O_000000(FE,1,_,_,_), O_000000(48,U,_,_,_), Enc(X86IncDec) , F(Lock) , EF(WWWWW___), 0 , 0 , O(GqdwbMem) , U , U , U , U ), + INST(kX86InstIdDiv , "div" , O_000000(F6,6,_,_,_), U , Enc(X86Rm_B) , F(None)|F(Special) , EF(UUUUUU__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdDivpd , "divpd" , O_660F00(5E,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdDivps , "divps" , O_000F00(5E,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdDivsd , "divsd" , O_F20F00(5E,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdDivss , "divss" , O_F30F00(5E,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdDppd , "dppd" , O_660F3A(41,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdDpps , "dpps" , O_660F3A(40,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdEmms , "emms" , O_000F00(77,U,_,_,_), U , Enc(X86Op) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdEnter , "enter" , O_000000(C8,U,_,_,_), U , Enc(X86Enter) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdExtractps , "extractps" , O_660F3A(17,U,_,_,_), O_660F3A(17,U,_,_,_), Enc(ExtExtract) , F(Move) , EF(________), 0 , 8 , O(GqdMem) , O(Xmm) , U , U , U ), + INST(kX86InstIdExtrq , "extrq" , O_660F00(79,U,_,_,_), O_660F00(78,0,_,_,_), Enc(ExtExtrq) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(Xmm)|O(Imm) , O(None)|O(Imm) , U , U ), + INST(kX86InstIdF2xm1 , "f2xm1" , O_00_X(D9F0,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFabs , "fabs" , O_00_X(D9E1,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFadd , "fadd" , O_00_X(C0C0,0) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFaddp , "faddp" , O_00_X(DEC0,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFbld , "fbld" , O_000000(DF,4,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFbstp , "fbstp" , O_000000(DF,6,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFchs , "fchs" , O_00_X(D9E0,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFclex , "fclex" , O_9B_X(DBE2,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFcmovb , "fcmovb" , O_00_X(DAC0,U) , U , Enc(FpuR) , F(Fp) , EF(_____R__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovbe , "fcmovbe" , O_00_X(DAD0,U) , U , Enc(FpuR) , F(Fp) , EF(__R__R__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmove , "fcmove" , O_00_X(DAC8,U) , U , Enc(FpuR) , F(Fp) , EF(__R_____), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovnb , "fcmovnb" , O_00_X(DBC0,U) , U , Enc(FpuR) , F(Fp) , EF(_____R__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovnbe , "fcmovnbe" , O_00_X(DBD0,U) , U , Enc(FpuR) , F(Fp) , EF(__R__R__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovne , "fcmovne" , O_00_X(DBC8,U) , U , Enc(FpuR) , F(Fp) , EF(__R_____), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovnu , "fcmovnu" , O_00_X(DBD8,U) , U , Enc(FpuR) , F(Fp) , EF(____R___), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcmovu , "fcmovu" , O_00_X(DAD8,U) , U , Enc(FpuR) , F(Fp) , EF(____R___), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcom , "fcom" , O_00_X(D0D0,2) , U , Enc(FpuCom) , F(Fp) , EF(________), 0 , 0 , O(Fp)|O(Mem) , O(Fp) , U , U , U ), + INST(kX86InstIdFcomi , "fcomi" , O_00_X(DBF0,U) , U , Enc(FpuR) , F(Fp) , EF(WWWWWW__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcomip , "fcomip" , O_00_X(DFF0,U) , U , Enc(FpuR) , F(Fp) , EF(WWWWWW__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFcomp , "fcomp" , O_00_X(D8D8,3) , U , Enc(FpuCom) , F(Fp) , EF(________), 0 , 0 , O(Fp)|O(Mem) , O(Fp) , U , U , U ), + INST(kX86InstIdFcompp , "fcompp" , O_00_X(DED9,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFcos , "fcos" , O_00_X(D9FF,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFdecstp , "fdecstp" , O_00_X(D9F6,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFdiv , "fdiv" , O_00_X(F0F8,6) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFdivp , "fdivp" , O_00_X(DEF8,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFdivr , "fdivr" , O_00_X(F8F0,7) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFdivrp , "fdivrp" , O_00_X(DEF0,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFemms , "femms" , O_000F00(0E,U,_,_,_), U , Enc(X86Op) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFfree , "ffree" , O_00_X(DDC0,U) , U , Enc(FpuR) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFiadd , "fiadd" , O_000000(DA,0,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFicom , "ficom" , O_000000(DA,2,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFicomp , "ficomp" , O_000000(DA,3,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFidiv , "fidiv" , O_000000(DA,6,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFidivr , "fidivr" , O_000000(DA,7,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFild , "fild" , O_000000(DB,0,_,_,_), O_000000(DF,5,_,_,_), Enc(FpuM) , F(Fp)|F(Mem2_4_8) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFimul , "fimul" , O_000000(DA,1,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFincstp , "fincstp" , O_00_X(D9F7,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFinit , "finit" , O_9B_X(DBE3,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFist , "fist" , O_000000(DB,2,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFistp , "fistp" , O_000000(DB,3,_,_,_), O_000000(DF,7,_,_,_), Enc(FpuM) , F(Fp)|F(Mem2_4_8) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFisttp , "fisttp" , O_000000(DB,1,_,_,_), O_000000(DD,1,_,_,_), Enc(FpuM) , F(Fp)|F(Mem2_4_8) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFisub , "fisub" , O_000000(DA,4,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFisubr , "fisubr" , O_000000(DA,5,_,_,_), U , Enc(FpuM) , F(Fp)|F(Mem2_4) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFld , "fld" , O_000000(D9,0,_,_,_), O_000000(DB,5,_,_,_), Enc(FpuFldFst) , F(Fp)|F(Mem4_8_10) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFld1 , "fld1" , O_00_X(D9E8,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldcw , "fldcw" , O_000000(D9,5,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFldenv , "fldenv" , O_000000(D9,4,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFldl2e , "fldl2e" , O_00_X(D9EA,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldl2t , "fldl2t" , O_00_X(D9E9,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldlg2 , "fldlg2" , O_00_X(D9EC,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldln2 , "fldln2" , O_00_X(D9ED,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldpi , "fldpi" , O_00_X(D9EB,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFldz , "fldz" , O_00_X(D9EE,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFmul , "fmul" , O_00_X(C8C8,1) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFmulp , "fmulp" , O_00_X(DEC8,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFnclex , "fnclex" , O_00_X(DBE2,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFninit , "fninit" , O_00_X(DBE3,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFnop , "fnop" , O_00_X(D9D0,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFnsave , "fnsave" , O_000000(DD,6,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFnstcw , "fnstcw" , O_000000(D9,7,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFnstenv , "fnstenv" , O_000000(D9,6,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFnstsw , "fnstsw" , O_000000(DD,7,_,_,_), O_00_X(DFE0,U) , Enc(FpuStsw) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFpatan , "fpatan" , O_00_X(D9F3,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFprem , "fprem" , O_00_X(D9F8,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFprem1 , "fprem1" , O_00_X(D9F5,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFptan , "fptan" , O_00_X(D9F2,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFrndint , "frndint" , O_00_X(D9FC,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFrstor , "frstor" , O_000000(DD,4,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFsave , "fsave" , O_9B0000(DD,6,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFscale , "fscale" , O_00_X(D9FD,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFsin , "fsin" , O_00_X(D9FE,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFsincos , "fsincos" , O_00_X(D9FB,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFsqrt , "fsqrt" , O_00_X(D9FA,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFst , "fst" , O_000000(D9,2,_,_,_), U , Enc(FpuFldFst) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFstcw , "fstcw" , O_9B0000(D9,7,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFstenv , "fstenv" , O_9B0000(D9,6,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFstp , "fstp" , O_000000(D9,3,_,_,_), O_000000(DB,7,_,_,_), Enc(FpuFldFst) , F(Fp)|F(Mem4_8_10) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFstsw , "fstsw" , O_9B0000(DD,7,_,_,_), O_9B_X(DFE0,U) , Enc(FpuStsw) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFsub , "fsub" , O_00_X(E0E8,4) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFsubp , "fsubp" , O_00_X(DEE8,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFsubr , "fsubr" , O_00_X(E8E0,5) , U , Enc(FpuArith) , F(Fp)|F(Mem4_8) , EF(________), 0 , 0 , O(FpMem) , O(Fp) , U , U , U ), + INST(kX86InstIdFsubrp , "fsubrp" , O_00_X(DEE0,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFtst , "ftst" , O_00_X(D9E4,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFucom , "fucom" , O_00_X(DDE0,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFucomi , "fucomi" , O_00_X(DBE8,U) , U , Enc(FpuR) , F(Fp) , EF(WWWWWW__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFucomip , "fucomip" , O_00_X(DFE8,U) , U , Enc(FpuR) , F(Fp) , EF(WWWWWW__), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFucomp , "fucomp" , O_00_X(DDE8,U) , U , Enc(FpuRDef) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFucompp , "fucompp" , O_00_X(DAE9,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFwait , "fwait" , O_000000(DB,U,_,_,_), U , Enc(X86Op) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFxam , "fxam" , O_00_X(D9E5,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFxch , "fxch" , O_00_X(D9C8,U) , U , Enc(FpuR) , F(Fp) , EF(________), 0 , 0 , O(Fp) , U , U , U , U ), + INST(kX86InstIdFxrstor , "fxrstor" , O_000F00(AE,1,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFxsave , "fxsave" , O_000F00(AE,0,_,_,_), U , Enc(X86M) , F(Fp) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdFxtract , "fxtract" , O_00_X(D9F4,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFyl2x , "fyl2x" , O_00_X(D9F1,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdFyl2xp1 , "fyl2xp1" , O_00_X(D9F9,U) , U , Enc(FpuOp) , F(Fp) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdHaddpd , "haddpd" , O_660F00(7C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdHaddps , "haddps" , O_F20F00(7C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdHsubpd , "hsubpd" , O_660F00(7D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdHsubps , "hsubps" , O_F20F00(7D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdIdiv , "idiv" , O_000000(F6,7,_,_,_), U , Enc(X86Rm_B) , F(None)|F(Special) , EF(UUUUUU__), 0 , 0 , 0 , 0 , U , U , U ), + INST(kX86InstIdImul , "imul" , U , U , Enc(X86Imul) , F(None)|F(Special) , EF(WUUUUW__), 0 , 0 , 0 , 0 , U , U , U ), + INST(kX86InstIdInc , "inc" , O_000000(FE,0,_,_,_), O_000000(40,U,_,_,_), Enc(X86IncDec) , F(Lock) , EF(WWWWW___), 0 , 0 , O(GqdwbMem) , U , U , U , U ), + INST(kX86InstIdInsertps , "insertps" , O_660F3A(21,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdInsertq , "insertq" , O_F20F00(79,U,_,_,_), O_F20F00(78,U,_,_,_), Enc(ExtInsertq) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(None)|O(Imm) , O(None)|O(Imm) , U ), + INST(kX86InstIdInt , "int" , O_000000(CC,U,_,_,_), U , Enc(X86Int) , F(None) , EF(_______W), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdJa , "ja" , O_000000(77,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R__R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJae , "jae" , O_000000(73,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJb , "jb" , O_000000(72,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJbe , "jbe" , O_000000(76,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R__R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJc , "jc" , O_000000(72,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJe , "je" , O_000000(74,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJg , "jg" , O_000000(7F,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RRR_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJge , "jge" , O_000000(7D,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RR______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJl , "jl" , O_000000(7C,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RR______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJle , "jle" , O_000000(7E,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RRR_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJna , "jna" , O_000000(76,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R__R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnae , "jnae" , O_000000(72,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnb , "jnb" , O_000000(73,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnbe , "jnbe" , O_000000(77,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R__R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnc , "jnc" , O_000000(73,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_____R__), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJne , "jne" , O_000000(75,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJng , "jng" , O_000000(7E,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RRR_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnge , "jnge" , O_000000(7C,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RR______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnl , "jnl" , O_000000(7D,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RR______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnle , "jnle" , O_000000(7F,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(RRR_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJno , "jno" , O_000000(71,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(R_______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnp , "jnp" , O_000000(7B,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(____R___), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJns , "jns" , O_000000(79,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_R______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJnz , "jnz" , O_000000(75,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJo , "jo" , O_000000(70,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(R_______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJp , "jp" , O_000000(7A,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(____R___), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJpe , "jpe" , O_000000(7A,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(____R___), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJpo , "jpo" , O_000000(7B,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(____R___), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJs , "js" , O_000000(78,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(_R______), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJz , "jz" , O_000000(74,U,_,_,_), U , Enc(X86Jcc) , F(Flow) , EF(__R_____), 0 , 0 , O(Label) , U , U , U , U ), + INST(kX86InstIdJecxz , "jecxz" , O_000000(E3,U,_,_,_), U , Enc(X86Jecxz) , F(Flow)|F(Special) , EF(________), 0 , 0 , O(Gqdw) , O(Label) , U , U , U ), + INST(kX86InstIdJmp , "jmp" , O_000000(FF,4,_,_,_), O_000000(E9,U,_,_,_), Enc(X86Jmp) , F(Flow) , EF(________), 0 , 0 , O(Label)|O(Imm) , U , U , U , U ), + INST(kX86InstIdLahf , "lahf" , O_000000(9F,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(_RRRRR__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdLddqu , "lddqu" , O_F20F00(F0,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(Mem) , U , U , U ), + INST(kX86InstIdLdmxcsr , "ldmxcsr" , O_000F00(AE,2,_,_,_), U , Enc(X86M) , F(None) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdLea , "lea" , O_000000(8D,U,_,_,_), U , Enc(X86Lea) , F(Move) , EF(________), 0 , 0 , O(Gqd) , O(Mem) , U , U , U ), + INST(kX86InstIdLeave , "leave" , O_000000(C9,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdLfence , "lfence" , O_000F00(AE,5,_,_,_), U , Enc(ExtFence) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdLodsB , "lods_b" , O_000000(AC,U,_,_,_), U , Enc(X86Op) , F(Move)|F(Special) , EF(______R_), 0 , 1 , U , U , U , U , U ), + INST(kX86InstIdLodsD , "lods_d" , O_000000(AD,U,_,_,_), U , Enc(X86Op) , F(Move)|F(Special) , EF(______R_), 0 , 4 , U , U , U , U , U ), + INST(kX86InstIdLodsQ , "lods_q" , O_000000(AD,U,_,W,_), U , Enc(X86Op) , F(Move)|F(Special) , EF(______R_), 0 , 8 , U , U , U , U , U ), + INST(kX86InstIdLodsW , "lods_w" , O_000000(AD,U,_,_,_), U , Enc(X86Op_66H) , F(Move)|F(Special) , EF(______R_), 0 , 2 , U , U , U , U , U ), + INST(kX86InstIdLzcnt , "lzcnt" , O_F30F00(BD,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(UUWUUW__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdMaskmovdqu , "maskmovdqu" , O_660F00(57,U,_,_,_), U , Enc(ExtRm) , F(None)|F(Special) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , U , U , U ), + INST(kX86InstIdMaskmovq , "maskmovq" , O_000F00(F7,U,_,_,_), U , Enc(ExtRm) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mm) , O(Mm) , U , U , U ), + INST(kX86InstIdMaxpd , "maxpd" , O_660F00(5F,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMaxps , "maxps" , O_000F00(5F,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMaxsd , "maxsd" , O_F20F00(5F,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMaxss , "maxss" , O_F30F00(5F,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMfence , "mfence" , O_000F00(AE,6,_,_,_), U , Enc(ExtFence) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMinpd , "minpd" , O_660F00(5D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMinps , "minps" , O_000F00(5D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMinsd , "minsd" , O_F20F00(5D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMinss , "minss" , O_F30F00(5D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMonitor , "monitor" , O_000F01(C8,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMov , "mov" , U , U , Enc(X86Mov) , F(Move) , EF(________), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdMovPtr , "mov_ptr" , O_000000(A0,U,_,_,_), O_000000(A2,U,_,_,_), Enc(X86MovPtr) , F(Move)|F(Special) , EF(________), 0 , 0 , O(Gqdwb) , O(Imm) , U , U , U ), + INST(kX86InstIdMovapd , "movapd" , O_660F00(28,U,_,_,_), O_660F00(29,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovaps , "movaps" , O_000F00(28,U,_,_,_), O_000F00(29,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovbe , "movbe" , O_000F38(F0,U,_,_,_), O_000F38(F1,U,_,_,_), Enc(ExtMovBe) , F(Move) , EF(________), 0 , 0 , O(GqdwMem) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdMovd , "movd" , O_000F00(6E,U,_,_,_), O_000F00(7E,U,_,_,_), Enc(ExtMovD) , F(Move) , EF(________), 0 , 16, O(Gd)|O(MmXmmMem) , O(Gd)|O(MmXmmMem) , U , U , U ), + INST(kX86InstIdMovddup , "movddup" , O_F20F00(12,U,_,_,_), U , Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovdq2q , "movdq2q" , O_F20F00(D6,U,_,_,_), U , Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovdqa , "movdqa" , O_660F00(6F,U,_,_,_), O_660F00(7F,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovdqu , "movdqu" , O_F30F00(6F,U,_,_,_), O_F30F00(7F,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovhlps , "movhlps" , O_000F00(12,U,_,_,_), U , Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovhpd , "movhpd" , O_660F00(16,U,_,_,_), O_660F00(17,U,_,_,_), Enc(ExtMov) , F(None) , EF(________), 8 , 8 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovhps , "movhps" , O_000F00(16,U,_,_,_), O_000F00(17,U,_,_,_), Enc(ExtMov) , F(None) , EF(________), 8 , 8 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovlhps , "movlhps" , O_000F00(16,U,_,_,_), U , Enc(ExtMov) , F(None) , EF(________), 8 , 8 , O(Xmm) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovlpd , "movlpd" , O_660F00(12,U,_,_,_), O_660F00(13,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovlps , "movlps" , O_000F00(12,U,_,_,_), O_000F00(13,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovmskpd , "movmskpd" , O_660F00(50,U,_,_,_), U , Enc(ExtMovNoRexW) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovmskps , "movmskps" , O_000F00(50,U,_,_,_), U , Enc(ExtMovNoRexW) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovntdq , "movntdq" , U , O_660F00(E7,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(Mem) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovntdqa , "movntdqa" , O_660F38(2A,U,_,_,_), U , Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(Mem) , U , U , U ), + INST(kX86InstIdMovnti , "movnti" , U , O_000F00(C3,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(Mem) , O(Gqd) , U , U , U ), + INST(kX86InstIdMovntpd , "movntpd" , U , O_660F00(2B,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(Mem) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovntps , "movntps" , U , O_000F00(2B,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(Mem) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovntq , "movntq" , U , O_000F00(E7,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(Mem) , O(Mm) , U , U , U ), + INST(kX86InstIdMovntsd , "movntsd" , U , O_F20F00(2B,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 8 , O(Mem) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovntss , "movntss" , U , O_F30F00(2B,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 4 , O(Mem) , O(Xmm) , U , U , U ), + INST(kX86InstIdMovq , "movq" , U , U , Enc(ExtMovQ) , F(Move) , EF(________), 0 , 16, O(Gq)|O(MmXmmMem) , O(Gq)|O(MmXmmMem) , U , U , U ), + INST(kX86InstIdMovq2dq , "movq2dq" , O_F30F00(D6,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(Mm) , U , U , U ), + INST(kX86InstIdMovsB , "movs_b" , O_000000(A4,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMovsD , "movs_d" , O_000000(A5,U,_,_,_), U , Enc(X86Op) , F(Move)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMovsQ , "movs_q" , O_000000(A5,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMovsW , "movs_w" , O_000000(A5,U,_,_,_), U , Enc(X86Op_66H) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdMovsd , "movsd" , O_F20F00(10,U,_,_,_), O_F20F00(11,U,_,_,_), Enc(ExtMov) , F(Move) |F(Z) , EF(________), 0 , 8 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovshdup , "movshdup" , O_F30F00(16,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovsldup , "movsldup" , O_F30F00(12,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovss , "movss" , O_F30F00(10,U,_,_,_), O_F30F00(11,U,_,_,_), Enc(ExtMov) , F(Move) |F(Z) , EF(________), 0 , 4 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovsx , "movsx" , O_000F00(BE,U,_,_,_), U , Enc(X86MovSxZx) , F(Move) , EF(________), 0 , 0 , O(Gqdw) , O(GwbMem) , U , U , U ), + INST(kX86InstIdMovsxd , "movsxd" , O_000000(63,U,_,_,_), U , Enc(X86MovSxd) , F(Move) , EF(________), 0 , 0 , O(Gq) , O(GdMem) , U , U , U ), + INST(kX86InstIdMovupd , "movupd" , O_660F00(10,U,_,_,_), O_660F00(11,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovups , "movups" , O_000F00(10,U,_,_,_), O_000F00(11,U,_,_,_), Enc(ExtMov) , F(Move) , EF(________), 0 , 16, O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMovzx , "movzx" , O_000F00(B6,U,_,_,_), U , Enc(X86MovSxZx) , F(Move) , EF(________), 0 , 0 , O(Gqdw) , O(GwbMem) , U , U , U ), + INST(kX86InstIdMpsadbw , "mpsadbw" , O_660F3A(42,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdMul , "mul" , O_000000(F6,4,_,_,_), U , Enc(X86Rm_B) , F(None)|F(Special) , EF(WUUUUW__), 0 , 0 , 0 , 0 , U , U , U ), + INST(kX86InstIdMulpd , "mulpd" , O_660F00(59,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMulps , "mulps" , O_000F00(59,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMulsd , "mulsd" , O_F20F00(59,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMulss , "mulss" , O_F30F00(59,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdMulx , "mulx" , O_F20F38(F6,U,_,_,_), U , Enc(AvxRvm) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , U ), + INST(kX86InstIdMwait , "mwait" , O_000F01(C9,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdNeg , "neg" , O_000000(F6,3,_,_,_), U , Enc(X86Rm_B) , F(Lock) , EF(WWWWWW__), 0 , 0 , O(GqdwbMem) , U , U , U , U ), + INST(kX86InstIdNop , "nop" , O_000000(90,U,_,_,_), U , Enc(X86Op) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdNot , "not" , O_000000(F6,2,_,_,_), U , Enc(X86Rm_B) , F(Lock) , EF(________), 0 , 0 , O(GqdwbMem) , U , U , U , U ), + INST(kX86InstIdOr , "or" , O_000000(08,1,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdOrpd , "orpd" , O_660F00(56,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdOrps , "orps" , O_000F00(56,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPabsb , "pabsb" , O_000F38(1C,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPabsd , "pabsd" , O_000F38(1E,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPabsw , "pabsw" , O_000F38(1D,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPackssdw , "packssdw" , O_000F00(6B,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPacksswb , "packsswb" , O_000F00(63,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPackusdw , "packusdw" , O_660F38(2B,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPackuswb , "packuswb" , O_000F00(67,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddb , "paddb" , O_000F00(FC,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddd , "paddd" , O_000F00(FE,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddq , "paddq" , O_000F00(D4,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddsb , "paddsb" , O_000F00(EC,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddsw , "paddsw" , O_000F00(ED,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddusb , "paddusb" , O_000F00(DC,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddusw , "paddusw" , O_000F00(DD,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPaddw , "paddw" , O_000F00(FD,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPalignr , "palignr" , O_000F3A(0F,U,_,_,_), U , Enc(ExtRmi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPand , "pand" , O_000F00(DB,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPandn , "pandn" , O_000F00(DF,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPause , "pause" , O_F30000(90,U,_,_,_), U , Enc(X86Op) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdPavgb , "pavgb" , O_000F00(E0,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPavgw , "pavgw" , O_000F00(E3,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPblendvb , "pblendvb" , O_660F38(10,U,_,_,_), U , Enc(ExtRm) , F(None)|F(Special) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPblendw , "pblendw" , O_660F3A(0E,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPclmulqdq , "pclmulqdq" , O_660F3A(44,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPcmpeqb , "pcmpeqb" , O_000F00(74,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpeqd , "pcmpeqd" , O_000F00(76,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpeqq , "pcmpeqq" , O_660F38(29,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPcmpeqw , "pcmpeqw" , O_000F00(75,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpestri , "pcmpestri" , O_660F3A(61,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPcmpestrm , "pcmpestrm" , O_660F3A(60,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPcmpgtb , "pcmpgtb" , O_000F00(64,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpgtd , "pcmpgtd" , O_000F00(66,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpgtq , "pcmpgtq" , O_660F38(37,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPcmpgtw , "pcmpgtw" , O_000F00(65,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPcmpistri , "pcmpistri" , O_660F3A(63,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPcmpistrm , "pcmpistrm" , O_660F3A(62,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPdep , "pdep" , O_F20F38(F5,U,_,_,_), U , Enc(AvxRvm) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , U ), + INST(kX86InstIdPext , "pext" , O_F30F38(F5,U,_,_,_), U , Enc(AvxRvm) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(Gqd) , O(GqdMem) , U , U ), + INST(kX86InstIdPextrb , "pextrb" , O_000F3A(14,U,_,_,_), O_000F3A(14,U,_,_,_), Enc(ExtExtract) , F(Move) , EF(________), 0 , 8 , O(Gd)|O(Gb)|O(Mem), O(Xmm) , U , U , U ), + INST(kX86InstIdPextrd , "pextrd" , O_000F3A(16,U,_,_,_), O_000F3A(16,U,_,_,_), Enc(ExtExtract) , F(Move) , EF(________), 0 , 8 , O(GdMem) , O(Xmm) , U , U , U ), + INST(kX86InstIdPextrq , "pextrq" , O_000F3A(16,U,_,W,_), O_000F3A(16,U,_,W,_), Enc(ExtExtract) , F(Move) , EF(________), 0 , 8 , O(GqdMem) , O(Xmm) , U , U , U ), + INST(kX86InstIdPextrw , "pextrw" , O_000F00(C5,U,_,_,_), O_000F3A(15,U,_,_,_), Enc(ExtExtract) , F(Move) , EF(________), 0 , 8 , O(GdMem) , O(MmXmm) , U , U , U ), + INST(kX86InstIdPf2id , "pf2id" , O_000F0F(1D,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPf2iw , "pf2iw" , O_000F0F(1C,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfacc , "pfacc" , O_000F0F(AE,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfadd , "pfadd" , O_000F0F(9E,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfcmpeq , "pfcmpeq" , O_000F0F(B0,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfcmpge , "pfcmpge" , O_000F0F(90,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfcmpgt , "pfcmpgt" , O_000F0F(A0,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfmax , "pfmax" , O_000F0F(A4,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfmin , "pfmin" , O_000F0F(94,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfmul , "pfmul" , O_000F0F(B4,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfnacc , "pfnacc" , O_000F0F(8A,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfpnacc , "pfpnacc" , O_000F0F(8E,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfrcp , "pfrcp" , O_000F0F(96,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfrcpit1 , "pfrcpit1" , O_000F0F(A6,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfrcpit2 , "pfrcpit2" , O_000F0F(B6,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfrsqit1 , "pfrsqit1" , O_000F0F(A7,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfrsqrt , "pfrsqrt" , O_000F0F(97,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfsub , "pfsub" , O_000F0F(9A,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPfsubr , "pfsubr" , O_000F0F(AA,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPhaddd , "phaddd" , O_000F38(02,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPhaddsw , "phaddsw" , O_000F38(03,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPhaddw , "phaddw" , O_000F38(01,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPhminposuw , "phminposuw" , O_660F38(41,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPhsubd , "phsubd" , O_000F38(06,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPhsubsw , "phsubsw" , O_000F38(07,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPhsubw , "phsubw" , O_000F38(05,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPi2fd , "pi2fd" , O_000F0F(0D,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPi2fw , "pi2fw" , O_000F0F(0C,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPinsrb , "pinsrb" , O_660F3A(20,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(GdMem) , O(Imm) , U , U ), + INST(kX86InstIdPinsrd , "pinsrd" , O_660F3A(22,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(GdMem) , O(Imm) , U , U ), + INST(kX86InstIdPinsrq , "pinsrq" , O_660F3A(22,U,_,W,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(GqMem) , O(Imm) , U , U ), + INST(kX86InstIdPinsrw , "pinsrw" , O_000F00(C4,U,_,_,_), U , Enc(ExtRmi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(GdMem) , O(Imm) , U , U ), + INST(kX86InstIdPmaddubsw , "pmaddubsw" , O_000F38(04,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmaddwd , "pmaddwd" , O_000F00(F5,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmaxsb , "pmaxsb" , O_660F38(3C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmaxsd , "pmaxsd" , O_660F38(3D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmaxsw , "pmaxsw" , O_000F00(EE,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmaxub , "pmaxub" , O_000F00(DE,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmaxud , "pmaxud" , O_660F38(3F,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmaxuw , "pmaxuw" , O_660F38(3E,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPminsb , "pminsb" , O_660F38(38,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPminsd , "pminsd" , O_660F38(39,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPminsw , "pminsw" , O_000F00(EA,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPminub , "pminub" , O_000F00(DA,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPminud , "pminud" , O_660F38(3B,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPminuw , "pminuw" , O_660F38(3A,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovmskb , "pmovmskb" , O_000F00(D7,U,_,_,_), U , Enc(ExtRm_PQ) , F(Move) , EF(________), 0 , 8 , O(Gqd) , O(MmXmm) , U , U , U ), + INST(kX86InstIdPmovsxbd , "pmovsxbd" , O_660F38(21,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovsxbq , "pmovsxbq" , O_660F38(22,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovsxbw , "pmovsxbw" , O_660F38(20,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovsxdq , "pmovsxdq" , O_660F38(25,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovsxwd , "pmovsxwd" , O_660F38(23,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovsxwq , "pmovsxwq" , O_660F38(24,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxbd , "pmovzxbd" , O_660F38(31,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxbq , "pmovzxbq" , O_660F38(32,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxbw , "pmovzxbw" , O_660F38(30,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxdq , "pmovzxdq" , O_660F38(35,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxwd , "pmovzxwd" , O_660F38(33,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmovzxwq , "pmovzxwq" , O_660F38(34,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmuldq , "pmuldq" , O_660F38(28,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmulhrsw , "pmulhrsw" , O_000F38(0B,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmulhuw , "pmulhuw" , O_000F00(E4,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmulhw , "pmulhw" , O_000F00(E5,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmulld , "pmulld" , O_660F38(40,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPmullw , "pmullw" , O_000F00(D5,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPmuludq , "pmuludq" , O_000F00(F4,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPop , "pop" , O_000000(8F,0,_,_,_), O_000000(58,U,_,_,_), Enc(X86Pop) , F(None)|F(Special) , EF(________), 0 , 0 , 0 , U , U , U , U ), + INST(kX86InstIdPopa , "popa" , O_000000(61,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdPopcnt , "popcnt" , O_F30F00(B8,U,_,_,_), U , Enc(X86RegRm) , F(None) , EF(WWWWWW__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdPopf , "popf" , O_000000(9D,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWWW), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdPor , "por" , O_000F00(EB,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPrefetch , "prefetch" , O_000F00(18,U,_,_,_), U , Enc(ExtPrefetch) , F(None) , EF(________), 0 , 0 , O(Mem) , O(Imm) , U , U , U ), + INST(kX86InstIdPrefetch3dNow , "prefetch_3dnow" , O_000F00(0D,0,_,_,_), U , Enc(X86M) , F(None) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdPrefetchw3dNow , "prefetchw_3dnow" , O_000F00(0D,1,_,_,_), U , Enc(X86M) , F(None) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdPsadbw , "psadbw" , O_000F00(F6,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPshufb , "pshufb" , O_000F38(00,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPshufd , "pshufd" , O_660F00(70,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPshufhw , "pshufhw" , O_F30F00(70,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPshuflw , "pshuflw" , O_F20F00(70,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdPshufw , "pshufw" , O_000F00(70,U,_,_,_), U , Enc(ExtRmi_P) , F(Move) , EF(________), 0 , 8 , O(Mm) , O(MmMem) , O(Imm) , U , U ), + INST(kX86InstIdPsignb , "psignb" , O_000F38(08,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsignd , "psignd" , O_000F38(0A,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsignw , "psignw" , O_000F38(09,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPslld , "pslld" , O_000F00(F2,U,_,_,_), O_000F00(72,6,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPslldq , "pslldq" , U , O_660F00(73,7,_,_,_), Enc(ExtRmRi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(Imm) , U , U , U ), + INST(kX86InstIdPsllq , "psllq" , O_000F00(F3,U,_,_,_), O_000F00(73,6,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsllw , "psllw" , O_000F00(F1,U,_,_,_), O_000F00(71,6,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsrad , "psrad" , O_000F00(E2,U,_,_,_), O_000F00(72,4,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsraw , "psraw" , O_000F00(E1,U,_,_,_), O_000F00(71,4,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsrld , "psrld" , O_000F00(D2,U,_,_,_), O_000F00(72,2,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsrldq , "psrldq" , U , O_660F00(73,3,_,_,_), Enc(ExtRmRi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(Imm) , U , U , U ), + INST(kX86InstIdPsrlq , "psrlq" , O_000F00(D3,U,_,_,_), O_000F00(73,2,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsrlw , "psrlw" , O_000F00(D1,U,_,_,_), O_000F00(71,2,_,_,_), Enc(ExtRmRi_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem)|O(Imm), U , U , U ), + INST(kX86InstIdPsubb , "psubb" , O_000F00(F8,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubd , "psubd" , O_000F00(FA,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubq , "psubq" , O_000F00(FB,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubsb , "psubsb" , O_000F00(E8,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubsw , "psubsw" , O_000F00(E9,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubusb , "psubusb" , O_000F00(D8,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubusw , "psubusw" , O_000F00(D9,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPsubw , "psubw" , O_000F00(F9,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPswapd , "pswapd" , O_000F0F(BB,U,_,_,_), U , Enc(3dNow) , F(None) , EF(________), 0 , 0 , O(Mm) , O(MmMem) , U , U , U ), + INST(kX86InstIdPtest , "ptest" , O_660F38(17,U,_,_,_), U , Enc(ExtRm) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPunpckhbw , "punpckhbw" , O_000F00(68,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPunpckhdq , "punpckhdq" , O_000F00(6A,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPunpckhqdq , "punpckhqdq" , O_660F00(6D,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPunpckhwd , "punpckhwd" , O_000F00(69,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPunpcklbw , "punpcklbw" , O_000F00(60,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPunpckldq , "punpckldq" , O_000F00(62,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPunpcklqdq , "punpcklqdq" , O_660F00(6C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdPunpcklwd , "punpcklwd" , O_000F00(61,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdPush , "push" , O_000000(FF,6,_,_,_), O_000000(50,U,_,_,_), Enc(X86Push) , F(None)|F(Special) , EF(________), 0 , 0 , 0 , U , U , U , U ), + INST(kX86InstIdPusha , "pusha" , O_000000(60,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdPushf , "pushf" , O_000000(9C,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(RRRRRRRR), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdPxor , "pxor" , O_000F00(EF,U,_,_,_), U , Enc(ExtRm_P) , F(None) , EF(________), 0 , 0 , O(MmXmm) , O(MmXmmMem) , U , U , U ), + INST(kX86InstIdRcl , "rcl" , O_000000(D0,2,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(W____X__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdRcpps , "rcpps" , O_000F00(53,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdRcpss , "rcpss" , O_F30F00(53,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdRcr , "rcr" , O_000000(D0,3,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(W____X__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdRdfsbase , "rdfsbase" , O_F30F00(AE,0,_,_,_), U , Enc(X86Rm) , F(Move) , EF(________), 0 , 8 , O(Gqd) , U , U , U , U ), + INST(kX86InstIdRdgsbase , "rdgsbase" , O_F30F00(AE,1,_,_,_), U , Enc(X86Rm) , F(Move) , EF(________), 0 , 8 , O(Gqd) , U , U , U , U ), + INST(kX86InstIdRdrand , "rdrand" , O_000F00(C7,6,_,_,_), U , Enc(X86Rm) , F(Move) , EF(WWWWWW__), 0 , 8 , O(Gqdw) , U , U , U , U ), + INST(kX86InstIdRdtsc , "rdtsc" , O_000F00(31,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdRdtscp , "rdtscp" , O_000F01(F9,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdRepLodsB , "rep lods_b" , O_000000(AC,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepLodsD , "rep lods_d" , O_000000(AD,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepLodsQ , "rep lods_q" , O_000000(AD,1,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepLodsW , "rep lods_w" , O_660000(AD,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepMovsB , "rep movs_b" , O_000000(A4,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepMovsD , "rep movs_d" , O_000000(A5,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepMovsQ , "rep movs_q" , O_000000(A5,1,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepMovsW , "rep movs_w" , O_660000(A5,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepStosB , "rep stos_b" , O_000000(AA,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepStosD , "rep stos_d" , O_000000(AB,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepStosQ , "rep stos_q" , O_000000(AB,1,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepStosW , "rep stos_w" , O_660000(AB,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(______R_), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdRepeCmpsB , "repe cmps_b" , O_000000(A6,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeCmpsD , "repe cmps_d" , O_000000(A7,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeCmpsQ , "repe cmps_q" , O_000000(A7,1,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeCmpsW , "repe cmps_w" , O_660000(A7,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeScasB , "repe scas_b" , O_000000(AE,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeScasD , "repe scas_d" , O_000000(AF,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeScasQ , "repe scas_q" , O_000000(AF,1,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepeScasW , "repe scas_w" , O_660000(AF,1,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneCmpsB , "repne cmps_b" , O_000000(A6,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneCmpsD , "repne cmps_d" , O_000000(A7,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneCmpsQ , "repne cmps_q" , O_000000(A7,0,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneCmpsW , "repne cmps_w" , O_660000(A7,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneScasB , "repne scas_b" , O_000000(AE,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneScasD , "repne scas_d" , O_000000(AF,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneScasQ , "repne scas_q" , O_000000(AF,0,_,W,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRepneScasW , "repne scas_w" , O_660000(AF,0,_,_,_), U , Enc(X86Rep) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , O(Mem) , O(Mem) , U , U , U ), + INST(kX86InstIdRet , "ret" , O_000000(C2,U,_,_,_), U , Enc(X86Ret) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdRol , "rol" , O_000000(D0,0,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(W____W__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdRor , "ror" , O_000000(D0,1,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(W____W__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdRorx , "rorx" , O_F20F3A(F0,U,_,_,_), U , Enc(AvxRmi) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(GqdMem) , O(Imm) , U , U ), + INST(kX86InstIdRoundpd , "roundpd" , O_660F3A(09,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdRoundps , "roundps" , O_660F3A(08,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdRoundsd , "roundsd" , O_660F3A(0B,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdRoundss , "roundss" , O_660F3A(0A,U,_,_,_), U , Enc(ExtRmi) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdRsqrtps , "rsqrtps" , O_000F00(52,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdRsqrtss , "rsqrtss" , O_F30F00(52,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSahf , "sahf" , O_000000(9E,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(_WWWWW__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdSal , "sal" , O_000000(D0,4,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdSar , "sar" , O_000000(D0,7,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdSarx , "sarx" , O_F30F38(F7,U,_,_,_), U , Enc(AvxRmv) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , U ), + INST(kX86InstIdSbb , "sbb" , O_000000(18,3,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWWWX__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdScasB , "scas_b" , O_000000(AE,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdScasD , "scas_d" , O_000000(AF,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdScasQ , "scas_q" , O_000000(AF,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdScasW , "scas_w" , O_000000(AF,U,_,_,_), U , Enc(X86Op_66H) , F(None)|F(Special) , EF(WWWWWWR_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdSeta , "seta" , O_000F00(97,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R__R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetae , "setae" , O_000F00(93,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetb , "setb" , O_000F00(92,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetbe , "setbe" , O_000F00(96,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R__R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetc , "setc" , O_000F00(92,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSete , "sete" , O_000F00(94,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetg , "setg" , O_000F00(9F,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RRR_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetge , "setge" , O_000F00(9D,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RR______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetl , "setl" , O_000F00(9C,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RR______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetle , "setle" , O_000F00(9E,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RRR_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetna , "setna" , O_000F00(96,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R__R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnae , "setnae" , O_000F00(92,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnb , "setnb" , O_000F00(93,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnbe , "setnbe" , O_000F00(97,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R__R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnc , "setnc" , O_000F00(93,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_____R__), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetne , "setne" , O_000F00(95,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetng , "setng" , O_000F00(9E,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RRR_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnge , "setnge" , O_000F00(9C,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RR______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnl , "setnl" , O_000F00(9D,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RR______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnle , "setnle" , O_000F00(9F,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(RRR_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetno , "setno" , O_000F00(91,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(R_______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnp , "setnp" , O_000F00(9B,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(____R___), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetns , "setns" , O_000F00(99,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_R______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetnz , "setnz" , O_000F00(95,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSeto , "seto" , O_000F00(90,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(R_______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetp , "setp" , O_000F00(9A,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(____R___), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetpe , "setpe" , O_000F00(9A,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(____R___), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetpo , "setpo" , O_000F00(9B,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(____R___), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSets , "sets" , O_000F00(98,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(_R______), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSetz , "setz" , O_000F00(94,U,_,_,_), U , Enc(X86Set) , F(Move) , EF(__R_____), 0 , 1 , O(GbMem) , U , U , U , U ), + INST(kX86InstIdSfence , "sfence" , O_000F00(AE,7,_,_,_), U , Enc(ExtFence) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdShl , "shl" , O_000000(D0,4,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdShld , "shld" , O_000F00(A4,U,_,_,_), U , Enc(X86Shlrd) , F(None)|F(Special) , EF(UWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gb) , U , U , U ), + INST(kX86InstIdShlx , "shlx" , O_660F38(F7,U,_,_,_), U , Enc(AvxRmv) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , U ), + INST(kX86InstIdShr , "shr" , O_000000(D0,5,_,_,_), U , Enc(X86Rot) , F(None)|F(Special) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gb)|O(Imm) , U , U , U ), + INST(kX86InstIdShrd , "shrd" , O_000F00(AC,U,_,_,_), U , Enc(X86Shlrd) , F(None)|F(Special) , EF(UWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , U ), + INST(kX86InstIdShrx , "shrx" , O_F20F38(F7,U,_,_,_), U , Enc(AvxRmv) , F(None) , EF(________), 0 , 0 , O(Gqd) , O(GqdMem) , O(Gqd) , U , U ), + INST(kX86InstIdShufpd , "shufpd" , O_660F00(C6,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdShufps , "shufps" , O_000F00(C6,U,_,_,_), U , Enc(ExtRmi) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdSqrtpd , "sqrtpd" , O_660F00(51,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSqrtps , "sqrtps" , O_000F00(51,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 16, O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSqrtsd , "sqrtsd" , O_F20F00(51,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 8 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSqrtss , "sqrtss" , O_F30F00(51,U,_,_,_), U , Enc(ExtRm) , F(Move) , EF(________), 0 , 4 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdStc , "stc" , O_000000(F9,U,_,_,_), U , Enc(X86Op) , F(None) , EF(_____W__), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdStd , "std" , O_000000(FD,U,_,_,_), U , Enc(X86Op) , F(None) , EF(______W_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdStmxcsr , "stmxcsr" , O_000F00(AE,3,_,_,_), U , Enc(X86M) , F(None) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdStosB , "stos_b" , O_000000(AA,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(______R_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdStosD , "stos_d" , O_000000(AB,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(______R_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdStosQ , "stos_q" , O_000000(AB,U,_,W,_), U , Enc(X86Op) , F(None)|F(Special) , EF(______R_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdStosW , "stos_w" , O_000000(AB,U,_,_,_), U , Enc(X86Op_66H) , F(None)|F(Special) , EF(______R_), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdSub , "sub" , O_000000(28,5,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWWWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdSubpd , "subpd" , O_660F00(5C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSubps , "subps" , O_000F00(5C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSubsd , "subsd" , O_F20F00(5C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdSubss , "subss" , O_F30F00(5C,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdTest , "test" , O_000000(84,U,_,_,_), O_000000(F6,U,_,_,_), Enc(X86Test) , F(Test) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(Gqdwb)|O(Imm) , U , U , U ), + INST(kX86InstIdTzcnt , "tzcnt" , O_F30F00(BC,U,_,_,_), U , Enc(X86RegRm) , F(Move) , EF(UUWUUW__), 0 , 0 , O(Gqdw) , O(GqdwMem) , U , U , U ), + INST(kX86InstIdUcomisd , "ucomisd" , O_660F00(2E,U,_,_,_), U , Enc(ExtRm) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdUcomiss , "ucomiss" , O_000F00(2E,U,_,_,_), U , Enc(ExtRm) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdUd2 , "ud2" , O_000F00(0B,U,_,_,_), U , Enc(X86Op) , F(None) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdUnpckhpd , "unpckhpd" , O_660F00(15,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdUnpckhps , "unpckhps" , O_000F00(15,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdUnpcklpd , "unpcklpd" , O_660F00(14,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdUnpcklps , "unpcklps" , O_000F00(14,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVaddpd , "vaddpd" , O_660F00(58,U,_,I,1), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVaddps , "vaddps" , O_000F00(58,U,_,I,0), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVaddsd , "vaddsd" , O_F20F00(58,U,0,I,1), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaddss , "vaddss" , O_F30F00(58,U,0,I,0), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaddsubpd , "vaddsubpd" , O_660F00(D0,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVaddsubps , "vaddsubps" , O_F20F00(D0,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVaesdec , "vaesdec" , O_660F38(DE,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaesdeclast , "vaesdeclast" , O_660F38(DF,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaesenc , "vaesenc" , O_660F38(DC,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaesenclast , "vaesenclast" , O_660F38(DD,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVaesimc , "vaesimc" , O_660F38(DB,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVaeskeygenassist , "vaeskeygenassist" , O_660F3A(DF,U,_,_,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVandnpd , "vandnpd" , O_660F00(55,U,_,_,1), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVandnps , "vandnps" , O_000F00(55,U,_,_,0), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVandpd , "vandpd" , O_660F00(54,U,_,_,1), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVandps , "vandps" , O_000F00(54,U,_,_,0), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVblendpd , "vblendpd" , O_660F3A(0D,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVblendps , "vblendps" , O_660F3A(0C,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVblendvpd , "vblendvpd" , O_660F3A(4B,U,_,_,_), U , Enc(AvxRvmr_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Xy) , U ), + INST(kX86InstIdVblendvps , "vblendvps" , O_660F3A(4A,U,_,_,_), U , Enc(AvxRvmr_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Xy) , U ), + INST(kX86InstIdVbroadcastf128 , "vbroadcastf128" , O_660F38(1A,U,L,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Mem) , U , U , U ), + INST(kX86InstIdVbroadcasti128 , "vbroadcasti128" , O_660F38(5A,U,L,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Mem) , U , U , U ), + INST(kX86InstIdVbroadcastsd , "vbroadcastsd" , O_660F38(19,U,L,0,1), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVbroadcastss , "vbroadcastss" , O_660F38(18,U,_,0,0), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcmppd , "vcmppd" , O_660F00(C2,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVcmpps , "vcmpps" , O_000F00(C2,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVcmpsd , "vcmpsd" , O_F20F00(C2,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVcmpss , "vcmpss" , O_F30F00(C2,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVcomisd , "vcomisd" , O_660F00(2F,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcomiss , "vcomiss" , O_000F00(2F,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvtdq2pd , "vcvtdq2pd" , O_F30F00(E6,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvtdq2ps , "vcvtdq2ps" , O_000F00(5B,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvtpd2dq , "vcvtpd2dq" , O_F20F00(E6,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvtpd2ps , "vcvtpd2ps" , O_660F00(5A,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvtph2ps , "vcvtph2ps" , O_660F38(13,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvtps2dq , "vcvtps2dq" , O_660F00(5B,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvtps2pd , "vcvtps2pd" , O_000F00(5A,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvtps2ph , "vcvtps2ph" , O_660F3A(1D,U,_,_,_), U , Enc(AvxMri_P) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xy) , O(Imm) , U , U ), + INST(kX86InstIdVcvtsd2si , "vcvtsd2si" , O_F20F00(2D,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvtsd2ss , "vcvtsd2ss" , O_F20F00(5A,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVcvtsi2sd , "vcvtsi2sd" , O_F20F00(2A,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , U , U ), + INST(kX86InstIdVcvtsi2ss , "vcvtsi2ss" , O_F30F00(2A,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , U , U ), + INST(kX86InstIdVcvtss2sd , "vcvtss2sd" , O_F30F00(5A,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVcvtss2si , "vcvtss2si" , O_F20F00(2D,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvttpd2dq , "vcvttpd2dq" , O_660F00(E6,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvttps2dq , "vcvttps2dq" , O_F30F00(5B,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVcvttsd2si , "vcvttsd2si" , O_F20F00(2C,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVcvttss2si , "vcvttss2si" , O_F30F00(2C,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVdivpd , "vdivpd" , O_660F00(5E,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVdivps , "vdivps" , O_000F00(5E,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVdivsd , "vdivsd" , O_F20F00(5E,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVdivss , "vdivss" , O_F30F00(5E,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVdppd , "vdppd" , O_660F3A(41,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVdpps , "vdpps" , O_660F3A(40,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVextractf128 , "vextractf128" , O_660F3A(19,U,L,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Ymm) , O(Imm) , U , U ), + INST(kX86InstIdVextracti128 , "vextracti128" , O_660F3A(39,U,L,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Ymm) , O(Imm) , U , U ), + INST(kX86InstIdVextractps , "vextractps" , O_660F3A(17,U,_,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(GqdMem) , O(Xmm) , O(Imm) , U , U ), + INST(kX86InstIdVfmadd132pd , "vfmadd132pd" , O_660F38(98,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd132ps , "vfmadd132ps" , O_660F38(98,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd132sd , "vfmadd132sd" , O_660F38(99,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmadd132ss , "vfmadd132ss" , O_660F38(99,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmadd213pd , "vfmadd213pd" , O_660F38(A8,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd213ps , "vfmadd213ps" , O_660F38(A8,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd213sd , "vfmadd213sd" , O_660F38(A9,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmadd213ss , "vfmadd213ss" , O_660F38(A9,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmadd231pd , "vfmadd231pd" , O_660F38(B8,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd231ps , "vfmadd231ps" , O_660F38(B8,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmadd231sd , "vfmadd231sd" , O_660F38(B9,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmadd231ss , "vfmadd231ss" , O_660F38(B9,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmaddpd , "vfmaddpd" , O_660F3A(69,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmaddps , "vfmaddps" , O_660F3A(68,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmaddsd , "vfmaddsd" , O_660F3A(6B,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfmaddss , "vfmaddss" , O_660F3A(6A,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfmaddsub132pd , "vfmaddsub132pd" , O_660F38(96,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsub132ps , "vfmaddsub132ps" , O_660F38(96,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsub213pd , "vfmaddsub213pd" , O_660F38(A6,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsub213ps , "vfmaddsub213ps" , O_660F38(A6,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsub231pd , "vfmaddsub231pd" , O_660F38(B6,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsub231ps , "vfmaddsub231ps" , O_660F38(B6,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmaddsubpd , "vfmaddsubpd" , O_660F3A(5D,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmaddsubps , "vfmaddsubps" , O_660F3A(5C,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmsub132pd , "vfmsub132pd" , O_660F38(9A,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub132ps , "vfmsub132ps" , O_660F38(9A,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub132sd , "vfmsub132sd" , O_660F38(9B,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsub132ss , "vfmsub132ss" , O_660F38(9B,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsub213pd , "vfmsub213pd" , O_660F38(AA,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub213ps , "vfmsub213ps" , O_660F38(AA,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub213sd , "vfmsub213sd" , O_660F38(AB,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsub213ss , "vfmsub213ss" , O_660F38(AB,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsub231pd , "vfmsub231pd" , O_660F38(BA,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub231ps , "vfmsub231ps" , O_660F38(BA,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsub231sd , "vfmsub231sd" , O_660F38(BB,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsub231ss , "vfmsub231ss" , O_660F38(BB,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfmsubadd132pd , "vfmsubadd132pd" , O_660F38(97,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubadd132ps , "vfmsubadd132ps" , O_660F38(97,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubadd213pd , "vfmsubadd213pd" , O_660F38(A7,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubadd213ps , "vfmsubadd213ps" , O_660F38(A7,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubadd231pd , "vfmsubadd231pd" , O_660F38(B7,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubadd231ps , "vfmsubadd231ps" , O_660F38(B7,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfmsubaddpd , "vfmsubaddpd" , O_660F3A(5F,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmsubaddps , "vfmsubaddps" , O_660F3A(5E,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmsubpd , "vfmsubpd" , O_660F3A(6D,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmsubps , "vfmsubps" , O_660F3A(6C,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfmsubsd , "vfmsubsd" , O_660F3A(6F,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfmsubss , "vfmsubss" , O_660F3A(6E,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfnmadd132pd , "vfnmadd132pd" , O_660F38(9C,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd132ps , "vfnmadd132ps" , O_660F38(9C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd132sd , "vfnmadd132sd" , O_660F38(9D,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmadd132ss , "vfnmadd132ss" , O_660F38(9D,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmadd213pd , "vfnmadd213pd" , O_660F38(AC,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd213ps , "vfnmadd213ps" , O_660F38(AC,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd213sd , "vfnmadd213sd" , O_660F38(AD,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmadd213ss , "vfnmadd213ss" , O_660F38(AD,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmadd231pd , "vfnmadd231pd" , O_660F38(BC,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd231ps , "vfnmadd231ps" , O_660F38(BC,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmadd231sd , "vfnmadd231sd" , O_660F38(BC,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmadd231ss , "vfnmadd231ss" , O_660F38(BC,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmaddpd , "vfnmaddpd" , O_660F3A(79,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfnmaddps , "vfnmaddps" , O_660F3A(78,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfnmaddsd , "vfnmaddsd" , O_660F3A(7B,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfnmaddss , "vfnmaddss" , O_660F3A(7A,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfnmsub132pd , "vfnmsub132pd" , O_660F38(9E,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub132ps , "vfnmsub132ps" , O_660F38(9E,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub132sd , "vfnmsub132sd" , O_660F38(9F,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsub132ss , "vfnmsub132ss" , O_660F38(9F,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsub213pd , "vfnmsub213pd" , O_660F38(AE,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub213ps , "vfnmsub213ps" , O_660F38(AE,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub213sd , "vfnmsub213sd" , O_660F38(AF,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsub213ss , "vfnmsub213ss" , O_660F38(AF,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsub231pd , "vfnmsub231pd" , O_660F38(BE,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub231ps , "vfnmsub231ps" , O_660F38(BE,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVfnmsub231sd , "vfnmsub231sd" , O_660F38(BF,U,_,W,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsub231ss , "vfnmsub231ss" , O_660F38(BF,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVfnmsubpd , "vfnmsubpd" , O_660F3A(7D,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfnmsubps , "vfnmsubps" , O_660F3A(7C,U,_,_,_), U , Enc(Fma4_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVfnmsubsd , "vfnmsubsd" , O_660F3A(7F,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfnmsubss , "vfnmsubss" , O_660F3A(7E,U,_,_,_), U , Enc(Fma4) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVfrczpd , "vfrczpd" , O_00_M09(81,U,_,_,_), U , Enc(XopRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVfrczps , "vfrczps" , O_00_M09(80,U,_,_,_), U , Enc(XopRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVfrczsd , "vfrczsd" , O_00_M09(83,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVfrczss , "vfrczss" , O_00_M09(82,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVgatherdpd , "vgatherdpd" , O_660F38(92,U,_,W,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVgatherdps , "vgatherdps" , O_660F38(92,U,_,_,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVgatherqpd , "vgatherqpd" , O_660F38(93,U,_,W,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVgatherqps , "vgatherqps" , O_660F38(93,U,_,_,_), U , Enc(AvxGatherEx) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Mem) , O(Xmm) , U , U ), + INST(kX86InstIdVhaddpd , "vhaddpd" , O_660F00(7C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVhaddps , "vhaddps" , O_F20F00(7C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVhsubpd , "vhsubpd" , O_660F00(7D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVhsubps , "vhsubps" , O_F20F00(7D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVinsertf128 , "vinsertf128" , O_660F3A(18,U,L,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVinserti128 , "vinserti128" , O_660F3A(38,U,L,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVinsertps , "vinsertps" , O_660F3A(21,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVlddqu , "vlddqu" , O_F20F00(F0,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , U , U , U ), + INST(kX86InstIdVldmxcsr , "vldmxcsr" , O_000F00(AE,2,_,_,_), U , Enc(AvxM) , F(Avx) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdVmaskmovdqu , "vmaskmovdqu" , O_660F00(F7,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , U , U , U ), + INST(kX86InstIdVmaskmovpd , "vmaskmovpd" , O_660F38(2D,U,_,_,_), O_660F38(2F,U,_,_,_), Enc(AvxRvmMvr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmaskmovps , "vmaskmovps" , O_660F38(2C,U,_,_,_), O_660F38(2E,U,_,_,_), Enc(AvxRvmMvr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmaxpd , "vmaxpd" , O_660F00(5F,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmaxps , "vmaxps" , O_000F00(5F,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmaxsd , "vmaxsd" , O_F20F00(5F,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmaxss , "vmaxss" , O_F30F00(5F,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVminpd , "vminpd" , O_660F00(5D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVminps , "vminps" , O_000F00(5D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVminsd , "vminsd" , O_F20F00(5D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVminss , "vminss" , O_F30F00(5D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmovapd , "vmovapd" , O_660F00(28,U,_,_,_), O_660F00(29,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovaps , "vmovaps" , O_000F00(28,U,_,_,_), O_000F00(29,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovd , "vmovd" , O_660F00(6E,U,_,_,_), O_660F00(7E,U,_,_,_), Enc(AvxRmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVmovddup , "vmovddup" , O_F20F00(12,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovdqa , "vmovdqa" , O_660F00(6F,U,_,_,_), O_660F00(7F,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovdqu , "vmovdqu" , O_F30F00(6F,U,_,_,_), O_F30F00(7F,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovhlps , "vmovhlps" , O_000F00(12,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(Xmm) , U , U ), + INST(kX86InstIdVmovhpd , "vmovhpd" , O_660F00(16,U,_,_,_), O_660F00(17,U,_,_,_), Enc(AvxRvmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , U ), + INST(kX86InstIdVmovhps , "vmovhps" , O_000F00(16,U,_,_,_), O_000F00(17,U,_,_,_), Enc(AvxRvmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , U ), + INST(kX86InstIdVmovlhps , "vmovlhps" , O_000F00(16,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(Xmm) , U , U ), + INST(kX86InstIdVmovlpd , "vmovlpd" , O_660F00(12,U,_,_,_), O_660F00(13,U,_,_,_), Enc(AvxRvmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , U ), + INST(kX86InstIdVmovlps , "vmovlps" , O_000F00(12,U,_,_,_), O_000F00(13,U,_,_,_), Enc(AvxRvmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xmm) , O(Mem) , U , U ), + INST(kX86InstIdVmovmskpd , "vmovmskpd" , O_660F00(50,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(Xy) , U , U , U ), + INST(kX86InstIdVmovmskps , "vmovmskps" , O_000F00(50,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(Xy) , U , U , U ), + INST(kX86InstIdVmovntdq , "vmovntdq" , O_660F00(E7,U,_,_,_), U , Enc(AvxMr) , F(Avx) , EF(________), 0 , 0 , O(Mem) , O(Xy) , U , U , U ), + INST(kX86InstIdVmovntdqa , "vmovntdqa" , O_660F38(2A,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , U , U , U ), + INST(kX86InstIdVmovntpd , "vmovntpd" , O_660F00(2B,U,_,_,_), U , Enc(AvxMr_P) , F(Avx) , EF(________), 0 , 0 , O(Mem) , O(Xy) , U , U , U ), + INST(kX86InstIdVmovntps , "vmovntps" , O_000F00(2B,U,_,_,_), U , Enc(AvxMr_P) , F(Avx) , EF(________), 0 , 0 , O(Mem) , O(Xy) , U , U , U ), + INST(kX86InstIdVmovq , "vmovq" , O_660F00(6E,U,_,W,_), O_660F00(7E,U,_,_,_), Enc(AvxRmMr) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVmovsd , "vmovsd" , O_F20F00(10,U,_,_,_), O_F20F00(11,U,_,_,_), Enc(AvxMovSsSd) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(XmmMem) , O(Xmm) , U , U ), + INST(kX86InstIdVmovshdup , "vmovshdup" , O_F30F00(16,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovsldup , "vmovsldup" , O_F30F00(12,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovss , "vmovss" , O_F30F00(10,U,_,_,_), O_F30F00(11,U,_,_,_), Enc(AvxMovSsSd) , F(Avx) , EF(________), 0 , 0 , O(XmmMem) , O(Xmm) , O(Xmm) , U , U ), + INST(kX86InstIdVmovupd , "vmovupd" , O_660F00(10,U,_,_,_), O_660F00(11,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmovups , "vmovups" , O_000F00(10,U,_,_,_), O_000F00(11,U,_,_,_), Enc(AvxRmMr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(XyMem) , U , U , U ), + INST(kX86InstIdVmpsadbw , "vmpsadbw" , O_660F3A(42,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVmulpd , "vmulpd" , O_660F00(59,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmulps , "vmulps" , O_000F00(59,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmulsd , "vmulsd" , O_F20F00(59,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVmulss , "vmulss" , O_F30F00(59,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVorpd , "vorpd" , O_660F00(56,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVorps , "vorps" , O_000F00(56,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpabsb , "vpabsb" , O_660F38(1C,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpabsd , "vpabsd" , O_660F38(1E,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpabsw , "vpabsw" , O_660F38(1D,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpackssdw , "vpackssdw" , O_660F00(6B,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpacksswb , "vpacksswb" , O_660F00(63,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpackusdw , "vpackusdw" , O_660F38(2B,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpackuswb , "vpackuswb" , O_660F00(67,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddb , "vpaddb" , O_660F00(FC,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddd , "vpaddd" , O_660F00(FE,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddq , "vpaddq" , O_660F00(D4,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddsb , "vpaddsb" , O_660F00(EC,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddsw , "vpaddsw" , O_660F00(ED,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddusb , "vpaddusb" , O_660F00(DC,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddusw , "vpaddusw" , O_660F00(DD,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpaddw , "vpaddw" , O_660F00(FD,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpalignr , "vpalignr" , O_660F3A(0F,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVpand , "vpand" , O_660F00(DB,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpandn , "vpandn" , O_660F00(DF,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpavgb , "vpavgb" , O_660F00(E0,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpavgw , "vpavgw" , O_660F00(E3,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpblendd , "vpblendd" , O_660F3A(02,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVpblendvb , "vpblendvb" , O_660F3A(4C,U,_,_,_), U , Enc(AvxRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Xy) , U ), + INST(kX86InstIdVpblendw , "vpblendw" , O_660F3A(0E,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVpbroadcastb , "vpbroadcastb" , O_660F38(78,U,_,_,0), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVpbroadcastd , "vpbroadcastd" , O_660F38(58,U,_,_,0), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVpbroadcastq , "vpbroadcastq" , O_660F38(59,U,_,_,1), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVpbroadcastw , "vpbroadcastw" , O_660F38(79,U,_,_,0), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVpclmulqdq , "vpclmulqdq" , O_660F3A(44,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcmov , "vpcmov" , O_00_M08(A2,U,_,_,_), U , Enc(XopRvrmRvmr_P), F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVpcmpeqb , "vpcmpeqb" , O_660F00(74,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpeqd , "vpcmpeqd" , O_660F00(76,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpeqq , "vpcmpeqq" , O_660F38(29,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpeqw , "vpcmpeqw" , O_660F00(75,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpestri , "vpcmpestri" , O_660F3A(61,U,_,_,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpcmpestrm , "vpcmpestrm" , O_660F3A(60,U,_,_,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpcmpgtb , "vpcmpgtb" , O_660F00(64,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpgtd , "vpcmpgtd" , O_660F00(66,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpgtq , "vpcmpgtq" , O_660F38(37,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpgtw , "vpcmpgtw" , O_660F00(65,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpcmpistri , "vpcmpistri" , O_660F3A(63,U,_,_,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpcmpistrm , "vpcmpistrm" , O_660F3A(62,U,_,_,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpcomb , "vpcomb" , O_00_M08(CC,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomd , "vpcomd" , O_00_M08(CE,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomq , "vpcomq" , O_00_M08(CF,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomub , "vpcomub" , O_00_M08(EC,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomud , "vpcomud" , O_00_M08(EE,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomuq , "vpcomuq" , O_00_M08(EF,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomuw , "vpcomuw" , O_00_M08(ED,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVpcomw , "vpcomw" , O_00_M08(CD,U,_,_,_), U , Enc(XopRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVperm2f128 , "vperm2f128" , O_660F3A(06,U,L,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , U ), + INST(kX86InstIdVperm2i128 , "vperm2i128" , O_660F3A(46,U,L,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , U ), + INST(kX86InstIdVpermd , "vpermd" , O_660F38(36,U,L,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , U , U ), + INST(kX86InstIdVpermil2pd , "vpermil2pd" , O_66_M03(49,U,_,_,_), U , Enc(AvxRvrmRvmr_P), F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVpermil2ps , "vpermil2ps" , O_66_M03(48,U,_,_,_), U , Enc(AvxRvrmRvmr_P), F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(XyMem) , U ), + INST(kX86InstIdVpermilpd , "vpermilpd" , O_660F38(0D,U,_,_,_), O_660F3A(05,U,_,_,_), Enc(AvxRvmRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpermilps , "vpermilps" , O_660F38(0C,U,_,_,_), O_660F3A(04,U,_,_,_), Enc(AvxRvmRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpermpd , "vpermpd" , O_660F3A(01,U,L,W,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(YmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpermps , "vpermps" , O_660F38(16,U,L,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , U , U ), + INST(kX86InstIdVpermq , "vpermq" , O_660F3A(00,U,L,W,_), U , Enc(AvxRmi) , F(Avx) , EF(________), 0 , 0 , O(Ymm) , O(YmmMem) , O(Imm) , U , U ), + INST(kX86InstIdVpextrb , "vpextrb" , O_660F3A(14,U,_,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(GqdwbMem) , O(Xmm) , O(Imm) , U , U ), + INST(kX86InstIdVpextrd , "vpextrd" , O_660F3A(16,U,_,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(GqdMem) , O(Xmm) , O(Imm) , U , U ), + INST(kX86InstIdVpextrq , "vpextrq" , O_660F3A(16,U,_,W,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(GqMem) , O(Xmm) , O(Imm) , U , U ), + INST(kX86InstIdVpextrw , "vpextrw" , O_660F3A(15,U,_,_,_), U , Enc(AvxMri) , F(Avx) , EF(________), 0 , 0 , O(GqdwMem) , O(Xmm) , O(Imm) , U , U ), + INST(kX86InstIdVpgatherdd , "vpgatherdd" , O_660F38(90,U,_,_,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVpgatherdq , "vpgatherdq" , O_660F38(90,U,_,W,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVpgatherqd , "vpgatherqd" , O_660F38(91,U,_,_,_), U , Enc(AvxGatherEx) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Mem) , O(Xmm) , U , U ), + INST(kX86InstIdVpgatherqq , "vpgatherqq" , O_660F38(91,U,_,W,_), U , Enc(AvxGather) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Mem) , O(Xy) , U , U ), + INST(kX86InstIdVphaddbd , "vphaddbd" , O_00_M09(C2,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddbq , "vphaddbq" , O_00_M09(C3,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddbw , "vphaddbw" , O_00_M09(C1,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddd , "vphaddd" , O_660F38(02,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphadddq , "vphadddq" , O_00_M09(CB,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddsw , "vphaddsw" , O_660F38(03,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphaddubd , "vphaddubd" , O_00_M09(D2,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddubq , "vphaddubq" , O_00_M09(D3,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddubw , "vphaddubw" , O_00_M09(D1,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddudq , "vphaddudq" , O_00_M09(DB,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphadduwd , "vphadduwd" , O_00_M09(D6,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphadduwq , "vphadduwq" , O_00_M09(D7,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddw , "vphaddw" , O_660F38(01,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphaddwd , "vphaddwd" , O_00_M09(C6,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphaddwq , "vphaddwq" , O_00_M09(C7,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphminposuw , "vphminposuw" , O_660F38(41,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphsubbw , "vphsubbw" , O_00_M09(E1,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphsubd , "vphsubd" , O_660F38(06,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphsubdq , "vphsubdq" , O_00_M09(E3,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVphsubsw , "vphsubsw" , O_660F38(07,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphsubw , "vphsubw" , O_660F38(05,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVphsubwd , "vphsubwd" , O_00_M09(E2,U,_,_,_), U , Enc(XopRm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVpinsrb , "vpinsrb" , O_660F3A(20,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqdwbMem) , O(Imm) , U ), + INST(kX86InstIdVpinsrd , "vpinsrd" , O_660F3A(22,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , O(Imm) , U ), + INST(kX86InstIdVpinsrq , "vpinsrq" , O_660F3A(22,U,_,W,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqMem) , O(Imm) , U ), + INST(kX86InstIdVpinsrw , "vpinsrw" , O_660F00(C4,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(GqdwMem) , O(Imm) , U ), + INST(kX86InstIdVpmacsdd , "vpmacsdd" , O_00_M08(9E,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacsdqh , "vpmacsdqh" , O_00_M08(9F,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacsdql , "vpmacsdql" , O_00_M08(97,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacssdd , "vpmacssdd" , O_00_M08(8E,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacssdqh , "vpmacssdqh" , O_00_M08(8F,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacssdql , "vpmacssdql" , O_00_M08(87,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacsswd , "vpmacsswd" , O_00_M08(86,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacssww , "vpmacssww" , O_00_M08(85,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacswd , "vpmacswd" , O_00_M08(96,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmacsww , "vpmacsww" , O_00_M08(95,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmadcsswd , "vpmadcsswd" , O_00_M08(A6,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmadcswd , "vpmadcswd" , O_00_M08(B6,U,_,_,_), U , Enc(XopRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , U ), + INST(kX86InstIdVpmaddubsw , "vpmaddubsw" , O_660F38(04,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaddwd , "vpmaddwd" , O_660F00(F5,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaskmovd , "vpmaskmovd" , O_660F38(8C,U,_,_,_), O_660F38(8E,U,_,_,_), Enc(AvxRvmMvr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaskmovq , "vpmaskmovq" , O_660F38(8C,U,_,W,_), O_660F38(8E,U,_,_,_), Enc(AvxRvmMvr_P) , F(Avx) , EF(________), 0 , 0 , O(XyMem) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxsb , "vpmaxsb" , O_660F38(3C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxsd , "vpmaxsd" , O_660F38(3D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxsw , "vpmaxsw" , O_660F00(EE,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxub , "vpmaxub" , O_660F00(DE,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxud , "vpmaxud" , O_660F38(3F,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmaxuw , "vpmaxuw" , O_660F38(3E,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminsb , "vpminsb" , O_660F38(38,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminsd , "vpminsd" , O_660F38(39,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminsw , "vpminsw" , O_660F00(EA,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminub , "vpminub" , O_660F00(DA,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminud , "vpminud" , O_660F38(3B,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpminuw , "vpminuw" , O_660F38(3A,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmovmskb , "vpmovmskb" , O_660F00(D7,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Gqd) , O(Xy) , U , U , U ), + INST(kX86InstIdVpmovsxbd , "vpmovsxbd" , O_660F38(21,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovsxbq , "vpmovsxbq" , O_660F38(22,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovsxbw , "vpmovsxbw" , O_660F38(20,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovsxdq , "vpmovsxdq" , O_660F38(25,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovsxwd , "vpmovsxwd" , O_660F38(23,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovsxwq , "vpmovsxwq" , O_660F38(24,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxbd , "vpmovzxbd" , O_660F38(31,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxbq , "vpmovzxbq" , O_660F38(32,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxbw , "vpmovzxbw" , O_660F38(30,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxdq , "vpmovzxdq" , O_660F38(35,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxwd , "vpmovzxwd" , O_660F38(33,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmovzxwq , "vpmovzxwq" , O_660F38(34,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpmuldq , "vpmuldq" , O_660F38(28,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmulhrsw , "vpmulhrsw" , O_660F38(0B,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmulhuw , "vpmulhuw" , O_660F00(E4,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmulhw , "vpmulhw" , O_660F00(E5,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmulld , "vpmulld" , O_660F38(40,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmullw , "vpmullw" , O_660F00(D5,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpmuludq , "vpmuludq" , O_660F00(F4,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpor , "vpor" , O_660F00(EB,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpperm , "vpperm" , O_00_M08(A3,U,_,_,_), U , Enc(XopRvrmRvmr) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , U ), + INST(kX86InstIdVprotb , "vprotb" , O_00_M09(90,U,_,_,_), O_00_M08(C0,U,_,_,_), Enc(XopRvmRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U ), + INST(kX86InstIdVprotd , "vprotd" , O_00_M09(92,U,_,_,_), O_00_M08(C2,U,_,_,_), Enc(XopRvmRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U ), + INST(kX86InstIdVprotq , "vprotq" , O_00_M09(93,U,_,_,_), O_00_M08(C3,U,_,_,_), Enc(XopRvmRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U ), + INST(kX86InstIdVprotw , "vprotw" , O_00_M09(91,U,_,_,_), O_00_M08(C1,U,_,_,_), Enc(XopRvmRmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsadbw , "vpsadbw" , O_660F00(F6,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpshab , "vpshab" , O_00_M09(98,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshad , "vpshad" , O_00_M09(9A,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshaq , "vpshaq" , O_00_M09(9B,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshaw , "vpshaw" , O_00_M09(99,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshlb , "vpshlb" , O_00_M09(94,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshld , "vpshld" , O_00_M09(96,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshlq , "vpshlq" , O_00_M09(97,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshlw , "vpshlw" , O_00_M09(95,U,_,_,_), U , Enc(XopRvmRmv) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , U ), + INST(kX86InstIdVpshufb , "vpshufb" , O_660F38(00,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpshufd , "vpshufd" , O_660F00(70,U,_,_,_), U , Enc(AvxRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVpshufhw , "vpshufhw" , O_F30F00(70,U,_,_,_), U , Enc(AvxRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVpshuflw , "vpshuflw" , O_F20F00(70,U,_,_,_), U , Enc(AvxRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVpsignb , "vpsignb" , O_660F38(08,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsignd , "vpsignd" , O_660F38(0A,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsignw , "vpsignw" , O_660F38(09,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpslld , "vpslld" , O_660F00(F2,U,_,_,_), O_660F00(72,6,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpslldq , "vpslldq" , O_660F00(73,7,_,_,_), U , Enc(AvxVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVpsllq , "vpsllq" , O_660F00(F3,U,_,_,_), O_660F00(73,6,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsllvd , "vpsllvd" , O_660F38(47,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsllvq , "vpsllvq" , O_660F38(47,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsllw , "vpsllw" , O_660F00(F1,U,_,_,_), O_660F00(71,6,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsrad , "vpsrad" , O_660F00(E2,U,_,_,_), O_660F00(72,4,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsravd , "vpsravd" , O_660F38(46,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsraw , "vpsraw" , O_660F00(E1,U,_,_,_), O_660F00(71,4,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsrld , "vpsrld" , O_660F00(D2,U,_,_,_), O_660F00(72,2,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsrldq , "vpsrldq" , O_660F00(73,3,_,_,_), U , Enc(AvxVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVpsrlq , "vpsrlq" , O_660F00(D3,U,_,_,_), O_660F00(73,2,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsrlvd , "vpsrlvd" , O_660F38(45,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsrlvq , "vpsrlvq" , O_660F38(45,U,_,W,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsrlw , "vpsrlw" , O_660F00(D1,U,_,_,_), O_660F00(71,2,_,_,_), Enc(AvxRvmVmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(XyMem)|O(Imm) , U , U ), + INST(kX86InstIdVpsubb , "vpsubb" , O_660F00(F8,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubd , "vpsubd" , O_660F00(FA,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubq , "vpsubq" , O_660F00(FB,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubsb , "vpsubsb" , O_660F00(E8,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubsw , "vpsubsw" , O_660F00(E9,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubusb , "vpsubusb" , O_660F00(D8,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubusw , "vpsubusw" , O_660F00(D9,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpsubw , "vpsubw" , O_660F00(F9,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVptest , "vptest" , O_660F38(17,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(WWWWWW__), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVpunpckhbw , "vpunpckhbw" , O_660F00(68,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpckhdq , "vpunpckhdq" , O_660F00(6A,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpckhqdq , "vpunpckhqdq" , O_660F00(6D,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpckhwd , "vpunpckhwd" , O_660F00(69,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpcklbw , "vpunpcklbw" , O_660F00(60,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpckldq , "vpunpckldq" , O_660F00(62,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpcklqdq , "vpunpcklqdq" , O_660F00(6C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpunpcklwd , "vpunpcklwd" , O_660F00(61,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVpxor , "vpxor" , O_660F00(EF,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVrcpps , "vrcpps" , O_000F00(53,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVrcpss , "vrcpss" , O_F30F00(53,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVroundpd , "vroundpd" , O_660F3A(09,U,_,_,_), U , Enc(AvxRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVroundps , "vroundps" , O_660F3A(08,U,_,_,_), U , Enc(AvxRmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , O(Imm) , U , U ), + INST(kX86InstIdVroundsd , "vroundsd" , O_660F3A(0B,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVroundss , "vroundss" , O_660F3A(0A,U,_,_,_), U , Enc(AvxRvmi) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , U ), + INST(kX86InstIdVrsqrtps , "vrsqrtps" , O_000F00(52,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVrsqrtss , "vrsqrtss" , O_F30F00(52,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVshufpd , "vshufpd" , O_660F00(C6,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVshufps , "vshufps" , O_000F00(C6,U,_,_,_), U , Enc(AvxRvmi_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , O(Imm) , U ), + INST(kX86InstIdVsqrtpd , "vsqrtpd" , O_660F00(51,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVsqrtps , "vsqrtps" , O_000F00(51,U,_,_,_), U , Enc(AvxRm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVsqrtsd , "vsqrtsd" , O_F20F00(51,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVsqrtss , "vsqrtss" , O_F30F00(51,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVstmxcsr , "vstmxcsr" , O_000F00(AE,3,_,_,_), U , Enc(AvxM) , F(Avx) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdVsubpd , "vsubpd" , O_660F00(5C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVsubps , "vsubps" , O_000F00(5C,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVsubsd , "vsubsd" , O_F20F00(5C,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVsubss , "vsubss" , O_F30F00(5C,U,_,_,_), U , Enc(AvxRvm) , F(Avx) , EF(________), 0 , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , U ), + INST(kX86InstIdVtestpd , "vtestpd" , O_660F38(0F,U,_,_,_), U , Enc(AvxRm_P) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVtestps , "vtestps" , O_660F38(0E,U,_,_,_), U , Enc(AvxRm_P) , F(Test) , EF(WWWWWW__), 0 , 0 , O(Xy) , O(XyMem) , U , U , U ), + INST(kX86InstIdVucomisd , "vucomisd" , O_660F00(2E,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVucomiss , "vucomiss" , O_000F00(2E,U,_,_,_), U , Enc(AvxRm) , F(Avx) , EF(WWWWWW__), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdVunpckhpd , "vunpckhpd" , O_660F00(15,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVunpckhps , "vunpckhps" , O_000F00(15,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVunpcklpd , "vunpcklpd" , O_660F00(14,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVunpcklps , "vunpcklps" , O_000F00(14,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVxorpd , "vxorpd" , O_660F00(57,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVxorps , "vxorps" , O_000F00(57,U,_,_,_), U , Enc(AvxRvm_P) , F(Avx) , EF(________), 0 , 0 , O(Xy) , O(Xy) , O(XyMem) , U , U ), + INST(kX86InstIdVzeroall , "vzeroall" , O_000F00(77,U,L,_,_), U , Enc(AvxOp) , F(Avx) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdVzeroupper , "vzeroupper" , O_000F00(77,U,_,_,_), U , Enc(AvxOp) , F(Avx) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdWrfsbase , "wrfsbase" , O_F30F00(AE,2,_,_,_), U , Enc(X86Rm) , F(None) , EF(________), 0 , 0 , O(Gqd) , U , U , U , U ), + INST(kX86InstIdWrgsbase , "wrgsbase" , O_F30F00(AE,3,_,_,_), U , Enc(X86Rm) , F(None) , EF(________), 0 , 0 , O(Gqd) , U , U , U , U ), + INST(kX86InstIdXadd , "xadd" , O_000F00(C0,U,_,_,_), U , Enc(X86Xadd) , F(Xchg)|F(Lock) , EF(WWWWWW__), 0 , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , U ), + INST(kX86InstIdXchg , "xchg" , O_000000(86,U,_,_,_), U , Enc(X86Xchg) , F(Xchg)|F(Lock) , EF(________), 0 , 0 , O(GqdwbMem) , O(Gqdwb) , U , U , U ), + INST(kX86InstIdXgetbv , "xgetbv" , O_000F01(D0,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ), + INST(kX86InstIdXor , "xor" , O_000000(30,6,_,_,_), U , Enc(X86Arith) , F(Lock) , EF(WWWUWW__), 0 , 0 , O(GqdwbMem) , O(GqdwbMem)|O(Imm), U , U , U ), + INST(kX86InstIdXorpd , "xorpd" , O_660F00(57,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdXorps , "xorps" , O_000F00(57,U,_,_,_), U , Enc(ExtRm) , F(None) , EF(________), 0 , 0 , O(Xmm) , O(XmmMem) , U , U , U ), + INST(kX86InstIdXrstor , "xrstor" , O_000F00(AE,5,_,_,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXrstor64 , "xrstor64" , O_000F00(AE,5,_,W,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXsave , "xsave" , O_000F00(AE,4,_,_,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXsave64 , "xsave64" , O_000F00(AE,4,_,W,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXsaveopt , "xsaveopt" , O_000F00(AE,6,_,_,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXsaveopt64 , "xsaveopt64" , O_000F00(AE,6,_,W,_), U , Enc(X86M) , F(None)|F(Special) , EF(________), 0 , 0 , O(Mem) , U , U , U , U ), + INST(kX86InstIdXsetbv , "xsetbv" , O_000F01(D1,U,_,_,_), U , Enc(X86Op) , F(None)|F(Special) , EF(________), 0 , 0 , U , U , U , U , U ) }; #undef INST @@ -4632,13 +4755,9 @@ const X86InstInfo _x86InstInfo[] = { #undef O_00_X #undef O_9B_X -#undef O_66_M09 -#undef O_66_M08 #undef O_66_M03 - #undef O_00_M09 #undef O_00_M08 -#undef O_00_M03 #undef O_F30F3A #undef O_F30F38 @@ -4660,13 +4779,13 @@ const X86InstInfo _x86InstInfo[] = { #undef O_000F00 #undef O_000000 -#undef L -#undef U - -#undef E #undef O +#undef EF +#undef A #undef F -#undef G +#undef Enc + +#undef U // ============================================================================ // [asmjit::X86Cond] @@ -4817,6 +4936,7 @@ uint32_t X86Util::getInstIdByName(const char* name, size_t len) { #if defined(ASMJIT_TEST) && !defined(ASMJIT_DISABLE_NAMES) UNIT(x86_inst_name) { // All known instructions should be matched. + INFO("Matching all X86/X64 instructions."); for (uint32_t a = 0; a < _kX86InstIdCount; a++) { uint32_t b = X86Util::getInstIdByName(_x86InstInfo[a].getInstName()); @@ -4827,6 +4947,7 @@ UNIT(x86_inst_name) { } // Everything else should return kInstIdNone + INFO("Trying to look-up instructions that don't exist."); EXPECT(X86Util::getInstIdByName(NULL) == kInstIdNone, "Should return kInstIdNone for NULL input."); diff --git a/src/asmjit/x86/x86inst.h b/src/asmjit/x86/x86inst.h index 4679e9b..e36b791 100644 --- a/src/asmjit/x86/x86inst.h +++ b/src/asmjit/x86/x86inst.h @@ -76,10 +76,15 @@ ASMJIT_VAR const uint32_t _x86CondToSetcc[20]; // [asmjit::kX86InstId] // ============================================================================ -//! X86/X64 instruction codes. +//! X86/X64 instruction IDs. //! //! Note that these instruction codes are AsmJit specific. Each instruction has -//! a unique ID that is used as an index to AsmJit instruction table. +//! a unique ID that is used as an index to AsmJit instruction table. The list +//! is sorted alphabetically except instructions starting with `j`, because the +//! `jcc` instruction is composition of an opcode and condition code. It means +//! that these instructions are sorted as `jcc`, `jecxz` and `jmp`. Please use +//! \ref X86Util::getInstIdByName() if you need instruction name to ID mapping +//! and are not aware on how to handle such case. ASMJIT_ENUM(kX86InstId) { kX86InstIdAdc = 1, // X86/X64 kX86InstIdAdd, // X86/X64 @@ -111,7 +116,7 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdBlsr, // BMI kX86InstIdBsf, // X86/X64 kX86InstIdBsr, // X86/X64 - kX86InstIdBswap, // X86/X64 (i486) + kX86InstIdBswap, // X86/X64 (i486+) kX86InstIdBt, // X86/X64 kX86InstIdBtc, // X86/X64 kX86InstIdBtr, // X86/X64 @@ -125,36 +130,36 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdCld, // X86/X64 kX86InstIdClflush, // SSE2 kX86InstIdCmc, // X86/X64 - kX86InstIdCmova, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovae, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovb, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovbe, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovc, // X86/X64 (cmovcc) (i586) - kX86InstIdCmove, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovg, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovge, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovl, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovle, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovna, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnae, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnb, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnbe, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnc, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovne, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovng, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnge, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnl, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnle, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovno, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnp, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovns, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovnz, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovo, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovp, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovpe, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovpo, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovs, // X86/X64 (cmovcc) (i586) - kX86InstIdCmovz, // X86/X64 (cmovcc) (i586) + kX86InstIdCmova, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovae, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovb, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovbe, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovc, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmove, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovg, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovge, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovl, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovle, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovna, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnae, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnb, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnbe, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnc, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovne, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovng, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnge, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnl, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnle, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovno, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnp, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovns, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovnz, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovo, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovp, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovpe, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovpo, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovs, // X86/X64 (cmovcc) (i586+) + kX86InstIdCmovz, // X86/X64 (cmovcc) (i586+) kX86InstIdCmp, // X86/X64 kX86InstIdCmppd, // SSE2 kX86InstIdCmpps, // SSE @@ -164,12 +169,12 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdCmpsW, // CMPS - X86/X64 kX86InstIdCmpsd, // SSE2 kX86InstIdCmpss, // SSE - kX86InstIdCmpxchg, // X86/X64 (i486) + kX86InstIdCmpxchg, // X86/X64 (i486+) kX86InstIdCmpxchg16b, // X64 only - kX86InstIdCmpxchg8b, // X86/X64 (i586) + kX86InstIdCmpxchg8b, // X86/X64 (i586+) kX86InstIdComisd, // SSE2 kX86InstIdComiss, // SSE - kX86InstIdCpuid, // X86/X64 (i486) + kX86InstIdCpuid, // X86/X64 (i486/i586+) kX86InstIdCqo, // X64 only kX86InstIdCrc32, // SSE4.2 kX86InstIdCvtdq2pd, // SSE2 @@ -209,6 +214,7 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdEmms, // MMX kX86InstIdEnter, // X86/X64 kX86InstIdExtractps, // SSE4.1 + kX86InstIdExtrq, // SSE4a kX86InstIdF2xm1, // FPU kX86InstIdFabs, // FPU kX86InstIdFadd, // FPU @@ -313,6 +319,7 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdImul, // X86/X64 kX86InstIdInc, // X86/X64 kX86InstIdInsertps, // SSE4.1 + kX86InstIdInsertq, // SSE4a kX86InstIdInt, // X86/X64 kX86InstIdJa, // X86/X64 (jcc) kX86InstIdJae, // X86/X64 (jcc) @@ -393,6 +400,8 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdMovntpd, // SSE2 kX86InstIdMovntps, // SSE kX86InstIdMovntq, // MMX-Ext + kX86InstIdMovntsd, // SSE4a + kX86InstIdMovntss, // SSE4a kX86InstIdMovq, // MMX/SSE/SSE2 kX86InstIdMovq2dq, // SSE2 kX86InstIdMovsB, // MOVS - X86/X64 @@ -1125,11 +1134,19 @@ ASMJIT_ENUM(kX86InstId) { kX86InstIdVzeroupper, // AVX kX86InstIdWrfsbase, // FSGSBASE (x64) kX86InstIdWrgsbase, // FSGSBASE (x64) - kX86InstIdXadd, // X86/X64 (i486) - kX86InstIdXchg, // X86/X64 (i386) + kX86InstIdXadd, // X86/X64 (i486+) + kX86InstIdXchg, // X86/X64 + kX86InstIdXgetbv, // XSAVE kX86InstIdXor, // X86/X64 kX86InstIdXorpd, // SSE2 kX86InstIdXorps, // SSE + kX86InstIdXrstor, // XSAVE + kX86InstIdXrstor64, // XSAVE + kX86InstIdXsave, // XSAVE + kX86InstIdXsave64, // XSAVE + kX86InstIdXsaveopt, // XSAVE + kX86InstIdXsaveopt64, // XSAVE + kX86InstIdXsetbv, // XSAVE _kX86InstIdCount, @@ -1151,25 +1168,50 @@ ASMJIT_ENUM(kX86InstOptions) { //! //! If this option is used and instruction doesn't support LOCK prefix an //! invalid instruction error is generated. - kX86InstOptionLock = 0x10, + kX86InstOptionLock = 0x00000010, - //! Force REX prefix to be emitted. + //! Force REX prefix (X64). //! - //! This option should be used carefully, because there are unencodable - //! combinations. If you want to access ah, bh, ch or dh registers the REX - //! prefix can't be emitted, otherwise illegal instruction error will be - //! returned. - kX86InstOptionRex = 0x40, + //! This option should be used carefully as there are combinations of + //! instructions and their operands that are not encodable. The REX prefix + //! can't be used together with AH, BH, CH, and DH registers. AsmJit reports + //! \ref kErrorIllegalInstruction in such case. + kX86InstOptionRex = 0x00000040, - //! Force three-byte VEX prefix to be emitted (instead of more compact - //! two-byte VEX prefix). + //! \internal //! - //! Ignored if the instruction doesn't use VEX prefix. - kX86InstOptionVex3 = 0x80 + //! Reserved by `X86Assembler`, do not use! + _kX86InstOptionNoRex = 0x00000080, + + //! Force 3-byte VEX prefix even if the instruction is encodable by 2-byte + //! VEX prefix (AVX). + //! + //! Ignored if the instruction is not AVX or `kX86InstOptionEVEX` is used. + kX86InstOptionVex3 = 0x00000100, + + //! Force 4-byte EVEX prefix even if the instruction is encodable by using + //! VEX prefix. Please note that all higher bits from `kX86InstOptionEvex` + //! are reserved for EVEX and forces EVEX encoding to be used implicitly. + kX86InstOptionEvex = 0x00010000, + //! Use zeroing instead of merging (AVX512+). + kX86InstOptionEvexZero = 0x00020000, + //! Broadcast one element to all other elements (AVX512+). + kX86InstOptionEvexOneN = 0x00040000, + //! Suppress all exceptions (AVX512+). + kX86InstOptionEvexSae = 0x00080000, + + //! Static rounding mode `round-to-nearest` (even) and `SAE` (AVX512+). + kX86InstOptionEvexRnSae = 0x00100000, + //! Static rounding mode `round-down` (toward -inf) and `SAE` (AVX512+). + kX86InstOptionEvexRdSae = 0x00200000, + //! Static rounding mode `round-up` (toward +inf) and `SAE` (AVX512+). + kX86InstOptionEvexRuSae = 0x00400000, + //! Static rounding mode `round-toward-zero` (truncate) and `SAE` (AVX512+). + kX86InstOptionEvexRzSae = 0x00800000 }; // ============================================================================ -// [asmjit::kX86InstGroup] +// [asmjit::kX86InstEncodingId] // ============================================================================ //! \internal @@ -1177,229 +1219,234 @@ ASMJIT_ENUM(kX86InstOptions) { //! X86/X64 instruction groups. //! //! This group is specific to AsmJit and only used by `X86Assembler`. -ASMJIT_ENUM(kX86InstGroup) { +ASMJIT_ENUM(kX86InstEncodingId) { //! Never used. - kX86InstGroupNone, + kX86InstEncodingIdNone = 0, - kX86InstGroupX86Op, - kX86InstGroupX86Op_66H, - kX86InstGroupX86Rm, - kX86InstGroupX86Rm_B, - kX86InstGroupX86RmReg, - kX86InstGroupX86RegRm, - kX86InstGroupX86M, + kX86InstEncodingIdX86Op, + kX86InstEncodingIdX86Op_66H, + kX86InstEncodingIdX86Rm, + kX86InstEncodingIdX86Rm_B, + kX86InstEncodingIdX86RmReg, + kX86InstEncodingIdX86RegRm, + kX86InstEncodingIdX86M, //! Adc/Add/And/Cmp/Or/Sbb/Sub/Xor. - kX86InstGroupX86Arith, + kX86InstEncodingIdX86Arith, //! Bswap. - kX86InstGroupX86BSwap, + kX86InstEncodingIdX86BSwap, //! Bt/Btc/Btr/Bts. - kX86InstGroupX86BTest, + kX86InstEncodingIdX86BTest, //! Call. - kX86InstGroupX86Call, + kX86InstEncodingIdX86Call, //! Enter. - kX86InstGroupX86Enter, + kX86InstEncodingIdX86Enter, //! Imul. - kX86InstGroupX86Imul, + kX86InstEncodingIdX86Imul, //! Inc/Dec. - kX86InstGroupX86IncDec, + kX86InstEncodingIdX86IncDec, //! Int. - kX86InstGroupX86Int, + kX86InstEncodingIdX86Int, //! Jcc. - kX86InstGroupX86Jcc, + kX86InstEncodingIdX86Jcc, //! Jcxz/Jecxz/Jrcxz. - kX86InstGroupX86Jecxz, + kX86InstEncodingIdX86Jecxz, //! Jmp. - kX86InstGroupX86Jmp, + kX86InstEncodingIdX86Jmp, //! Lea. - kX86InstGroupX86Lea, + kX86InstEncodingIdX86Lea, //! Mov. - kX86InstGroupX86Mov, + kX86InstEncodingIdX86Mov, //! Movsx/Movzx. - kX86InstGroupX86MovSxZx, + kX86InstEncodingIdX86MovSxZx, //! Movsxd. - kX86InstGroupX86MovSxd, + kX86InstEncodingIdX86MovSxd, //! Mov having absolute memory operand (x86/x64). - kX86InstGroupX86MovPtr, + kX86InstEncodingIdX86MovPtr, //! Push. - kX86InstGroupX86Push, + kX86InstEncodingIdX86Push, //! Pop. - kX86InstGroupX86Pop, + kX86InstEncodingIdX86Pop, //! Rep/Repe/Repne LodsX/MovsX/StosX/CmpsX/ScasX. - kX86InstGroupX86Rep, + kX86InstEncodingIdX86Rep, //! Ret. - kX86InstGroupX86Ret, + kX86InstEncodingIdX86Ret, //! Rcl/Rcr/Rol/Ror/Sal/Sar/Shl/Shr. - kX86InstGroupX86Rot, + kX86InstEncodingIdX86Rot, //! Setcc. - kX86InstGroupX86Set, + kX86InstEncodingIdX86Set, //! Shld/Rhrd. - kX86InstGroupX86Shlrd, + kX86InstEncodingIdX86Shlrd, //! Test. - kX86InstGroupX86Test, + kX86InstEncodingIdX86Test, //! Xadd. - kX86InstGroupX86Xadd, + kX86InstEncodingIdX86Xadd, //! Xchg. - kX86InstGroupX86Xchg, + kX86InstEncodingIdX86Xchg, //! Fincstp/Finit/FldX/Fnclex/Fninit/Fnop/Fpatan/Fprem/Fprem1/Fptan/Frndint/Fscale/Fsin/Fsincos/Fsqrt/Ftst/Fucompp/Fxam/Fxtract/Fyl2x/Fyl2xp1. - kX86InstGroupFpuOp, + kX86InstEncodingIdFpuOp, //! Fadd/Fdiv/Fdivr/Fmul/Fsub/Fsubr. - kX86InstGroupFpuArith, + kX86InstEncodingIdFpuArith, //! Fcom/Fcomp. - kX86InstGroupFpuCom, + kX86InstEncodingIdFpuCom, //! Fld/Fst/Fstp. - kX86InstGroupFpuFldFst, + kX86InstEncodingIdFpuFldFst, //! Fiadd/Ficom/Ficomp/Fidiv/Fidivr/Fild/Fimul/Fist/Fistp/Fisttp/Fisub/Fisubr. - kX86InstGroupFpuM, + kX86InstEncodingIdFpuM, //! Fcmov/Fcomi/Fcomip/Ffree/Fucom/Fucomi/Fucomip/Fucomp/Fxch. - kX86InstGroupFpuR, + kX86InstEncodingIdFpuR, //! Faddp/Fdivp/Fdivrp/Fmulp/Fsubp/Fsubrp. - kX86InstGroupFpuRDef, + kX86InstEncodingIdFpuRDef, //! Fnstsw/Fstsw. - kX86InstGroupFpuStsw, + kX86InstEncodingIdFpuStsw, //! Mm/Xmm instruction. - kX86InstGroupExtRm, + kX86InstEncodingIdExtRm, //! Mm/Xmm instruction (propagates 66H if the instruction uses Xmm register). - kX86InstGroupExtRm_P, + kX86InstEncodingIdExtRm_P, //! Mm/Xmm instruction (propagates REX.W if GPQ is used). - kX86InstGroupExtRm_Q, + kX86InstEncodingIdExtRm_Q, //! Mm/Xmm instruction (propagates 66H and REX.W). - kX86InstGroupExtRm_PQ, + kX86InstEncodingIdExtRm_PQ, //! Mm/Xmm instruction having Rm/Ri encodings. - kX86InstGroupExtRmRi, + kX86InstEncodingIdExtRmRi, //! Mm/Xmm instruction having Rm/Ri encodings (propagates 66H if the instruction uses Xmm register). - kX86InstGroupExtRmRi_P, + kX86InstEncodingIdExtRmRi_P, //! Mm/Xmm instruction having Rmi encoding. - kX86InstGroupExtRmi, + kX86InstEncodingIdExtRmi, //! Mm/Xmm instruction having Rmi encoding (propagates 66H if the instruction uses Xmm register). - kX86InstGroupExtRmi_P, + kX86InstEncodingIdExtRmi_P, //! Crc32. - kX86InstGroupExtCrc, + kX86InstEncodingIdExtCrc, //! Pextrb/Pextrw/Pextrd/Pextrq/Extractps. - kX86InstGroupExtExtract, + kX86InstEncodingIdExtExtract, //! Lfence/Mfence/Sfence. - kX86InstGroupExtFence, + kX86InstEncodingIdExtFence, //! Mov Mm/Xmm. //! //! 0x66 prefix must be set manually in opcodes. //! //! - Primary opcode is used for instructions in (X)Mm <- (X)Mm/X86Mem format, //! - Secondary opcode is used for instructions in (X)Mm/X86Mem <- (X)Mm format. - kX86InstGroupExtMov, + kX86InstEncodingIdExtMov, //! Mov Mm/Xmm. - kX86InstGroupExtMovNoRexW, + kX86InstEncodingIdExtMovNoRexW, //! Movbe. - kX86InstGroupExtMovBe, + kX86InstEncodingIdExtMovBe, //! Movd. - kX86InstGroupExtMovD, + kX86InstEncodingIdExtMovD, //! Movq. - kX86InstGroupExtMovQ, + kX86InstEncodingIdExtMovQ, //! Prefetch. - kX86InstGroupExtPrefetch, + kX86InstEncodingIdExtPrefetch, + + //! Extrq (SSE4a). + kX86InstEncodingIdExtExtrq, + //! Insrq (SSE4a). + kX86InstEncodingIdExtInsertq, //! 3dNow instruction. - kX86InstGroup3dNow, + kX86InstEncodingId3dNow, //! AVX instruction without operands. - kX86InstGroupAvxOp, + kX86InstEncodingIdAvxOp, //! AVX instruction encoded as 'M'. - kX86InstGroupAvxM, + kX86InstEncodingIdAvxM, //! AVX instruction encoded as 'MR'. - kX86InstGroupAvxMr, + kX86InstEncodingIdAvxMr, //! AVX instruction encoded as 'MR' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxMr_P, + kX86InstEncodingIdAvxMr_P, //! AVX instruction encoded as 'MRI'. - kX86InstGroupAvxMri, + kX86InstEncodingIdAvxMri, //! AVX instruction encoded as 'MRI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxMri_P, + kX86InstEncodingIdAvxMri_P, //! AVX instruction encoded as 'RM'. - kX86InstGroupAvxRm, + kX86InstEncodingIdAvxRm, //! AVX instruction encoded as 'RM' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRm_P, + kX86InstEncodingIdAvxRm_P, //! AVX instruction encoded as 'RMI'. - kX86InstGroupAvxRmi, + kX86InstEncodingIdAvxRmi, //! AVX instruction encoded as 'RMI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRmi_P, + kX86InstEncodingIdAvxRmi_P, //! AVX instruction encoded as 'RVM'. - kX86InstGroupAvxRvm, + kX86InstEncodingIdAvxRvm, //! AVX instruction encoded as 'RVM' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvm_P, + kX86InstEncodingIdAvxRvm_P, //! AVX instruction encoded as 'RVMR'. - kX86InstGroupAvxRvmr, + kX86InstEncodingIdAvxRvmr, //! AVX instruction encoded as 'RVMR' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvmr_P, + kX86InstEncodingIdAvxRvmr_P, //! AVX instruction encoded as 'RVMI'. - kX86InstGroupAvxRvmi, + kX86InstEncodingIdAvxRvmi, //! AVX instruction encoded as 'RVMI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvmi_P, + kX86InstEncodingIdAvxRvmi_P, //! AVX instruction encoded as 'RMV'. - kX86InstGroupAvxRmv, + kX86InstEncodingIdAvxRmv, //! AVX instruction encoded as 'RMVI'. - kX86InstGroupAvxRmvi, + kX86InstEncodingIdAvxRmvi, //! AVX instruction encoded as 'RM' or 'MR'. - kX86InstGroupAvxRmMr, + kX86InstEncodingIdAvxRmMr, //! AVX instruction encoded as 'RM' or 'MR' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRmMr_P, + kX86InstEncodingIdAvxRmMr_P, //! AVX instruction encoded as 'RVM' or 'RMI'. - kX86InstGroupAvxRvmRmi, + kX86InstEncodingIdAvxRvmRmi, //! AVX instruction encoded as 'RVM' or 'RMI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvmRmi_P, + kX86InstEncodingIdAvxRvmRmi_P, //! AVX instruction encoded as 'RVM' or 'MR'. - kX86InstGroupAvxRvmMr, + kX86InstEncodingIdAvxRvmMr, //! AVX instruction encoded as 'RVM' or 'MVR'. - kX86InstGroupAvxRvmMvr, + kX86InstEncodingIdAvxRvmMvr, //! AVX instruction encoded as 'RVM' or 'MVR' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvmMvr_P, + kX86InstEncodingIdAvxRvmMvr_P, //! AVX instruction encoded as 'RVM' or 'VMI'. - kX86InstGroupAvxRvmVmi, + kX86InstEncodingIdAvxRvmVmi, //! AVX instruction encoded as 'RVM' or 'VMI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvmVmi_P, + kX86InstEncodingIdAvxRvmVmi_P, //! AVX instruction encoded as 'VM'. - kX86InstGroupAvxVm, + kX86InstEncodingIdAvxVm, //! AVX instruction encoded as 'VMI'. - kX86InstGroupAvxVmi, + kX86InstEncodingIdAvxVmi, //! AVX instruction encoded as 'VMI' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxVmi_P, + kX86InstEncodingIdAvxVmi_P, //! AVX instruction encoded as 'RVRM' or 'RVMR'. - kX86InstGroupAvxRvrmRvmr, + kX86InstEncodingIdAvxRvrmRvmr, //! AVX instruction encoded as 'RVRM' or 'RVMR' (Propagates AVX.L if Ymm used). - kX86InstGroupAvxRvrmRvmr_P, + kX86InstEncodingIdAvxRvrmRvmr_P, //! Vmovss/Vmovsd. - kX86InstGroupAvxMovSsSd, + kX86InstEncodingIdAvxMovSsSd, //! AVX2 gather family instructions (VSIB). - kX86InstGroupAvxGather, + kX86InstEncodingIdAvxGather, //! AVX2 gather family instructions (VSIB), differs only in mem operand. - kX86InstGroupAvxGatherEx, + kX86InstEncodingIdAvxGatherEx, //! FMA4 instruction in form [R, R, R/M, R/M]. - kX86InstGroupFma4, + kX86InstEncodingIdFma4, //! FMA4 instruction in form [R, R, R/M, R/M] (Propagates AVX.L if Ymm used). - kX86InstGroupFma4_P, + kX86InstEncodingIdFma4_P, //! XOP instruction encoded as 'RM'. - kX86InstGroupXopRm, + kX86InstEncodingIdXopRm, //! XOP instruction encoded as 'RM' (Propagates AVX.L if Ymm used). - kX86InstGroupXopRm_P, + kX86InstEncodingIdXopRm_P, //! XOP instruction encoded as 'RVM' or 'RMV'. - kX86InstGroupXopRvmRmv, + kX86InstEncodingIdXopRvmRmv, //! XOP instruction encoded as 'RVM' or 'RMI'. - kX86InstGroupXopRvmRmi, + kX86InstEncodingIdXopRvmRmi, //! XOP instruction encoded as 'RVMR'. - kX86InstGroupXopRvmr, + kX86InstEncodingIdXopRvmr, //! XOP instruction encoded as 'RVMR' (Propagates AVX.L if Ymm used). - kX86InstGroupXopRvmr_P, + kX86InstEncodingIdXopRvmr_P, //! XOP instruction encoded as 'RVMI'. - kX86InstGroupXopRvmi, + kX86InstEncodingIdXopRvmi, //! XOP instruction encoded as 'RVMI' (Propagates AVX.L if Ymm used). - kX86InstGroupXopRvmi_P, + kX86InstEncodingIdXopRvmi_P, //! XOP instruction encoded as 'RVRM' or 'RVMR'. - kX86InstGroupXopRvrmRvmr, + kX86InstEncodingIdXopRvrmRvmr, //! XOP instruction encoded as 'RVRM' or 'RVMR' (Propagates AVX.L if Ymm used). - kX86InstGroupXopRvrmRvmr_P, + kX86InstEncodingIdXopRvrmRvmr_P, //! Count of X86 instruction groups. - _kX86InstGroupCount + _kX86InstEncodingIdCount }; // ============================================================================ @@ -1408,43 +1455,117 @@ ASMJIT_ENUM(kX86InstGroup) { //! \internal //! -//! Instruction OpCode encoding used by asmjit 'X86InstInfo' table. +//! X86/X64 Instruction opcode encoding used by asmjit 'X86InstInfo' table. //! -//! The schema was inspired by AVX/AVX2 features. +//! This schema is AsmJit specific and has been designed to allow encoding of +//! all X86 instructions available. X86, MMX, and SSE+ instructions always use +//! `MMMMM` and `PP` fields, which are encoded to corresponding prefixes needed +//! by X86 or SIMD instructions. AVX+ instructions embed `MMMMM` and `PP` fields +//! in a VEX prefix. +//! +//! The instruction opcode definition uses 1 or 2 bytes as an opcode value. 1 +//! byte is needed by most of the instructions, 2 bytes are only used by legacy +//! X87-FPU instructions. This means that a second byte is free to by used by +//! AVX and AVX-512 instructions. +//! +//! The fields description: +//! +//! - `MMMMM` field is used to encode prefixes needed by the instruction or as +//! a part of VEX/EVEX prefix. +//! +//! - `PP` field is used to encode prefixes needed by the instruction or as a +//! part of VEX/EVEX prefix. +//! +//! - `L` field is used exclusively by AVX+ and AVX512+ instruction sets. It +//! describes vector size, which is 128-bit for Xmm register `L_128`, 256 +//! for Ymm register `L_256` and 512-bit for Zmm register `L_512`. The `L` +//! field is omitted in case that instruction supports multiple vector lengths, +//! however, if the instruction requires specific `L` value it's specified as +//! a part of the opcode. +//! +//! - `W` field is the most complicated. It was added by 64-bit architecture +//! to promote default operation width (instructions that perform 32-bit +//! operation by default require to override the width to 64-bit explicitly). +//! There is nothing wrong on this, however, some instructions introduced +//! implicit `W` override, for example a `cdqe` instruction is basically a +//! `cwde` instructiontion with overridden `W` (set to 1). There are some +//! others in the base X86 instruction set. More recent instruction sets +//! started using `W` field more often: +//! +//! - AVX instructions started using `W` field as an extended opcode for FMA, +//! GATHER, PERM, and other instructions. It also uses `W` field to override +//! the default operation width in instructions like `vmovq`. AVX `W` field +//! is +//! +//! - AVX-512 instructions started using `W` field as an extended opcode for +//! all new instructions. This wouldn't have been an issue if the `W` field +//! of AVX-512 have matched AVX, but this is not the case. +//! +//! - `O` field is an extended opcode field (3) bytes used by ModR/M BYTE. ASMJIT_ENUM(kX86InstOpCode) { - // 'MMMMM' field in AVX/XOP instruction. - // 'OpCode' leading bytes in legacy encoding. - kX86InstOpCode_MM_Shift = 16, - kX86InstOpCode_MM_Mask = 0x0FU << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_00 = 0x00U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_0F = 0x01U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_0F38 = 0x02U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_0F3A = 0x03U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_0F01 = 0x0FU << kX86InstOpCode_MM_Shift, // Ext/Not part of AVX. + // `MMMMM` field in AVX/XOP/AVX-512 instruction (5 bits). + // + // `OpCode` leading bytes in legacy encoding. + // + // AVX reserves 5 bits for `MMMMM` field, however AVX instructions only use + // 2 bits and XOP 4 bits. AVX-512 shrinks `MMMMM` field into `MM` so it's + // safe to assume that `MM` field won't grow in the future as EVEX doesn't + // use more than 2 bits. There is always a way how a fifth bit can be stored + // if needed. + kX86InstOpCode_MM_Shift = 16, + kX86InstOpCode_MM_Mask = 0x0FU << kX86InstOpCode_MM_Shift, + kX86InstOpCode_MM_00 = 0x00U << kX86InstOpCode_MM_Shift, + kX86InstOpCode_MM_0F = 0x01U << kX86InstOpCode_MM_Shift, + kX86InstOpCode_MM_0F38 = 0x02U << kX86InstOpCode_MM_Shift, + kX86InstOpCode_MM_0F3A = 0x03U << kX86InstOpCode_MM_Shift, + kX86InstOpCode_MM_00011 = 0x03U << kX86InstOpCode_MM_Shift, // XOP. + kX86InstOpCode_MM_01000 = 0x08U << kX86InstOpCode_MM_Shift, // XOP. + kX86InstOpCode_MM_01001 = 0x09U << kX86InstOpCode_MM_Shift, // XOP. + kX86InstOpCode_MM_0F01 = 0x0FU << kX86InstOpCode_MM_Shift, // AsmJit specific, not part of AVX. - kX86InstOpCode_MM_00011 = 0x03U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_01000 = 0x08U << kX86InstOpCode_MM_Shift, - kX86InstOpCode_MM_01001 = 0x09U << kX86InstOpCode_MM_Shift, + // `PP` field in AVX/XOP/AVX-512 instruction. + // + // `Mandatory Prefix` in legacy encoding. + // + // AVX reserves 2 bits for `PP` field, but AsmJit extends the storage by 1 + // more bit that is used to emit 9B prefix for some X87-FPU instructions. + kX86InstOpCode_PP_Shift = 20, + kX86InstOpCode_PP_Mask = 0x07U << kX86InstOpCode_PP_Shift, + kX86InstOpCode_PP_00 = 0x00U << kX86InstOpCode_PP_Shift, + kX86InstOpCode_PP_66 = 0x01U << kX86InstOpCode_PP_Shift, + kX86InstOpCode_PP_F3 = 0x02U << kX86InstOpCode_PP_Shift, + kX86InstOpCode_PP_F2 = 0x03U << kX86InstOpCode_PP_Shift, + kX86InstOpCode_PP_9B = 0x07U << kX86InstOpCode_PP_Shift, // AsmJit specific, not part of AVX. - // 'PP' field in AVX/XOP instruction. - // 'Mandatory Prefix' in legacy encoding. - kX86InstOpCode_PP_Shift = 21, - kX86InstOpCode_PP_Mask = 0x07U << kX86InstOpCode_PP_Shift, - kX86InstOpCode_PP_00 = 0x00U << kX86InstOpCode_PP_Shift, - kX86InstOpCode_PP_66 = 0x01U << kX86InstOpCode_PP_Shift, - kX86InstOpCode_PP_F3 = 0x02U << kX86InstOpCode_PP_Shift, - kX86InstOpCode_PP_F2 = 0x03U << kX86InstOpCode_PP_Shift, - kX86InstOpCode_PP_9B = 0x07U << kX86InstOpCode_PP_Shift, // Ext/Not part of AVX. + // `L` field in AVX/XOP/AVX-512 instruction. + // + // AVX/XOP can only use the first bit `L.128` or `L.256`. AVX-512 makes it + // possible to use also `L.512`. + // + // \note If the instruction set manual describes an instruction by using `LIG` + // it means that the `L` field is ignored. AsmJit emits `0` in such case. + kX86InstOpCode_L_Shift = 23, + kX86InstOpCode_L_Mask = 0x03U << kX86InstOpCode_L_Shift, + kX86InstOpCode_L_128 = 0x00U << kX86InstOpCode_L_Shift, + kX86InstOpCode_L_256 = 0x01U << kX86InstOpCode_L_Shift, + kX86InstOpCode_L_512 = 0x02U << kX86InstOpCode_L_Shift, - // 'L' field in AVX/XOP instruction. - kX86InstOpCode_L_Shift = 24, - kX86InstOpCode_L_Mask = 0x01U << kX86InstOpCode_L_Shift, - kX86InstOpCode_L_False = 0x00U << kX86InstOpCode_L_Shift, - kX86InstOpCode_L_True = 0x01U << kX86InstOpCode_L_Shift, + // `O` field (ModR/M). + kX86InstOpCode_O_Shift = 25, + kX86InstOpCode_O_Mask = 0x07U << kX86InstOpCode_O_Shift, - // 'O' field. - kX86InstOpCode_O_Shift = 29, - kX86InstOpCode_O_Mask = 0x07U << kX86InstOpCode_O_Shift + // `W` field used in EVEX instruction encoding. + kX86InstOpCode_EW_Shift = 30, + kX86InstOpCode_EW_Mask = 0x01U << kX86InstOpCode_EW_Shift, + kX86InstOpCode_EW = 0x01U << kX86InstOpCode_EW_Shift, + + // `W` field used in REX/VEX instruction encoding. + // + // \note If the instruction set manual describes an instruction by using `WIG` + // it means that the `W` field is ignored. AsmJit emits `0` in such case. + kX86InstOpCode_W_Shift = 31, + kX86InstOpCode_W_Mask = 0x01U << kX86InstOpCode_W_Shift, + kX86InstOpCode_W = 0x01U << kX86InstOpCode_W_Shift, }; // ============================================================================ @@ -1453,18 +1574,18 @@ ASMJIT_ENUM(kX86InstOpCode) { //! \internal //! -//! X86/X64 instruction type flags. +//! X86/X64 instruction flags. ASMJIT_ENUM(kX86InstFlags) { //! No flags. - kX86InstFlagNone = 0x0000, + kX86InstFlagNone = 0x00000000, //! Instruction is a control-flow instruction. //! //! Control flow instructions are jmp, jcc, call and ret. - kX86InstFlagFlow = 0x0001, + kX86InstFlagFlow = 0x00000001, //! Instruction is a compare/test like instruction. - kX86InstFlagTest = 0x0002, + kX86InstFlagTest = 0x00000002, //! Instruction is a move like instruction. //! @@ -1479,66 +1600,74 @@ ASMJIT_ENUM(kX86InstFlags) { //! There are some MOV instructions that do only a partial move (for example //! 'cvtsi2ss'), register allocator has to know the variable size and use //! the flag accordingly to it. - kX86InstFlagMove = 0x0004, + kX86InstFlagMove = 0x00000004, //! Instruction is an exchange like instruction. //! //! Exchange instruction typically overwrite first and second operand. So //! far only the instructions 'xchg' and 'xadd' are considered. - kX86InstFlagXchg = 0x0008, + kX86InstFlagXchg = 0x00000008, //! Instruction accesses Fp register(s). - kX86InstFlagFp = 0x0010, + kX86InstFlagFp = 0x00000010, //! Instruction can be prefixed by using the LOCK prefix. - kX86InstFlagLock = 0x0020, + kX86InstFlagLock = 0x00000020, - //! Instruction is special, this is for `Compiler`. - kX86InstFlagSpecial = 0x0040, + //! Instruction requires special handling, used by \ref Compiler. + kX86InstFlagSpecial = 0x00000040, //! Instruction always performs memory access. //! - //! This flag is always combined with `kX86InstFlagSpecial` and signalizes + //! This flag is always combined with `kX86InstFlagSpecial` and describes //! that there is an implicit address which is accessed (usually EDI/RDI or //! ESI/EDI). - kX86InstFlagSpecialMem = 0x0080, + kX86InstFlagSpecialMem = 0x00000080, //! Instruction memory operand can refer to 16-bit address (used by FPU). - kX86InstFlagMem2 = 0x0100, + kX86InstFlagMem2 = 0x00000100, //! Instruction memory operand can refer to 32-bit address (used by FPU). - kX86InstFlagMem4 = 0x0200, + kX86InstFlagMem4 = 0x00000200, //! Instruction memory operand can refer to 64-bit address (used by FPU). - kX86InstFlagMem8 = 0x0400, + kX86InstFlagMem8 = 0x00000400, //! Instruction memory operand can refer to 80-bit address (used by FPU). - kX86InstFlagMem10 = 0x0800, - - //! \internal - //! - //! Combination of `kX86InstFlagMem2` and `kX86InstFlagMem4`. - kX86InstFlagMem2_4 = kX86InstFlagMem2 | kX86InstFlagMem4, - - //! \internal - //! - //! Combination of `kX86InstFlagMem2`, `kX86InstFlagMem4` and `kX86InstFlagMem8`. - kX86InstFlagMem2_4_8 = kX86InstFlagMem2_4 | kX86InstFlagMem8, - - //! \internal - //! - //! Combination of `kX86InstFlagMem4` and `kX86InstFlagMem8`. - kX86InstFlagMem4_8 = kX86InstFlagMem4 | kX86InstFlagMem8, - - //! \internal - //! - //! Combination of `kX86InstFlagMem4`, `kX86InstFlagMem8` and `kX86InstFlagMem10`. - kX86InstFlagMem4_8_10 = kX86InstFlagMem4_8 | kX86InstFlagMem10, + kX86InstFlagMem10 = 0x00000800, //! Zeroes the rest of the register if the source operand is memory. //! //! Special behavior related to some SIMD load instructions. - kX86InstFlagZ = 0x1000, + kX86InstFlagZ = 0x00001000, - //! REX.W/VEX.W by default. - kX86InstFlagW = 0x8000 + //! Instruction is supported by AVX. + kX86InstFlagAvx = 0x00010000, + //! Instruction is supported by XOP. + kX86InstFlagXop = 0x00020000, + + //! Instruction is supported by AVX-512 F (Zmm). + kX86InstFlagAvx512F = 0x00100000, + //! Instruction is supported by AVX-512 CD (Zmm). + kX86InstFlagAvx512CD = 0x00200000, + //! Instruction is supported by AVX-512 PF (Zmm). + kX86InstFlagAvx512PF = 0x00400000, + //! Instruction is supported by AVX-512 ER (Zmm). + kX86InstFlagAvx512ER = 0x00800000, + //! Instruction is supported by AVX-512 DQ (Zmm). + kX86InstFlagAvx512DQ = 0x01000000, + //! Instruction is supported by AVX-512 BW (Zmm). + kX86InstFlagAvx512BW = 0x02000000, + //! Instruction is supported by AVX-512 VL (Xmm/Ymm). + kX86InstFlagAvx512VL = 0x04000000, + + //! Instruction supports masking {k0..k7}. + kX86InstFlagAvx512KMask = 0x08000000, + //! Instruction supports zeroing of elements {k0z..k7z}. + kX86InstFlagAvx512KZero = 0x10000000, + //! Instruction supports broadcast {1toN}. + kX86InstFlagAvx512Broadcast = 0x20000000, + //! Instruction supports suppressing all exceptions {sae}. + kX86InstFlagAvx512Sae = 0x40000000, + //! Instruction supports static rounding control with SAE {rnd-sae}, + kX86InstFlagAvx512Rnd = 0x80000000 }; // ============================================================================ @@ -1557,10 +1686,15 @@ ASMJIT_ENUM(kX86InstOp) { kX86InstOpGd = 0x0004, //! Instruction operand can be 64-bit Gpq register. kX86InstOpGq = 0x0008, + //! Instruction operand can be Fp register. kX86InstOpFp = 0x0010, - //! Instruction operand can be 64-bit Mmx register. + //! Instruction operand can be 64-bit Mm register. kX86InstOpMm = 0x0020, + + //! Instruction operand can be 64-bit K register. + kX86InstOpK = 0x0040, + //! Instruction operand can be 128-bit Xmm register. kX86InstOpXmm = 0x0100, //! Instruction operand can be 256-bit Ymm register. @@ -1569,44 +1703,19 @@ ASMJIT_ENUM(kX86InstOp) { kX86InstOpZmm = 0x0400, //! Instruction operand can be memory. - kX86InstOpMem = 0x2000, + kX86InstOpMem = 0x1000, //! Instruction operand can be immediate. - kX86InstOpImm = 0x4000, + kX86InstOpImm = 0x2000, //! Instruction operand can be label. - kX86InstOpLabel = 0x8000, - - //! \internal + kX86InstOpLabel = 0x4000, + //! Instruction operand doesn't have to be used. //! - //! Combined flags. - //! - //! \{ - - kX86InstOpGwb = kX86InstOpGw | kX86InstOpGb, - kX86InstOpGqd = kX86InstOpGq | kX86InstOpGd, - kX86InstOpGqdw = kX86InstOpGq | kX86InstOpGd | kX86InstOpGw, - kX86InstOpGqdwb = kX86InstOpGq | kX86InstOpGd | kX86InstOpGw | kX86InstOpGb, - - kX86InstOpGbMem = kX86InstOpGb | kX86InstOpMem, - kX86InstOpGwMem = kX86InstOpGw | kX86InstOpMem, - kX86InstOpGdMem = kX86InstOpGd | kX86InstOpMem, - kX86InstOpGqMem = kX86InstOpGq | kX86InstOpMem, - kX86InstOpGwbMem = kX86InstOpGwb | kX86InstOpMem, - kX86InstOpGqdMem = kX86InstOpGqd | kX86InstOpMem, - kX86InstOpGqdwMem = kX86InstOpGqdw | kX86InstOpMem, - kX86InstOpGqdwbMem = kX86InstOpGqdwb | kX86InstOpMem, - - kX86InstOpFpMem = kX86InstOpFp | kX86InstOpMem, - kX86InstOpMmMem = kX86InstOpMm | kX86InstOpMem, - kX86InstOpXmmMem = kX86InstOpXmm | kX86InstOpMem, - kX86InstOpYmmMem = kX86InstOpYmm | kX86InstOpMem, - - kX86InstOpMmXmm = kX86InstOpMm | kX86InstOpXmm, - kX86InstOpMmXmmMem = kX86InstOpMmXmm | kX86InstOpMem, - - kX86InstOpXmmYmm = kX86InstOpXmm | kX86InstOpYmm, - kX86InstOpXmmYmmMem = kX86InstOpXmmYmm | kX86InstOpMem - - //! \} + //! \note If no operand is specified the meaning is clear (the operand at the + //! particular index doesn't exist), however, when one or more operand is + //! specified, it's not clear whether the operand can be omitted or not. When + //! `kX86InstOpNone` is used it means that the operand is not used in some + //! cases. + kX86InstOpNone = 0x8000 }; // ============================================================================ @@ -1647,28 +1756,31 @@ ASMJIT_ENUM(kX86Cond) { kX86CondZ = 0x04, // ZF==1 // Simplified condition codes. - kX86CondOverflow = 0x00, - kX86CondNotOverflow = 0x01, - kX86CondBelow = 0x02, //!< Unsigned comparison. - kX86CondAboveEqual = 0x03, //!< Unsigned comparison. - kX86CondEqual = 0x04, - kX86CondNotEqual = 0x05, - kX86CondBelowEqual = 0x06, //!< Unsigned comparison. - kX86CondAbove = 0x07, //!< Unsigned comparison. - kX86CondSign = 0x08, - kX86CondNotSign = 0x09, - kX86CondParityEven = 0x0A, - kX86CondParityOdd = 0x0B, - kX86CondLess = 0x0C, //!< Signed comparison. - kX86CondGreaterEqual = 0x0D, //!< Signed comparison. - kX86CondLessEqual = 0x0E, //!< Signed comparison. - kX86CondGreater = 0x0F, //!< Signed comparison. + kX86CondSign = kX86CondS , //!< Sign (S). + kX86CondNotSign = kX86CondNS, //!< Not Sign (NS). + + kX86CondOverflow = kX86CondO , //!< Signed Overflow (O) + kX86CondNotOverflow = kX86CondNO, //!< Not Signed Overflow (NO) + + kX86CondLess = kX86CondL , //!< Signed `a < b` (L or NGE). + kX86CondLessEqual = kX86CondLE, //!< Signed `a <= b` (LE or NG ). + kX86CondGreater = kX86CondG , //!< Signed `a > b` (G or NLE). + kX86CondGreaterEqual = kX86CondGE, //!< Signed `a >= b` (GE or NL ). + kX86CondBelow = kX86CondB , //!< Unsigned `a < b` (B or NAE). + kX86CondBelowEqual = kX86CondBE, //!< Unsigned `a <= b` (BE or NA ). + kX86CondAbove = kX86CondA , //!< Unsigned `a > b` (A or NBE). + kX86CondAboveEqual = kX86CondAE, //!< Unsigned `a >= b` (AE or NB ). + kX86CondEqual = kX86CondE , //!< Equal `a == b` (E or Z ). + kX86CondNotEqual = kX86CondNE, //!< Not Equal `a != b` (NE or NZ ). + + kX86CondParityEven = kX86CondP, + kX86CondParityOdd = kX86CondPO, // Aliases. - kX86CondZero = 0x04, - kX86CondNotZero = 0x05, - kX86CondNegative = 0x08, - kX86CondPositive = 0x09, + kX86CondZero = kX86CondZ, + kX86CondNotZero = kX86CondNZ, + kX86CondNegative = kX86CondS, + kX86CondPositive = kX86CondNS, // Fpu-only. kX86CondFpuUnordered = 0x10, @@ -1686,17 +1798,17 @@ ASMJIT_ENUM(kX86Cond) { //! //! Each instruction stored in AsmJit database contains flags that instruction //! uses (reads) and flags that instruction modifies (writes). This is used by -//! instruction reordering, but can be used by third parties as the API and -//! definitions are public. +//! instruction reordering, but can be used by third parties as it's part of +//! AsmJit API. //! -//! \note Flags defined here doesn't correspond to real flags used by X86/X64 -//! architecture defined in Intel's Manual Section `3.4.3 - EFLAGS Register`. +//! \note Flags defined here don't correspond to real flags used by X86/X64 +//! architecture, defined in Intel's Manual Section `3.4.3 - EFLAGS Register`. //! -//! \note Flags are designed to fit in 8-bit integer. +//! \note Flags are designed to fit in an 8-bit integer. ASMJIT_ENUM(kX86EFlags) { // -------------------------------------------------------------------------- - // src-gendefs.js relies on the values of these masks, to modify them the - // tool has to be changed as well. + // src-gendefs.js relies on the values of these masks, the tool has to be + // changed as you plan to modify `kX86EFlags`. // -------------------------------------------------------------------------- //! Overflow flag (OF). @@ -1743,7 +1855,7 @@ ASMJIT_ENUM(kX86EFlags) { //! `lods` and `stos`. kX86EFlagD = 0x40, - //! Any other flag that AsmJit doesn't use to keep track of it. + //! Any other flag that AsmJit doesn't use to keep track of. kX86EFlagX = 0x80 }; @@ -1751,7 +1863,7 @@ ASMJIT_ENUM(kX86EFlags) { // [asmjit::kX86FpSw] // ============================================================================ -//! X86/X64 FPU status Word. +//! X86/X64 FPU status word. ASMJIT_ENUM(kX86FpSw) { kX86FpSw_Invalid = 0x0001, kX86FpSw_Denormalized = 0x0002, @@ -1773,7 +1885,7 @@ ASMJIT_ENUM(kX86FpSw) { // [asmjit::kX86FpCw] // ============================================================================ -//! X86/X64 FPU control Word. +//! X86/X64 FPU control word. ASMJIT_ENUM(kX86FpCw) { kX86FpCw_EM_Mask = 0x003F, // Bits 0-5. kX86FpCw_EM_Invalid = 0x0001, @@ -1804,16 +1916,59 @@ ASMJIT_ENUM(kX86FpCw) { // [asmjit::kX86Cmp] // ============================================================================ -//! X86/X64 Compare immediate encodings. +//! X86/X64 Comparison predicate used by CMP[PD/PS/SD/SS] family instructions. ASMJIT_ENUM(kX86Cmp) { - kX86CmpEq = 0, - kX86CmpLt = 1, - kX86CmpLe = 2, - kX86CmpUnordered = 3, - kX86CmpNotEq = 4, - kX86CmpNotLt = 5, - kX86CmpNotLe = 6, - kX86CmpOrdered = 7 + kX86CmpEQ = 0x00, //!< Equal (Quite). + kX86CmpLT = 0x01, //!< Less (Signaling). + kX86CmpLE = 0x02, //!< Less/Equal (Signaling). + kX86CmpUNORD = 0x03, //!< Unordered (Quite). + kX86CmpNEQ = 0x04, //!< Not Equal (Quite). + kX86CmpNLT = 0x05, //!< Not Less (Signaling). + kX86CmpNLE = 0x06, //!< Not Less/Equal (Signaling). + kX86CmpORD = 0x07 //!< Ordered (Quite). +}; + +// ============================================================================ +// [asmjit::kX86VCmp] +// ============================================================================ + +//! X86/X64 Comparison predicate used by VCMP[PD/PS/SD/SS] family instructions. +//! +//! The first 8 are compatible with \ref kX86Cmp. +ASMJIT_ENUM(kX86VCmp) { + kX86VCmpEQ_OQ = 0x00, //!< Equal (Quite, Ordered). + kX86VCmpLT_OS = 0x01, //!< Less (Signaling, Ordered). + kX86VCmpLE_OS = 0x02, //!< Less/Equal (Signaling, Ordered). + kX86VCmpUNORD_Q = 0x03, //!< Unordered (Quite). + kX86VCmpNEQ_UQ = 0x04, //!< Not Equal (Quite, Unordered). + kX86VCmpNLT_US = 0x05, //!< Not Less (Signaling, Unordered). + kX86VCmpNLE_US = 0x06, //!< Not Less/Equal (Signaling, Unordered). + kX86VCmpORD_Q = 0x07, //!< Ordered (Quite). + + kX86VCmpEQ_UQ = 0x08, //!< Equal (Quite, Unordered). + kX86VCmpNGE_US = 0x09, //!< Not Greater/Equal (Signaling, Unordered). + kX86VCmpNGT_US = 0x0A, //!< Not Greater (Signaling, Unordered). + kX86VCmpFALSE_OQ = 0x0B, //!< False (Quite, Ordered). + kX86VCmpNEQ_OQ = 0x0C, //!< Not Equal (Quite, Ordered). + kX86VCmpGE_OS = 0x0D, //!< Greater/Equal (Signaling, Ordered). + kX86VCmpGT_OS = 0x0E, //!< Greater (Signaling, Ordered). + kX86VCmpTRUE_UQ = 0x0F, //!< True (Quite, Unordered). + kX86VCmpEQ_OS = 0x10, //!< Equal (Signaling, Ordered). + kX86VCmpLT_OQ = 0x11, //!< Less (Quite, Ordered). + kX86VCmpLE_OQ = 0x12, //!< Less/Equal (Quite, Ordered). + kX86VCmpUNORD_S = 0x13, //!< Unordered (Signaling). + kX86VCmpNEQ_US = 0x14, //!< Not Equal (Signaling, Unordered). + kX86VCmpNLT_UQ = 0x15, //!< Not Less (Quite, Unordered). + kX86VCmpNLE_UQ = 0x16, //!< Not Less/Equal (Quite, Unordered). + kX86VCmpORD_S = 0x17, //!< Ordered (Signaling). + kX86VCmpEQ_US = 0x18, //!< Equal (Signaling, Unordered). + kX86VCmpNGE_UQ = 0x19, //!< Not Greater/Equal (Quite, Unordered). + kX86VCmpNGT_UQ = 0x1A, //!< Not Greater (Quite, Unordered). + kX86VCmpFALSE_OS = 0x1B, //!< False (Signaling, Ordered). + kX86VCmpNEQ_OS = 0x1C, //!< Not Equal (Signaling, Ordered). + kX86VCmpGE_OQ = 0x1D, //!< Greater/Equal (Quite, Ordered). + kX86VCmpGT_OQ = 0x1E, //!< Greater (Quite, Ordered). + kX86VCmpTRUE_US = 0x1F //!< True (Signaling, Unordered). }; // ============================================================================ @@ -1823,7 +1978,7 @@ ASMJIT_ENUM(kX86Cmp) { //! X86/X64 Prefetch hints. ASMJIT_ENUM(kX86Prefetch) { //! Prefetch using NT hint. - kX86PrefetchNta = 0, + kX86PrefetchNTA = 0, //! Prefetch to L0 cache. kX86PrefetchT0 = 1, //! Prefetch to L1 cache. @@ -1844,32 +1999,32 @@ ASMJIT_ENUM(kX86Prefetch) { //! used by few instructions. struct X86InstExtendedInfo { // -------------------------------------------------------------------------- - // [Accessors - InstGroup] + // [Accessors - Instruction Encoding] // -------------------------------------------------------------------------- - //! Get instruction group, see \ref kX86InstGroup. - ASMJIT_INLINE uint32_t getInstGroup() const { - return _instGroup; + //! Get instruction encoding, see \ref kX86InstEncoding. + ASMJIT_INLINE uint32_t getEncodingId() const { + return _encodingId; } // -------------------------------------------------------------------------- - // [Accessors - InstFlags] + // [Accessors - Instruction Flags] // -------------------------------------------------------------------------- - //! Get whether the instruction has flag `flag`, see `kX86InstFlags`. + //! Get whether the instruction has a `flag`, see `kX86InstFlags`. ASMJIT_INLINE bool hasInstFlag(uint32_t flag) const { return (_instFlags & flag) != 0; } - //! Get instruction flags, see `kX86InstFlags`. + //! Get all instruction flags, see `kX86InstFlags`. ASMJIT_INLINE uint32_t getInstFlags() const { return _instFlags; } //! Get whether the instruction is a control-flow intruction. //! - //! Control flow instruction is instruction that modifies instruction pointer, - //! typically jmp, jcc, call, or ret. + //! Control flow instruction is instruction that can perform a branch, + //! typically `jmp`, `jcc`, `call`, or `ret`. ASMJIT_INLINE bool isFlow() const { return (getInstFlags() & kX86InstFlagFlow) != 0; } @@ -1909,14 +2064,13 @@ struct X86InstExtendedInfo { return (getInstFlags() & kX86InstFlagLock) != 0; } - //! Get whether the instruction is special type (this is used by - //! `Compiler` to manage additional variables or functionality). + //! Get whether the instruction is special type (this is used by `Compiler` + //! to manage additional variables or functionality). ASMJIT_INLINE bool isSpecial() const { return (getInstFlags() & kX86InstFlagSpecial) != 0; } - //! Get whether the instruction is special type and it performs - //! memory access. + //! Get whether the instruction is special type and it performs memory access. ASMJIT_INLINE bool isSpecialMem() const { return (getInstFlags() & kX86InstFlagSpecialMem) != 0; } @@ -1933,25 +2087,28 @@ struct X86InstExtendedInfo { // [Accessors - EFlags] // -------------------------------------------------------------------------- - //! Get EFLAGS that the instruction reads. + //! Get EFLAGS that the instruction reads, see \ref kX86EFlags. ASMJIT_INLINE uint32_t getEFlagsIn() const { return _eflagsIn; } - //! Get EFLAGS that the instruction writes. + //! Get EFLAGS that the instruction writes, see \ref kX86EFlags. ASMJIT_INLINE uint32_t getEFlagsOut() const { return _eflagsOut; } // -------------------------------------------------------------------------- - // [Accessors - Move-Size] + // [Accessors - Write Index/Size] // -------------------------------------------------------------------------- - //! Get size of move instruction in bytes. - //! - //! See \ref X86InstInfo::getMoveSize() for more details. - ASMJIT_INLINE uint32_t getMoveSize() const { - return _moveSize; + //! Get the destination index of WRITE operation. + ASMJIT_INLINE uint32_t getWriteIndex() const { + return _writeIndex; + } + + //! Get the number of bytes that will be written by a WRITE operation. + ASMJIT_INLINE uint32_t getWriteSize() const { + return _writeSize; } // -------------------------------------------------------------------------- @@ -1981,26 +2138,39 @@ struct X86InstExtendedInfo { // [Members] // -------------------------------------------------------------------------- - //! Instruction group. - uint8_t _instGroup; + //! Instruction encoding ID. + uint8_t _encodingId; - //! Count of bytes overwritten by a move instruction. + //! Destination index of WRITE operation, default 0. + uint8_t _writeIndex; + + //! Count of bytes affected by a write operation, needed by analysis for all + //! instructions that do not read the register overwritten. Only used with + //! `kX86InstFlagMove` flag. If `_writeSize` is zero it is automatically + //! deduced from the size of the destination register. //! - //! Only used with `kX86InstFlagMove` flag. If this value is zero move depends - //! on size of the destination register. - uint8_t _moveSize; + //! In general most of SSE write-only instructions should use 16 bytes as + //! this is the size of the register (and of Ymm/Zmm registers). This means + //! that 16-bytes of the register are changed, the rest remains unchanged. + //! However, AVX instructions should use the size of Zmm register as every + //! AVX instruction zeroes the rest of the register (AVX/AVX2 instructions + //! zero the HI part of Zmm if available). + uint8_t _writeSize; //! EFlags read by the instruction. uint8_t _eflagsIn; - //! EFlags modified by the instruction. + //! EFlags written by the instruction. uint8_t _eflagsOut; - //! Instruction flags. - uint16_t _instFlags; + //! \internal + uint8_t _reserved; - //! Operands' flags. + //! Operands' flags, up to 5 operands. uint16_t _opFlags[5]; + //! Instruction flags. + uint32_t _instFlags; + //! Secondary opcode. uint32_t _secondaryOpCode; }; @@ -2042,16 +2212,16 @@ struct X86InstInfo { } // -------------------------------------------------------------------------- - // [Accessors - Group] + // [Accessors - Instruction Encoding] // -------------------------------------------------------------------------- - //! Get instruction group, see \ref kX86InstGroup. - ASMJIT_INLINE uint32_t getInstGroup() const { - return getExtendedInfo().getInstGroup(); + //! Get instruction group, see \ref kX86InstEncodingId. + ASMJIT_INLINE uint32_t getEncodingId() const { + return getExtendedInfo().getEncodingId(); } // -------------------------------------------------------------------------- - // [Accessors - Flags] + // [Accessors - Instruction Flags] // -------------------------------------------------------------------------- //! Get instruction flags, see `kX86InstFlags`. @@ -2065,18 +2235,31 @@ struct X86InstInfo { } // -------------------------------------------------------------------------- - // [Accessors - Move-Size] + // [Accessors - EFlags] // -------------------------------------------------------------------------- - //! Get size of move instruction in bytes. - //! - //! If zero, the size of MOV instruction is determined by the size of the - //! destination register (applies mostly for x86 arithmetic). This value is - //! useful for register allocator when determining if a variable is going to - //! be overwritten or not. Basically if the move size is equal or greater - //! than a variable itself it is considered overwritten. - ASMJIT_INLINE uint32_t getMoveSize() const { - return getExtendedInfo().getMoveSize(); + //! Get EFLAGS that the instruction reads, see \ref kX86EFlags. + ASMJIT_INLINE uint32_t getEFlagsIn() const { + return getExtendedInfo().getEFlagsIn(); + } + + //! Get EFLAGS that the instruction writes, see \ref kX86EFlags. + ASMJIT_INLINE uint32_t getEFlagsOut() const { + return getExtendedInfo().getEFlagsOut(); + } + + // -------------------------------------------------------------------------- + // [Accessors - Write Index/Size] + // -------------------------------------------------------------------------- + + //! Get the destination index of WRITE operation. + ASMJIT_INLINE uint32_t getWriteIndex() const { + return getExtendedInfo().getWriteIndex(); + } + + //! Get the number of bytes that will be written by a WRITE operation. + ASMJIT_INLINE uint32_t getWriteSize() const { + return getExtendedInfo().getWriteSize(); } // -------------------------------------------------------------------------- @@ -2204,11 +2387,11 @@ struct X86Util { //! \param w Fourth component position, number at interval [0, 3] inclusive. //! //! Shuffle constants can be used to make immediate value for these intrinsics: - //! - `X86Assembler::pshufw()` and `X86Compiler::pshufw()` - //! - `X86Assembler::pshufd()` and `X86Compiler::pshufd()` + //! - `X86Assembler::pshufw()` and `X86Compiler::pshufw()` + //! - `X86Assembler::pshufd()` and `X86Compiler::pshufd()` //! - `X86Assembler::pshufhw()` and `X86Compiler::pshufhw()` //! - `X86Assembler::pshuflw()` and `X86Compiler::pshuflw()` - //! - `X86Assembler::shufps()` and `X86Compiler::shufps()` + //! - `X86Assembler::shufps()` and `X86Compiler::shufps()` static ASMJIT_INLINE int mmShuffle(uint32_t z, uint32_t y, uint32_t x, uint32_t w) { return static_cast((z << 6) | (y << 4) | (x << 2) | w); } diff --git a/src/asmjit/x86/x86operand.h b/src/asmjit/x86/x86operand.h index f40ab12..9d9cedc 100644 --- a/src/asmjit/x86/x86operand.h +++ b/src/asmjit/x86/x86operand.h @@ -23,7 +23,7 @@ //! //! Internal macro to get an operand ID casting it to `Operand`. Basically //! allows to get an id of operand that has been just 'typedef'ed. -#define _OP_ID(_Op_) reinterpret_cast(_Op_).getId() +#define ASMJIT_OP_ID(_Op_) reinterpret_cast(_Op_).getId() namespace asmjit { @@ -32,19 +32,24 @@ namespace asmjit { // ============================================================================ struct X86Reg; +struct X86RipReg; +struct X86SegReg; struct X86GpReg; struct X86FpReg; struct X86MmReg; +struct X86KReg; struct X86XmmReg; struct X86YmmReg; -struct X86SegReg; +struct X86ZmmReg; #if !defined(ASMJIT_DISABLE_COMPILER) struct X86Var; struct X86GpVar; struct X86MmVar; +struct X86KVar; struct X86XmmVar; struct X86YmmVar; +struct X86ZmmVar; #endif // !ASMJIT_DISABLE_COMPILER //! \addtogroup asmjit_x86_general @@ -56,17 +61,33 @@ struct X86YmmVar; //! X86/X64 variable class. ASMJIT_ENUM(kX86RegClass) { + // -------------------------------------------------------------------------- + // [Regs & Vars] + // -------------------------------------------------------------------------- + //! X86/X64 Gp register class (compatible with universal \ref kRegClassGp). kX86RegClassGp = kRegClassGp, - //! X86/X64 Fp register class. - kX86RegClassFp = 1, //! X86/X64 Mm register class. - kX86RegClassMm = 2, + kX86RegClassMm = 1, + //! X86/X64 K register class. + kX86RegClassK = 2, //! X86/X64 Xmm/Ymm/Zmm register class. kX86RegClassXyz = 3, + //! \internal + //! + //! Last register class that is managed by `X86Compiler`, used by asserts. + _kX86RegClassManagedCount = 4, + + // -------------------------------------------------------------------------- + // [Regs Only] + // -------------------------------------------------------------------------- + + //! X86/X64 Fp register class. + kX86RegClassFp = 4, + //! Count of X86/X64 register classes. - kX86RegClassCount = 4 + kX86RegClassCount = 5 }; // ============================================================================ @@ -89,21 +110,26 @@ ASMJIT_ENUM(kX86RegType) { kX86RegTypeGpw = 0x10, //! Gpd register. kX86RegTypeGpd = 0x20, - //! Gpq register. + //! Gpq register (X64). kX86RegTypeGpq = 0x30, //! Fp register. - kX86RegTypeFp = 0x50, - //! Mm register. - kX86RegTypeMm = 0x60, + kX86RegTypeFp = 0x40, + //! Mm register (MMX+). + kX86RegTypeMm = 0x50, - //! Xmm register. + //! K register (AVX512+). + kX86RegTypeK = 0x60, + + //! Xmm register (SSE+). kX86RegTypeXmm = 0x70, - //! Ymm register. + //! Ymm register (AVX+). kX86RegTypeYmm = 0x80, - //! Zmm register. + //! Zmm register (AVX512+). kX86RegTypeZmm = 0x90, + //! Instruction pointer (RIP). + kX86RegTypeRip = 0xE0, //! Segment register. kX86RegTypeSeg = 0xF0 }; @@ -189,12 +215,14 @@ ASMJIT_ENUM(kX86Seg) { //! X86/X64 index register legacy and AVX2 (VSIB) support. ASMJIT_ENUM(kX86MemVSib) { - //! Memory operand uses Gp or no index register. + //! Memory operand uses Gpd/Gpq index (or no index register). kX86MemVSibGpz = 0, - //! Memory operand uses Xmm or no index register. + //! Memory operand uses Xmm index (or no index register). kX86MemVSibXmm = 1, - //! Memory operand uses Ymm or no index register. - kX86MemVSibYmm = 2 + //! Memory operand uses Ymm index (or no index register). + kX86MemVSibYmm = 2, + //! Memory operand uses Zmm index (or no index register). + kX86MemVSibZmm = 3 }; // ============================================================================ @@ -223,7 +251,21 @@ ASMJIT_ENUM(kX86MemFlags) { }; // This is only defined by `x86operand_regs.cpp` when exporting registers. -#if !defined(ASMJIT_EXPORTS_X86OPERAND_REGS) +#if defined(ASMJIT_EXPORTS_X86OPERAND_REGS) + +// Remap all classes to POD structs so they can be statically initialized +// without calling a constructor. Compiler will store these in .DATA section. +struct X86RipReg { Operand::VRegOp data; }; +struct X86SegReg { Operand::VRegOp data; }; +struct X86GpReg { Operand::VRegOp data; }; +struct X86FpReg { Operand::VRegOp data; }; +struct X86KReg { Operand::VRegOp data; }; +struct X86MmReg { Operand::VRegOp data; }; +struct X86XmmReg { Operand::VRegOp data; }; +struct X86YmmReg { Operand::VRegOp data; }; +struct X86ZmmReg { Operand::VRegOp data; }; + +#else // ============================================================================ // [asmjit::X86RegCount] @@ -231,12 +273,29 @@ ASMJIT_ENUM(kX86MemFlags) { //! \internal //! -//! X86/X64 registers count (Gp, Fp, Mm, Xmm). +//! X86/X64 registers count (Gp, Mm, K, Xmm/Ymm/Zmm). +//! +//! Since the number of registers changed across CPU generations `X86RegCount` +//! class is used by `X86Assembler` and `X86Compiler` to provide a way to get +//! number of available registers dynamically. 32-bit mode offers always only +//! 8 registers of all classes, however, 64-bit mode offers 16 Gp registers and +//! 16 Xmm/Ymm/Zmm registers. AVX512 instruction set doubles the number of SIMD +//! registers (Xmm/Ymm/Zmm) to 32, this mode has to be explicitly enabled to +//! take effect as it changes some assumptions. +//! +//! `X86RegCount` is also used extensively by `X86Compiler`'s register allocator +//! and data structures. Fp registers were omitted as they are never mapped to +//! variables, thus, not needed to be managed. +//! +//! \note At the moment `X86RegCount` can fit into 32-bits, having 8-bits for +//! all register classes (except Fp). This can change in the future after a +//! new instruction set is announced. struct X86RegCount { // -------------------------------------------------------------------------- // [Zero] // -------------------------------------------------------------------------- + //! Reset all counters to zero. ASMJIT_INLINE void reset() { _packed = 0; } @@ -245,61 +304,87 @@ struct X86RegCount { // [Get] // -------------------------------------------------------------------------- - ASMJIT_INLINE uint32_t get(uint32_t c) const { - ASMJIT_ASSERT(c < kX86RegClassCount); - return _regs[c]; + //! Get register count by `classId`. + ASMJIT_INLINE uint32_t get(uint32_t classId) const { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + return _regs[classId]; } + //! Get Gp register count. ASMJIT_INLINE uint32_t getGp() const { return _regs[kX86RegClassGp]; } - ASMJIT_INLINE uint32_t getFp() const { return _regs[kX86RegClassFp]; } + //! Get Mm register count. ASMJIT_INLINE uint32_t getMm() const { return _regs[kX86RegClassMm]; } + //! Get K register count. + ASMJIT_INLINE uint32_t getK() const { return _regs[kX86RegClassK]; } + //! Get Xmm/Ymm/Zmm register count. ASMJIT_INLINE uint32_t getXyz() const { return _regs[kX86RegClassXyz]; } // -------------------------------------------------------------------------- // [Set] // -------------------------------------------------------------------------- - ASMJIT_INLINE void set(uint32_t c, uint32_t n) { - ASMJIT_ASSERT(c < kX86RegClassCount); - ASMJIT_ASSERT(n < 0x100); + //! Set register count by `classId`. + ASMJIT_INLINE void set(uint32_t classId, uint32_t n) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + ASMJIT_ASSERT(n <= 0xFF); - _regs[c] = static_cast(n); + _regs[classId] = static_cast(n); } + //! Set Gp register count. ASMJIT_INLINE void setGp(uint32_t n) { set(kX86RegClassGp, n); } - ASMJIT_INLINE void setFp(uint32_t n) { set(kX86RegClassFp, n); } + //! Set Mm register count. ASMJIT_INLINE void setMm(uint32_t n) { set(kX86RegClassMm, n); } + //! Set K register count. + ASMJIT_INLINE void setK(uint32_t n) { set(kX86RegClassK, n); } + //! Set Xmm/Ymm/Zmm register count. ASMJIT_INLINE void setXyz(uint32_t n) { set(kX86RegClassXyz, n); } // -------------------------------------------------------------------------- // [Add] // -------------------------------------------------------------------------- - ASMJIT_INLINE void add(uint32_t c, uint32_t n = 1) { - ASMJIT_ASSERT(c < kX86RegClassCount); - ASMJIT_ASSERT(n < 0x100); + //! Add register count by `classId`. + ASMJIT_INLINE void add(uint32_t classId, uint32_t n = 1) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + ASMJIT_ASSERT(0xFF - static_cast(_regs[classId]) >= n); - _regs[c] += static_cast(n); + _regs[classId] += static_cast(n); } + //! Add Gp register count. ASMJIT_INLINE void addGp(uint32_t n) { add(kX86RegClassGp, n); } - ASMJIT_INLINE void addFp(uint32_t n) { add(kX86RegClassFp, n); } + //! Add Mm register count. ASMJIT_INLINE void addMm(uint32_t n) { add(kX86RegClassMm, n); } + //! Add K register count. + ASMJIT_INLINE void addK(uint32_t n) { add(kX86RegClassK, n); } + //! Add Xmm/Ymm/Zmm register count. ASMJIT_INLINE void addXyz(uint32_t n) { add(kX86RegClassXyz, n); } // -------------------------------------------------------------------------- // [Misc] // -------------------------------------------------------------------------- - ASMJIT_INLINE void makeIndex(const X86RegCount& count) { - uint8_t a = count._regs[0]; - uint8_t b = count._regs[1]; - uint8_t c = count._regs[2]; + //! Build a register indexes, based on register's `count`. + //! + //! Register index is used by \ref `X86Compiler` in per-instruction register + //! data. Indexes are sorted by register class in Gp, Mm, K, and Xmm/Ymm/Zmm + //! order. + ASMJIT_INLINE void indexFromRegCount(const X86RegCount& count) { + uint32_t x = count._regs[0]; + uint32_t y; - _regs[0] = 0; - _regs[1] = a; - _regs[2] = a + b; - _regs[3] = a + b + c; + _regs[0] = static_cast(0); + _regs[1] = static_cast(x); + + x = x + count._regs[1]; + y = x + count._regs[2]; + + ASMJIT_ASSERT(x <= 0xFF); + ASMJIT_ASSERT(y <= 0xFF); + + _regs[2] = static_cast(x); + _regs[3] = static_cast(y); } // -------------------------------------------------------------------------- @@ -308,10 +393,16 @@ struct X86RegCount { union { struct { + //! Count of Gp registers. uint8_t _gp; - uint8_t _fp; + //! Count of Mm registers. uint8_t _mm; - uint8_t _xy; + //! Count of K registers. + uint8_t _k; + //! Count of Xmm/Ymm/Zmm registers. + uint8_t _xyz; + //! \internal + uint8_t _reserved[3]; }; uint8_t _regs[4]; @@ -325,12 +416,13 @@ struct X86RegCount { //! \internal //! -//! X86/X64 registers mask (Gp, Fp, Mm, Xmm/Ymm/Zmm). +//! X86/X64 registers mask (Gp, Mm, K, Xmm/Ymm/Zmm). struct X86RegMask { // -------------------------------------------------------------------------- // [Reset] // -------------------------------------------------------------------------- + //! Reset all register masks to zero. ASMJIT_INLINE void reset() { _packed.reset(); } @@ -339,135 +431,189 @@ struct X86RegMask { // [IsEmpty / Has] // -------------------------------------------------------------------------- + //! Get whether all register masks are zero (empty). ASMJIT_INLINE bool isEmpty() const { return _packed.isZero(); } - ASMJIT_INLINE bool has(uint32_t c, uint32_t mask = 0xFFFFFFFF) const { - switch (c) { + ASMJIT_INLINE bool has(uint32_t classId, uint32_t mask = 0xFFFFFFFF) const { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { case kX86RegClassGp : return (static_cast(_gp ) & mask) != 0; - case kX86RegClassFp : return (static_cast(_fp ) & mask) != 0; case kX86RegClassMm : return (static_cast(_mm ) & mask) != 0; + case kX86RegClassK : return (static_cast(_k ) & mask) != 0; case kX86RegClassXyz: return (static_cast(_xyz) & mask) != 0; } - ASMJIT_ASSERT(!"Reached"); return false; } - // -------------------------------------------------------------------------- - // [Zero] - // -------------------------------------------------------------------------- - - ASMJIT_INLINE void zero(uint32_t c) { - switch (c) { - case kX86RegClassGp : _gp = 0; break; - case kX86RegClassFp : _fp = 0; break; - case kX86RegClassMm : _mm = 0; break; - case kX86RegClassXyz: _xyz = 0; break; - } - } + ASMJIT_INLINE bool hasGp(uint32_t mask = 0xFFFFFFFF) const { return has(kX86RegClassGp, mask); } + ASMJIT_INLINE bool hasMm(uint32_t mask = 0xFFFFFFFF) const { return has(kX86RegClassMm, mask); } + ASMJIT_INLINE bool hasK(uint32_t mask = 0xFFFFFFFF) const { return has(kX86RegClassK, mask); } + ASMJIT_INLINE bool hasXyz(uint32_t mask = 0xFFFFFFFF) const { return has(kX86RegClassXyz, mask); } // -------------------------------------------------------------------------- // [Get] // -------------------------------------------------------------------------- - ASMJIT_INLINE uint32_t get(uint32_t c) const { - switch (c) { + ASMJIT_INLINE uint32_t get(uint32_t classId) const { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { case kX86RegClassGp : return _gp; - case kX86RegClassFp : return _fp; case kX86RegClassMm : return _mm; + case kX86RegClassK : return _k; case kX86RegClassXyz: return _xyz; } - ASMJIT_ASSERT(!"Reached"); return 0; } + ASMJIT_INLINE uint32_t getGp() const { return get(kX86RegClassGp); } + ASMJIT_INLINE uint32_t getMm() const { return get(kX86RegClassMm); } + ASMJIT_INLINE uint32_t getK() const { return get(kX86RegClassK); } + ASMJIT_INLINE uint32_t getXyz() const { return get(kX86RegClassXyz); } + + // -------------------------------------------------------------------------- + // [Zero] + // -------------------------------------------------------------------------- + + ASMJIT_INLINE void zero(uint32_t classId) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { + case kX86RegClassGp : _gp = 0; break; + case kX86RegClassMm : _mm = 0; break; + case kX86RegClassK : _k = 0; break; + case kX86RegClassXyz: _xyz = 0; break; + } + } + + ASMJIT_INLINE void zeroGp() { zero(kX86RegClassGp); } + ASMJIT_INLINE void zeroMm() { zero(kX86RegClassMm); } + ASMJIT_INLINE void zeroK() { zero(kX86RegClassK); } + ASMJIT_INLINE void zeroXyz() { zero(kX86RegClassXyz); } + // -------------------------------------------------------------------------- // [Set] // -------------------------------------------------------------------------- - ASMJIT_INLINE void set(uint32_t c, uint32_t mask) { - switch (c) { + ASMJIT_INLINE void set(const X86RegMask& other) { + _packed = other._packed; + } + + ASMJIT_INLINE void set(uint32_t classId, uint32_t mask) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { case kX86RegClassGp : _gp = static_cast(mask); break; - case kX86RegClassFp : _fp = static_cast(mask); break; case kX86RegClassMm : _mm = static_cast(mask); break; + case kX86RegClassK : _k = static_cast(mask); break; case kX86RegClassXyz: _xyz = static_cast(mask); break; } } - ASMJIT_INLINE void set(const X86RegMask& other) { - _packed.setUInt64(other._packed); - } - - // -------------------------------------------------------------------------- - // [Add] - // -------------------------------------------------------------------------- - - ASMJIT_INLINE void add(uint32_t c, uint32_t mask) { - switch (c) { - case kX86RegClassGp : _gp |= static_cast(mask); break; - case kX86RegClassFp : _fp |= static_cast(mask); break; - case kX86RegClassMm : _mm |= static_cast(mask); break; - case kX86RegClassXyz: _xyz |= static_cast(mask); break; - } - } - - ASMJIT_INLINE void add(const X86RegMask& other) { - _packed.or_(other._packed); - } - - // -------------------------------------------------------------------------- - // [Del] - // -------------------------------------------------------------------------- - - ASMJIT_INLINE void del(uint32_t c, uint32_t mask) { - switch (c) { - case kX86RegClassGp : _gp &= ~static_cast(mask); break; - case kX86RegClassFp : _fp &= ~static_cast(mask); break; - case kX86RegClassMm : _mm &= ~static_cast(mask); break; - case kX86RegClassXyz: _xyz &= ~static_cast(mask); break; - } - } - - ASMJIT_INLINE void del(const X86RegMask& other) { - _packed.del(other._packed); - } + ASMJIT_INLINE void setGp(uint32_t mask) { return set(kX86RegClassGp, mask); } + ASMJIT_INLINE void setMm(uint32_t mask) { return set(kX86RegClassMm, mask); } + ASMJIT_INLINE void setK(uint32_t mask) { return set(kX86RegClassK, mask); } + ASMJIT_INLINE void setXyz(uint32_t mask) { return set(kX86RegClassXyz, mask); } // -------------------------------------------------------------------------- // [And] // -------------------------------------------------------------------------- - ASMJIT_INLINE void and_(uint32_t c, uint32_t mask) { - switch (c) { + ASMJIT_INLINE void and_(const X86RegMask& other) { + _packed.and_(other._packed); + } + + ASMJIT_INLINE void and_(uint32_t classId, uint32_t mask) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { case kX86RegClassGp : _gp &= static_cast(mask); break; - case kX86RegClassFp : _fp &= static_cast(mask); break; case kX86RegClassMm : _mm &= static_cast(mask); break; + case kX86RegClassK : _k &= static_cast(mask); break; case kX86RegClassXyz: _xyz &= static_cast(mask); break; } } - ASMJIT_INLINE void and_(const X86RegMask& other) { - _packed.and_(other._packed); + ASMJIT_INLINE void andGp(uint32_t mask) { and_(kX86RegClassGp, mask); } + ASMJIT_INLINE void andMm(uint32_t mask) { and_(kX86RegClassMm, mask); } + ASMJIT_INLINE void andK(uint32_t mask) { and_(kX86RegClassK, mask); } + ASMJIT_INLINE void andXyz(uint32_t mask) { and_(kX86RegClassXyz, mask); } + + // -------------------------------------------------------------------------- + // [AndNot] + // -------------------------------------------------------------------------- + + ASMJIT_INLINE void andNot(const X86RegMask& other) { + _packed.andNot(other._packed); } + ASMJIT_INLINE void andNot(uint32_t classId, uint32_t mask) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { + case kX86RegClassGp : _gp &= ~static_cast(mask); break; + case kX86RegClassMm : _mm &= ~static_cast(mask); break; + case kX86RegClassK : _k &= ~static_cast(mask); break; + case kX86RegClassXyz: _xyz &= ~static_cast(mask); break; + } + } + + ASMJIT_INLINE void andNotGp(uint32_t mask) { andNot(kX86RegClassGp, mask); } + ASMJIT_INLINE void andNotMm(uint32_t mask) { andNot(kX86RegClassMm, mask); } + ASMJIT_INLINE void andNotK(uint32_t mask) { andNot(kX86RegClassK, mask); } + ASMJIT_INLINE void andNotXyz(uint32_t mask) { andNot(kX86RegClassXyz, mask); } + + // -------------------------------------------------------------------------- + // [Or] + // -------------------------------------------------------------------------- + + ASMJIT_INLINE void or_(const X86RegMask& other) { + _packed.or_(other._packed); + } + + ASMJIT_INLINE void or_(uint32_t classId, uint32_t mask) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + switch (classId) { + case kX86RegClassGp : _gp |= static_cast(mask); break; + case kX86RegClassMm : _mm |= static_cast(mask); break; + case kX86RegClassK : _k |= static_cast(mask); break; + case kX86RegClassXyz: _xyz |= static_cast(mask); break; + } + } + + ASMJIT_INLINE void orGp(uint32_t mask) { return or_(kX86RegClassGp, mask); } + ASMJIT_INLINE void orMm(uint32_t mask) { return or_(kX86RegClassMm, mask); } + ASMJIT_INLINE void orK(uint32_t mask) { return or_(kX86RegClassK, mask); } + ASMJIT_INLINE void orXyz(uint32_t mask) { return or_(kX86RegClassXyz, mask); } + // -------------------------------------------------------------------------- // [Xor] // -------------------------------------------------------------------------- - ASMJIT_INLINE void xor_(uint32_t c, uint32_t mask) { - switch (c) { + ASMJIT_INLINE void xor_(const X86RegMask& other) { + _packed.xor_(other._packed); + } + + ASMJIT_INLINE void xor_(uint32_t classId, uint32_t mask) { + ASMJIT_ASSERT(classId < _kX86RegClassManagedCount); + + switch (classId) { case kX86RegClassGp : _gp ^= static_cast(mask); break; - case kX86RegClassFp : _fp ^= static_cast(mask); break; case kX86RegClassMm : _mm ^= static_cast(mask); break; + case kX86RegClassK : _k ^= static_cast(mask); break; case kX86RegClassXyz: _xyz ^= static_cast(mask); break; } } - ASMJIT_INLINE void xor_(const X86RegMask& other) { - _packed.xor_(other._packed); - } + ASMJIT_INLINE void xorGp(uint32_t mask) { xor_(kX86RegClassGp, mask); } + ASMJIT_INLINE void xorMm(uint32_t mask) { xor_(kX86RegClassMm, mask); } + ASMJIT_INLINE void xorK(uint32_t mask) { xor_(kX86RegClassK, mask); } + ASMJIT_INLINE void xorXyz(uint32_t mask) { xor_(kX86RegClassXyz, mask); } // -------------------------------------------------------------------------- // [Members] @@ -475,17 +621,17 @@ struct X86RegMask { union { struct { - //! Gp mask (16-bit). + //! Gp registers mask (16 bits). uint16_t _gp; - //! Fp mask (8-bit). - uint8_t _fp; - //! Mm mask (8-bit). + //! Mm registers mask (8 bits). uint8_t _mm; - //! Xmm/Ymm/Zmm mask (32-bit). + //! K registers mask (8 bits). + uint8_t _k; + //! Xmm/Ymm/Zmm registers mask (32 bits). uint32_t _xyz; }; - //! All masks as 64-bit integer. + //! Packed masks. UInt64 _packed; }; }; @@ -494,7 +640,7 @@ struct X86RegMask { // [asmjit::X86Reg] // ============================================================================ -//! Base class for all X86 registers. +//! X86/X86 register base class. struct X86Reg : public Reg { // -------------------------------------------------------------------------- // [Construction / Destruction] @@ -536,6 +682,10 @@ struct X86Reg : public Reg { ASMJIT_INLINE bool isFp() const { return _vreg.type == kX86RegTypeFp; } //! Get whether the register is Mm (64-bit) register. ASMJIT_INLINE bool isMm() const { return _vreg.type == kX86RegTypeMm; } + + //! Get whether the register is K (64-bit) register. + ASMJIT_INLINE bool isK() const { return _vreg.type == kX86RegTypeK; } + //! Get whether the register is Xmm (128-bit) register. ASMJIT_INLINE bool isXmm() const { return _vreg.type == kX86RegTypeXmm; } //! Get whether the register is Ymm (256-bit) register. @@ -543,7 +693,9 @@ struct X86Reg : public Reg { //! Get whether the register is Zmm (512-bit) register. ASMJIT_INLINE bool isZmm() const { return _vreg.type == kX86RegTypeZmm; } - //! Get whether the register is a segment. + //! Get whether the register is RIP. + ASMJIT_INLINE bool isRip() const { return _vreg.type == kX86RegTypeRip; } + //! Get whether the register is Segment. ASMJIT_INLINE bool isSeg() const { return _vreg.type == kX86RegTypeSeg; } // -------------------------------------------------------------------------- @@ -559,6 +711,58 @@ struct X86Reg : public Reg { } }; +// ============================================================================ +// [asmjit::X86RipReg] +// ============================================================================ + +//! X86/X64 RIP register. +struct X86RipReg : public X86Reg { + // -------------------------------------------------------------------------- + // [Construction / Destruction] + // -------------------------------------------------------------------------- + + //! Create a RIP register. + ASMJIT_INLINE X86RipReg() : X86Reg(kX86RegTypeRip, 0, 0) {} + //! Create a reference to `other` RIP register. + ASMJIT_INLINE X86RipReg(const X86RipReg& other) : X86Reg(other) {} + //! Create non-initialized RIP register. + explicit ASMJIT_INLINE X86RipReg(const _NoInit&) : X86Reg(NoInit) {} + + // -------------------------------------------------------------------------- + // [X86RipReg Specific] + // -------------------------------------------------------------------------- + + ASMJIT_REG_OP(X86RipReg) +}; + +// ============================================================================ +// [asmjit::X86SegReg] +// ============================================================================ + +//! X86/X64 segment register. +struct X86SegReg : public X86Reg { + // -------------------------------------------------------------------------- + // [Construction / Destruction] + // -------------------------------------------------------------------------- + + //! Create a dummy segment register. + ASMJIT_INLINE X86SegReg() : X86Reg() {} + //! Create a reference to `other` segment register. + ASMJIT_INLINE X86SegReg(const X86SegReg& other) : X86Reg(other) {} + //! Create a reference to `other` segment register and change the index to `index`. + ASMJIT_INLINE X86SegReg(const X86SegReg& other, uint32_t index) : X86Reg(other, index) {} + //! Create a custom segment register. + ASMJIT_INLINE X86SegReg(uint32_t type, uint32_t index, uint32_t size) : X86Reg(type, index, size) {} + //! Create non-initialized segment register. + explicit ASMJIT_INLINE X86SegReg(const _NoInit&) : X86Reg(NoInit) {} + + // -------------------------------------------------------------------------- + // [X86SegReg Specific] + // -------------------------------------------------------------------------- + + ASMJIT_REG_OP(X86SegReg) +}; + // ============================================================================ // [asmjit::X86GpReg] // ============================================================================ @@ -619,7 +823,32 @@ struct X86FpReg : public X86Reg { // [asmjit::X86MmReg] // ============================================================================ -//! X86/X64 64-bit Mm register. +//! X86/X64 64-bit Mm register (MMX+). +//! +//! Structure of MMX register and it's memory mapping: +//! +//! ~~~ +//! Memory Bytes +//! +--+--+--+--+--+--+--+--+ +//! |00|01|02|03|04|05|06|07| +//! +--+--+--+--+--+--+--+--+ +//! +//! MMX Register +//! +-----------------------+ +//! | QWord | +//! +-----------+-----------+ +//! | HI-DWord | LO-DWord | +//! +-----------+-----------+ +//! | W3 | W2 | W1 | W0 | +//! +--+--+--+--+--+--+--+--+ +//! |07|06|05|04|03|02|01|00| +//! +--+--+--+--+--+--+--+--+ +//! ~~~ +//! +//! Move instruction semantics: +//! +//! - `movd` - writes 4-bytes in `LO-DWord` and zeroes `HI-DWord`. +//! - `movq` - writes 8-bytes in `QWord`. struct X86MmReg : public X86Reg { // -------------------------------------------------------------------------- // [Construction / Destruction] @@ -643,11 +872,92 @@ struct X86MmReg : public X86Reg { ASMJIT_REG_OP(X86MmReg) }; +// ============================================================================ +// [asmjit::X86KReg] +// ============================================================================ + +//! X86/X64 64-bit K register (AVX512+). +struct X86KReg : public X86Reg { + // -------------------------------------------------------------------------- + // [Construction / Destruction] + // -------------------------------------------------------------------------- + + //! Create a dummy K register. + ASMJIT_INLINE X86KReg() : X86Reg() {} + //! Create a reference to `other` K register. + ASMJIT_INLINE X86KReg(const X86KReg& other) : X86Reg(other) {} + //! Create a reference to `other` K register and change the index to `index`. + ASMJIT_INLINE X86KReg(const X86KReg& other, uint32_t index) : X86Reg(other, index) {} + //! Create a custom K register. + ASMJIT_INLINE X86KReg(uint32_t type, uint32_t index, uint32_t size) : X86Reg(type, index, size) {} + //! Create non-initialized K register. + explicit ASMJIT_INLINE X86KReg(const _NoInit&) : X86Reg(NoInit) {} + + // -------------------------------------------------------------------------- + // [X86KReg Specific] + // -------------------------------------------------------------------------- + + ASMJIT_REG_OP(X86KReg) +}; + // ============================================================================ // [asmjit::X86XmmReg] // ============================================================================ -//! X86/X64 128-bit Xmm register. +//! X86/X64 128-bit Xmm register (SSE+). +//! +//! Structure of XMM register and it's memory mapping: +//! +//! ~~~ +//! Memory Bytes +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15| +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! +//! XMM Register +//! +-----------------------------------------------+ +//! | OWord | +//! +-----------------------+-----------------------+ +//! | HI-QWord/PD | LO-QWord/SD | +//! +-----------+-----------+-----------+-----------+ +//! | D3/PS | D2/PS | D1/PS | D0/SS | +//! +-----------+-----------+-----------+-----------+ +//! | W7 | W6 | W5 | W4 | W3 | W2 | W1 | W0 | +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! |15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! ~~~ +//! +//! Move instruction semantics: +//! +//! - `movd` - writes 4-bytes in `D0` and zeroes the rest. +//! - `movq` - writes 8-bytes in `Lo-QWord` and zeroes the rest. +//! - `movq2dq` - writes 8 bytes in `Lo-QWord` and zeroes the rest. +//! +//! - `movss` - writes 4-bytes in `D0` +//! (the rest is zeroed only if the source operand is a memory location). +//! - `movsd` - writes 8-bytes in `Lo-QWord` +//! (the rest is zeroed only if the source operand is a memory location). +//! +//! - `movaps`, +//! `movups`, +//! `movapd`, +//! `movupd`, +//! `movdqu`, +//! `movdqa`, +//! `lddqu` - writes 16-bytes in `OWord`. +//! +//! - `movlps`, +//! `movlpd`, +//! `movhlps` - writes 8-bytes in `Lo-QWord` and keeps the rest untouched. +//! +//! - `movhps`, +//! `movhpd`, +//! `movlhps` - writes 8-bytes in `Hi-QWord` and keeps the rest untouched. +//! +//! - `movddup`, +//! - `movsldup`, +//! - `movshdup` - writes 16 bytes in `OWord`. struct X86XmmReg : public X86Reg { // -------------------------------------------------------------------------- // [Construction / Destruction] @@ -675,7 +985,29 @@ struct X86XmmReg : public X86Reg { // [asmjit::X86YmmReg] // ============================================================================ -//! X86/X64 256-bit Ymm register. +//! X86/X64 256-bit Ymm register (AVX+). +//! +//! Structure of YMM register and it's memory mapping: +//! +//! ~~~ +//! Memory Bytes +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31| +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! +//! YMM Register +//! +-----------------------------------------------+-----------------------------------------------+ +//! | HI-DQWord | LO-DQWord | +//! +-----------------------+-----------------------+-----------------------+-----------------------+ +//! | Q3/PD | Q2/PD | Q1/PD | Q0/SD | +//! +-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +//! | D7/PS | D6/PS | D5/PS | D4/PS | D3/PS | D2/PS | D1/PS | D0/SS | +//! +-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +//! | W15 | W14 | W13 | W12 | W11 | W10 | W9 | W8 | W7 | W6 | W5 | W4 | W3 | W2 | W1 | W0 | +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| +//! +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +//! ~~~ struct X86YmmReg : public X86Reg { // -------------------------------------------------------------------------- // [Construction / Destruction] @@ -683,7 +1015,7 @@ struct X86YmmReg : public X86Reg { //! Create a dummy Ymm register. ASMJIT_INLINE X86YmmReg() : X86Reg() {} - //! Create a reference to `other` Xmm register. + //! Create a reference to `other` Ymm register. ASMJIT_INLINE X86YmmReg(const X86YmmReg& other) : X86Reg(other) {} //! Create a reference to `other` Ymm register and change the index to `index`. ASMJIT_INLINE X86YmmReg(const X86YmmReg& other, uint32_t index) : X86Reg(other, index) {} @@ -700,31 +1032,31 @@ struct X86YmmReg : public X86Reg { }; // ============================================================================ -// [asmjit::X86SegReg] +// [asmjit::X86ZmmReg] // ============================================================================ -//! X86/X64 segment register. -struct X86SegReg : public X86Reg { +//! X86/X64 512-bit Zmm register (AVX512+). +struct X86ZmmReg : public X86Reg { // -------------------------------------------------------------------------- // [Construction / Destruction] // -------------------------------------------------------------------------- - //! Create a dummy segment register. - ASMJIT_INLINE X86SegReg() : X86Reg() {} - //! Create a reference to `other` segment register. - ASMJIT_INLINE X86SegReg(const X86SegReg& other) : X86Reg(other) {} - //! Create a reference to `other` segment register and change the index to `index`. - ASMJIT_INLINE X86SegReg(const X86SegReg& other, uint32_t index) : X86Reg(other, index) {} - //! Create a custom segment register. - ASMJIT_INLINE X86SegReg(uint32_t type, uint32_t index, uint32_t size) : X86Reg(type, index, size) {} - //! Create non-initialized segment register. - explicit ASMJIT_INLINE X86SegReg(const _NoInit&) : X86Reg(NoInit) {} + //! Create a dummy Zmm register. + ASMJIT_INLINE X86ZmmReg() : X86Reg() {} + //! Create a reference to `other` Zmm register. + ASMJIT_INLINE X86ZmmReg(const X86ZmmReg& other) : X86Reg(other) {} + //! Create a reference to `other` Zmm register and change the index to `index`. + ASMJIT_INLINE X86ZmmReg(const X86ZmmReg& other, uint32_t index) : X86Reg(other, index) {} + //! Create a custom Zmm register. + ASMJIT_INLINE X86ZmmReg(uint32_t type, uint32_t index, uint32_t size) : X86Reg(type, index, size) {} + //! Create non-initialized Zmm register. + explicit ASMJIT_INLINE X86ZmmReg(const _NoInit&) : X86Reg(NoInit) {} // -------------------------------------------------------------------------- - // [X86SegReg Specific] + // [X86ZmmReg Specific] // -------------------------------------------------------------------------- - ASMJIT_REG_OP(X86SegReg) + ASMJIT_REG_OP(X86ZmmReg) }; // ============================================================================ @@ -807,7 +1139,7 @@ struct X86Mem : public BaseMem { (kX86MemVSibGpz << kX86MemVSibIndex) + (shift << kX86MemShiftIndex), label.getId()); - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); _vmem.displacement = disp; } @@ -815,7 +1147,7 @@ struct X86Mem : public BaseMem { _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, kMemTypeBaseIndex, _getGpdFlags(reinterpret_cast(base)) + (kX86MemVSibGpz << kX86MemVSibIndex), - _OP_ID(base)); + ASMJIT_OP_ID(base)); _init_packed_d2_d3(kInvalidValue, disp); } @@ -825,8 +1157,8 @@ struct X86Mem : public BaseMem { _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, kMemTypeBaseIndex, _getGpdFlags(reinterpret_cast(base)) + (shift << kX86MemShiftIndex), - _OP_ID(base)); - _vmem.index = _OP_ID(index); + ASMJIT_OP_ID(base)); + _vmem.index = ASMJIT_OP_ID(index); _vmem.displacement = disp; } @@ -837,8 +1169,8 @@ struct X86Mem : public BaseMem { _getGpdFlags(reinterpret_cast(base)) + (kX86MemVSibXmm << kX86MemVSibIndex) + (shift << kX86MemShiftIndex), - _OP_ID(base)); - _vmem.index = _OP_ID(index); + ASMJIT_OP_ID(base)); + _vmem.index = ASMJIT_OP_ID(index); _vmem.displacement = disp; } @@ -849,13 +1181,13 @@ struct X86Mem : public BaseMem { _getGpdFlags(reinterpret_cast(base)) + (kX86MemVSibYmm << kX86MemVSibIndex) + (shift << kX86MemShiftIndex), - _OP_ID(base)); - _vmem.index = _OP_ID(index); + ASMJIT_OP_ID(base)); + _vmem.index = ASMJIT_OP_ID(index); _vmem.displacement = disp; } ASMJIT_INLINE X86Mem(const _Init&, uint32_t memType, const X86Var& base, int32_t disp, uint32_t size) : BaseMem(NoInit) { - _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, memType, 0, _OP_ID(base)); + _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, memType, 0, ASMJIT_OP_ID(base)); _vmem.index = kInvalidValue; _vmem.displacement = disp; } @@ -863,8 +1195,8 @@ struct X86Mem : public BaseMem { ASMJIT_INLINE X86Mem(const _Init&, uint32_t memType, const X86Var& base, const X86GpVar& index, uint32_t shift, int32_t disp, uint32_t size) : BaseMem(NoInit) { ASMJIT_ASSERT(shift <= 3); - _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, memType, shift << kX86MemShiftIndex, _OP_ID(base)); - _vmem.index = _OP_ID(index); + _init_packed_op_sz_b0_b1_id(kOperandTypeMem, size, memType, shift << kX86MemShiftIndex, ASMJIT_OP_ID(base)); + _vmem.index = ASMJIT_OP_ID(index); _vmem.displacement = disp; } #endif // !ASMJIT_DISABLE_COMPILER @@ -946,12 +1278,12 @@ struct X86Mem : public BaseMem { // [VSib] // -------------------------------------------------------------------------- - //! Get SIB type. + //! Get V-SIB type. ASMJIT_INLINE uint32_t getVSib() const { return (static_cast(_vmem.flags) >> kX86MemVSibIndex) & kX86MemVSibBits; } - //! Set SIB type. + //! Set V-SIB type. ASMJIT_INLINE X86Mem& _setVSib(uint32_t vsib) { _packed[0].u32[0] &=~IntUtil::pack32_4x8(0x00, 0x00, 0x00, kX86MemVSibMask); _packed[0].u32[0] |= IntUtil::pack32_4x8(0x00, 0x00, 0x00, vsib << kX86MemVSibIndex); @@ -1047,38 +1379,38 @@ struct X86Mem : public BaseMem { #if !defined(ASMJIT_DISABLE_COMPILER) //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86GpVar& index) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibGpz); } //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86GpVar& index, uint32_t shift) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibGpz).setShift(shift); } //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86XmmVar& index) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibXmm); } //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86XmmVar& index, uint32_t shift) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibXmm).setShift(shift); } //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86YmmVar& index) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibYmm); } //! Set memory index. ASMJIT_INLINE X86Mem& setIndex(const X86YmmVar& index, uint32_t shift) { - _vmem.index = _OP_ID(index); + _vmem.index = ASMJIT_OP_ID(index); return _setVSib(kX86MemVSibYmm).setShift(shift); } #endif // !ASMJIT_DISABLE_COMPILER @@ -1183,7 +1515,35 @@ struct X86Mem : public BaseMem { return (base._vreg.size & 0x4) << (kX86MemGpdIndex - 2); } }; -#endif // !ASMJIT_EXPORTS_X86OPERAND_REGS +#endif // ASMJIT_EXPORTS_X86OPERAND_REGS + +// ============================================================================ +// [asmjit::X86RegData] +// ============================================================================ + +struct X86RegData { + X86RipReg rip; + X86GpReg noGp; + + X86SegReg seg[7]; + + X86GpReg gpbLo[16]; + X86GpReg gpbHi[4]; + + X86GpReg gpw[16]; + X86GpReg gpd[16]; + X86GpReg gpq[16]; + + X86FpReg fp[8]; + X86MmReg mm[8]; + X86KReg k[8]; + + X86XmmReg xmm[32]; + X86YmmReg ymm[32]; + X86ZmmReg zmm[32]; +}; + +ASMJIT_VAR const X86RegData x86RegData; // ============================================================================ // [asmjit::x86] @@ -1195,140 +1555,218 @@ namespace x86 { // [asmjit::x86 - Reg] // ============================================================================ -//! No Gp register, can be used only within `X86Mem` operand. -ASMJIT_VAR const X86GpReg noGpReg; +#define ASMJIT_DEF_REG(_Type_, _Name_, _Field_) \ + static const _Type_& _Name_ = x86RegData._Field_ -ASMJIT_VAR const X86GpReg al; //!< 8-bit Gpb-lo register. -ASMJIT_VAR const X86GpReg cl; //!< 8-bit Gpb-lo register. -ASMJIT_VAR const X86GpReg dl; //!< 8-bit Gpb-lo register. -ASMJIT_VAR const X86GpReg bl; //!< 8-bit Gpb-lo register. -ASMJIT_VAR const X86GpReg spl; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg bpl; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg sil; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg dil; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r8b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r9b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r10b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r11b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r12b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r13b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r14b; //!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg r15b; //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86RipReg, rip, rip); //!< RIP register. +ASMJIT_DEF_REG(X86GpReg , noGpReg, noGp); //!< No GP register (for `X86Mem` operand.). -ASMJIT_VAR const X86GpReg ah; //!< 8-bit Gpb-hi register. -ASMJIT_VAR const X86GpReg ch; //!< 8-bit Gpb-hi register. -ASMJIT_VAR const X86GpReg dh; //!< 8-bit Gpb-hi register. -ASMJIT_VAR const X86GpReg bh; //!< 8-bit Gpb-hi register. +ASMJIT_DEF_REG(X86SegReg, es , seg[1]); //!< Cs segment register. +ASMJIT_DEF_REG(X86SegReg, cs , seg[2]); //!< Ss segment register. +ASMJIT_DEF_REG(X86SegReg, ss , seg[3]); //!< Ds segment register. +ASMJIT_DEF_REG(X86SegReg, ds , seg[4]); //!< Es segment register. +ASMJIT_DEF_REG(X86SegReg, fs , seg[5]); //!< Fs segment register. +ASMJIT_DEF_REG(X86SegReg, gs , seg[6]); //!< Gs segment register. -ASMJIT_VAR const X86GpReg ax; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg cx; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg dx; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg bx; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg sp; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg bp; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg si; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg di; //!< 16-bit Gpw register. -ASMJIT_VAR const X86GpReg r8w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r9w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r10w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r11w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r12w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r13w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r14w; //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86GpReg r15w; //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , al , gpbLo[0]); //!< 8-bit Gpb-lo register. +ASMJIT_DEF_REG(X86GpReg , cl , gpbLo[1]); //!< 8-bit Gpb-lo register. +ASMJIT_DEF_REG(X86GpReg , dl , gpbLo[2]); //!< 8-bit Gpb-lo register. +ASMJIT_DEF_REG(X86GpReg , bl , gpbLo[3]); //!< 8-bit Gpb-lo register. +ASMJIT_DEF_REG(X86GpReg , spl , gpbLo[4]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , bpl , gpbLo[5]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , sil , gpbLo[6]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , dil , gpbLo[7]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r8b , gpbLo[8]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r9b , gpbLo[9]); //!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r10b , gpbLo[10]);//!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r11b , gpbLo[11]);//!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r12b , gpbLo[12]);//!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r13b , gpbLo[13]);//!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r14b , gpbLo[14]);//!< 8-bit Gpb-lo register (X64). +ASMJIT_DEF_REG(X86GpReg , r15b , gpbLo[15]);//!< 8-bit Gpb-lo register (X64). -ASMJIT_VAR const X86GpReg eax; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg ecx; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg edx; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg ebx; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg esp; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg ebp; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg esi; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg edi; //!< 32-bit Gpd register. -ASMJIT_VAR const X86GpReg r8d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r9d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r10d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r11d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r12d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r13d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r14d; //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86GpReg r15d; //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , ah , gpbHi[0]); //!< 8-bit Gpb-hi register. +ASMJIT_DEF_REG(X86GpReg , ch , gpbHi[1]); //!< 8-bit Gpb-hi register. +ASMJIT_DEF_REG(X86GpReg , dh , gpbHi[2]); //!< 8-bit Gpb-hi register. +ASMJIT_DEF_REG(X86GpReg , bh , gpbHi[3]); //!< 8-bit Gpb-hi register. -ASMJIT_VAR const X86GpReg rax; //!< 64-bit Gpq register (X64). -ASMJIT_VAR const X86GpReg rcx; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rdx; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rbx; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rsp; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rbp; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rsi; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg rdi; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r8; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r9; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r10; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r11; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r12; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r13; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r14; //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86GpReg r15; //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , ax , gpw[0]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , cx , gpw[1]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , dx , gpw[2]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , bx , gpw[3]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , sp , gpw[4]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , bp , gpw[5]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , si , gpw[6]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , di , gpw[7]); //!< 16-bit Gpw register. +ASMJIT_DEF_REG(X86GpReg , r8w , gpw[8]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r9w , gpw[9]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r10w , gpw[10]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r11w , gpw[11]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r12w , gpw[12]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r13w , gpw[13]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r14w , gpw[14]); //!< 16-bit Gpw register (X64). +ASMJIT_DEF_REG(X86GpReg , r15w , gpw[15]); //!< 16-bit Gpw register (X64). -ASMJIT_VAR const X86FpReg fp0; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp1; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp2; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp3; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp4; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp5; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp6; //!< 80-bit Fp register. -ASMJIT_VAR const X86FpReg fp7; //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86GpReg , eax , gpd[0]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , ecx , gpd[1]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , edx , gpd[2]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , ebx , gpd[3]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , esp , gpd[4]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , ebp , gpd[5]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , esi , gpd[6]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , edi , gpd[7]); //!< 32-bit Gpd register. +ASMJIT_DEF_REG(X86GpReg , r8d , gpd[8]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r9d , gpd[9]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r10d , gpd[10]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r11d , gpd[11]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r12d , gpd[12]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r13d , gpd[13]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r14d , gpd[14]); //!< 32-bit Gpd register (X64). +ASMJIT_DEF_REG(X86GpReg , r15d , gpd[15]); //!< 32-bit Gpd register (X64). -ASMJIT_VAR const X86MmReg mm0; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm1; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm2; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm3; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm4; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm5; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm6; //!< 64-bit Mm register. -ASMJIT_VAR const X86MmReg mm7; //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86GpReg , rax , gpq[0]); //!< 64-bit Gpq register (X64). +ASMJIT_DEF_REG(X86GpReg , rcx , gpq[1]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rdx , gpq[2]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rbx , gpq[3]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rsp , gpq[4]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rbp , gpq[5]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rsi , gpq[6]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , rdi , gpq[7]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r8 , gpq[8]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r9 , gpq[9]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r10 , gpq[10]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r11 , gpq[11]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r12 , gpq[12]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r13 , gpq[13]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r14 , gpq[14]); //!< 64-bit Gpq register (X64) +ASMJIT_DEF_REG(X86GpReg , r15 , gpq[15]); //!< 64-bit Gpq register (X64) -ASMJIT_VAR const X86XmmReg xmm0; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm1; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm2; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm3; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm4; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm5; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm6; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm7; //!< 128-bit Xmm register. -ASMJIT_VAR const X86XmmReg xmm8; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm9; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm10; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm11; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm12; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm13; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm14; //!< 128-bit Xmm register (X64). -ASMJIT_VAR const X86XmmReg xmm15; //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86FpReg , fp0 , fp[0]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp1 , fp[1]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp2 , fp[2]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp3 , fp[3]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp4 , fp[4]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp5 , fp[5]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp6 , fp[6]); //!< 80-bit Fp register. +ASMJIT_DEF_REG(X86FpReg , fp7 , fp[7]); //!< 80-bit Fp register. -ASMJIT_VAR const X86YmmReg ymm0; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm1; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm2; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm3; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm4; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm5; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm6; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm7; //!< 256-bit Ymm register. -ASMJIT_VAR const X86YmmReg ymm8; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm9; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm10; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm11; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm12; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm13; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm14; //!< 256-bit Ymm register (X64). -ASMJIT_VAR const X86YmmReg ymm15; //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86MmReg , mm0 , mm[0]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm1 , mm[1]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm2 , mm[2]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm3 , mm[3]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm4 , mm[4]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm5 , mm[5]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm6 , mm[6]); //!< 64-bit Mm register. +ASMJIT_DEF_REG(X86MmReg , mm7 , mm[7]); //!< 64-bit Mm register. -ASMJIT_VAR const X86SegReg cs; //!< Cs segment register. -ASMJIT_VAR const X86SegReg ss; //!< Ss segment register. -ASMJIT_VAR const X86SegReg ds; //!< Ds segment register. -ASMJIT_VAR const X86SegReg es; //!< Es segment register. -ASMJIT_VAR const X86SegReg fs; //!< Fs segment register. -ASMJIT_VAR const X86SegReg gs; //!< Gs segment register. +ASMJIT_DEF_REG(X86KReg , k0 , k[0]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k1 , k[1]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k2 , k[2]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k3 , k[3]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k4 , k[4]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k5 , k[5]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k6 , k[6]); //!< 64-bit K register. +ASMJIT_DEF_REG(X86KReg , k7 , k[7]); //!< 64-bit K register. + +ASMJIT_DEF_REG(X86XmmReg, xmm0 , xmm[0]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm1 , xmm[1]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm2 , xmm[2]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm3 , xmm[3]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm4 , xmm[4]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm5 , xmm[5]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm6 , xmm[6]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm7 , xmm[7]); //!< 128-bit Xmm register. +ASMJIT_DEF_REG(X86XmmReg, xmm8 , xmm[8]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm9 , xmm[9]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm10, xmm[10]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm11, xmm[11]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm12, xmm[12]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm13, xmm[13]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm14, xmm[14]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm15, xmm[15]); //!< 128-bit Xmm register (X64). +ASMJIT_DEF_REG(X86XmmReg, xmm16, xmm[16]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm17, xmm[17]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm18, xmm[18]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm19, xmm[19]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm20, xmm[20]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm21, xmm[21]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm22, xmm[22]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm23, xmm[23]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm24, xmm[24]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm25, xmm[25]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm26, xmm[26]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm27, xmm[27]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm28, xmm[28]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm29, xmm[29]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm30, xmm[30]); //!< 128-bit Xmm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86XmmReg, xmm31, xmm[31]); //!< 128-bit Xmm register (X64 & AVX512VL+). + +ASMJIT_DEF_REG(X86YmmReg, ymm0 , ymm[0]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm1 , ymm[1]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm2 , ymm[2]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm3 , ymm[3]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm4 , ymm[4]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm5 , ymm[5]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm6 , ymm[6]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm7 , ymm[7]); //!< 256-bit Ymm register. +ASMJIT_DEF_REG(X86YmmReg, ymm8 , ymm[8]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm9 , ymm[9]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm10, ymm[10]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm11, ymm[11]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm12, ymm[12]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm13, ymm[13]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm14, ymm[14]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm15, ymm[15]); //!< 256-bit Ymm register (X64). +ASMJIT_DEF_REG(X86YmmReg, ymm16, ymm[16]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm17, ymm[17]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm18, ymm[18]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm19, ymm[19]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm20, ymm[20]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm21, ymm[21]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm22, ymm[22]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm23, ymm[23]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm24, ymm[24]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm25, ymm[25]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm26, ymm[26]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm27, ymm[27]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm28, ymm[28]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm29, ymm[29]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm30, ymm[30]); //!< 256-bit Ymm register (X64 & AVX512VL+). +ASMJIT_DEF_REG(X86YmmReg, ymm31, ymm[31]); //!< 256-bit Ymm register (X64 & AVX512VL+). + +ASMJIT_DEF_REG(X86ZmmReg, zmm0 , zmm[0]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm1 , zmm[1]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm2 , zmm[2]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm3 , zmm[3]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm4 , zmm[4]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm5 , zmm[5]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm6 , zmm[6]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm7 , zmm[7]); //!< 512-bit Zmm register. +ASMJIT_DEF_REG(X86ZmmReg, zmm8 , zmm[8]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm9 , zmm[9]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm10, zmm[10]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm11, zmm[11]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm12, zmm[12]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm13, zmm[13]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm14, zmm[14]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm15, zmm[15]); //!< 512-bit Zmm register (X64). +ASMJIT_DEF_REG(X86ZmmReg, zmm16, zmm[16]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm17, zmm[17]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm18, zmm[18]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm19, zmm[19]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm20, zmm[20]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm21, zmm[21]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm22, zmm[22]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm23, zmm[23]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm24, zmm[24]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm25, zmm[25]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm26, zmm[26]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm27, zmm[27]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm28, zmm[28]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm29, zmm[29]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm30, zmm[30]); //!< 512-bit Zmm register (X64 & AVX512+). +ASMJIT_DEF_REG(X86ZmmReg, zmm31, zmm[31]); //!< 512-bit Zmm register (X64 & AVX512+). +#undef ASMJIT_DEF_REG // This is only defined by `x86operand_regs.cpp` when exporting registers. #if !defined(ASMJIT_EXPORTS_X86OPERAND_REGS) @@ -1347,10 +1785,14 @@ static ASMJIT_INLINE X86GpReg gpq(uint32_t index) { return X86GpReg(kX86RegTypeG static ASMJIT_INLINE X86FpReg fp(uint32_t index) { return X86FpReg(kX86RegTypeFp, index, 10); } //! Create 64-bit Mm register operand. static ASMJIT_INLINE X86MmReg mm(uint32_t index) { return X86MmReg(kX86RegTypeMm, index, 8); } +//! Create 64-bit K register operand. +static ASMJIT_INLINE X86KReg k(uint32_t index) { return X86KReg(kX86RegTypeK, index, 8); } //! Create 128-bit Xmm register operand. static ASMJIT_INLINE X86XmmReg xmm(uint32_t index) { return X86XmmReg(kX86RegTypeXmm, index, 16); } //! Create 256-bit Ymm register operand. static ASMJIT_INLINE X86YmmReg ymm(uint32_t index) { return X86YmmReg(kX86RegTypeYmm, index, 32); } +//! Create 512-bit Zmm register operand. +static ASMJIT_INLINE X86ZmmReg zmm(uint32_t index) { return X86ZmmReg(kX86RegTypeZmm, index, 64); } // ============================================================================ // [asmjit::x86 - Ptr (Reg)] @@ -1522,7 +1964,8 @@ ASMJIT_EXPAND_PTR_VAR(zword, 64) } // asmjit namespace -#undef _OP_ID +// [Cleanup] +#undef ASMJIT_OP_ID // [Api-End] #include "../apiend.h" diff --git a/src/asmjit/x86/x86operand_regs.cpp b/src/asmjit/x86/x86operand_regs.cpp index b215ae4..cc649e9 100644 --- a/src/asmjit/x86/x86operand_regs.cpp +++ b/src/asmjit/x86/x86operand_regs.cpp @@ -20,165 +20,262 @@ namespace asmjit { -// Prevent static initialization. -// -// Remap all classes to POD structs so they can be statically initialized -// without calling a constructor. Compiler will store these in data section. -struct X86GpReg { Operand::VRegOp data; }; -struct X86FpReg { Operand::VRegOp data; }; -struct X86MmReg { Operand::VRegOp data; }; -struct X86XmmReg { Operand::VRegOp data; }; -struct X86YmmReg { Operand::VRegOp data; }; -struct X86SegReg { Operand::VRegOp data; }; +#define REG(_Type_, _Index_, _Size_) {{ \ + kOperandTypeReg, _Size_, { ((_Type_) << 8) + _Index_ }, kInvalidValue, {{ kInvalidVar, 0 }} \ +}} -namespace x86 { +const X86RegData x86RegData = { + // RIP. + REG(kX86RegTypeRip, 0, 0), + // NpGp. + REG(kInvalidReg, kInvalidReg, 0), -// ============================================================================ -// [asmjit::x86::Registers] -// ============================================================================ + // Segments. + { + REG(kX86RegTypeSeg, 0, 2), // Default. + REG(kX86RegTypeSeg, 1, 2), // ES. + REG(kX86RegTypeSeg, 2, 2), // CS. + REG(kX86RegTypeSeg, 3, 2), // SS. + REG(kX86RegTypeSeg, 4, 2), // DS. + REG(kX86RegTypeSeg, 5, 2), // FS. + REG(kX86RegTypeSeg, 6, 2) // GS. + }, -#define REG(_Class_, _Name_, _Type_, _Index_, _Size_) \ - const _Class_ _Name_ = {{ \ - kOperandTypeReg, _Size_, { ((_Type_) << 8) + _Index_ }, kInvalidValue, {{ kInvalidVar, 0 }} \ - }} + // GpbLo. + { + REG(kX86RegTypeGpbLo, 0, 1), + REG(kX86RegTypeGpbLo, 1, 1), + REG(kX86RegTypeGpbLo, 2, 1), + REG(kX86RegTypeGpbLo, 3, 1), + REG(kX86RegTypeGpbLo, 4, 1), + REG(kX86RegTypeGpbLo, 5, 1), + REG(kX86RegTypeGpbLo, 6, 1), + REG(kX86RegTypeGpbLo, 7, 1), + REG(kX86RegTypeGpbLo, 8, 1), + REG(kX86RegTypeGpbLo, 9, 1), + REG(kX86RegTypeGpbLo, 10, 1), + REG(kX86RegTypeGpbLo, 11, 1), + REG(kX86RegTypeGpbLo, 12, 1), + REG(kX86RegTypeGpbLo, 13, 1), + REG(kX86RegTypeGpbLo, 14, 1), + REG(kX86RegTypeGpbLo, 15, 1) + }, -REG(X86GpReg, noGpReg, kInvalidReg, kInvalidReg, 0); + // GpbHi. + { + REG(kX86RegTypeGpbHi, 0, 1), + REG(kX86RegTypeGpbHi, 1, 1), + REG(kX86RegTypeGpbHi, 2, 1), + REG(kX86RegTypeGpbHi, 3, 1) + }, -REG(X86GpReg, al, kX86RegTypeGpbLo, kX86RegIndexAx, 1); -REG(X86GpReg, cl, kX86RegTypeGpbLo, kX86RegIndexCx, 1); -REG(X86GpReg, dl, kX86RegTypeGpbLo, kX86RegIndexDx, 1); -REG(X86GpReg, bl, kX86RegTypeGpbLo, kX86RegIndexBx, 1); -REG(X86GpReg, spl, kX86RegTypeGpbLo, kX86RegIndexSp, 1); -REG(X86GpReg, bpl, kX86RegTypeGpbLo, kX86RegIndexBp, 1); -REG(X86GpReg, sil, kX86RegTypeGpbLo, kX86RegIndexSi, 1); -REG(X86GpReg, dil, kX86RegTypeGpbLo, kX86RegIndexDi, 1); -REG(X86GpReg, r8b, kX86RegTypeGpbLo, 8, 1); -REG(X86GpReg, r9b, kX86RegTypeGpbLo, 9, 1); -REG(X86GpReg, r10b, kX86RegTypeGpbLo, 10, 1); -REG(X86GpReg, r11b, kX86RegTypeGpbLo, 11, 1); -REG(X86GpReg, r12b, kX86RegTypeGpbLo, 12, 1); -REG(X86GpReg, r13b, kX86RegTypeGpbLo, 13, 1); -REG(X86GpReg, r14b, kX86RegTypeGpbLo, 14, 1); -REG(X86GpReg, r15b, kX86RegTypeGpbLo, 15, 1); + // Gpw. + { + REG(kX86RegTypeGpw, 0, 2), + REG(kX86RegTypeGpw, 1, 2), + REG(kX86RegTypeGpw, 2, 2), + REG(kX86RegTypeGpw, 3, 2), + REG(kX86RegTypeGpw, 4, 2), + REG(kX86RegTypeGpw, 5, 2), + REG(kX86RegTypeGpw, 6, 2), + REG(kX86RegTypeGpw, 7, 2), + REG(kX86RegTypeGpw, 8, 2), + REG(kX86RegTypeGpw, 9, 2), + REG(kX86RegTypeGpw, 10, 2), + REG(kX86RegTypeGpw, 11, 2), + REG(kX86RegTypeGpw, 12, 2), + REG(kX86RegTypeGpw, 13, 2), + REG(kX86RegTypeGpw, 14, 2), + REG(kX86RegTypeGpw, 15, 2) + }, -REG(X86GpReg, ah, kX86RegTypeGpbHi, kX86RegIndexAx, 1); -REG(X86GpReg, ch, kX86RegTypeGpbHi, kX86RegIndexCx, 1); -REG(X86GpReg, dh, kX86RegTypeGpbHi, kX86RegIndexDx, 1); -REG(X86GpReg, bh, kX86RegTypeGpbHi, kX86RegIndexBx, 1); + // Gpd. + { + REG(kX86RegTypeGpd, 0, 4), + REG(kX86RegTypeGpd, 1, 4), + REG(kX86RegTypeGpd, 2, 4), + REG(kX86RegTypeGpd, 3, 4), + REG(kX86RegTypeGpd, 4, 4), + REG(kX86RegTypeGpd, 5, 4), + REG(kX86RegTypeGpd, 6, 4), + REG(kX86RegTypeGpd, 7, 4), + REG(kX86RegTypeGpd, 8, 4), + REG(kX86RegTypeGpd, 9, 4), + REG(kX86RegTypeGpd, 10, 4), + REG(kX86RegTypeGpd, 11, 4), + REG(kX86RegTypeGpd, 12, 4), + REG(kX86RegTypeGpd, 13, 4), + REG(kX86RegTypeGpd, 14, 4), + REG(kX86RegTypeGpd, 15, 4) + }, -REG(X86GpReg, ax, kX86RegTypeGpw, kX86RegIndexAx, 2); -REG(X86GpReg, cx, kX86RegTypeGpw, kX86RegIndexCx, 2); -REG(X86GpReg, dx, kX86RegTypeGpw, kX86RegIndexDx, 2); -REG(X86GpReg, bx, kX86RegTypeGpw, kX86RegIndexBx, 2); -REG(X86GpReg, sp, kX86RegTypeGpw, kX86RegIndexSp, 2); -REG(X86GpReg, bp, kX86RegTypeGpw, kX86RegIndexBp, 2); -REG(X86GpReg, si, kX86RegTypeGpw, kX86RegIndexSi, 2); -REG(X86GpReg, di, kX86RegTypeGpw, kX86RegIndexDi, 2); -REG(X86GpReg, r8w, kX86RegTypeGpw, 8, 2); -REG(X86GpReg, r9w, kX86RegTypeGpw, 9, 2); -REG(X86GpReg, r10w, kX86RegTypeGpw, 10, 2); -REG(X86GpReg, r11w, kX86RegTypeGpw, 11, 2); -REG(X86GpReg, r12w, kX86RegTypeGpw, 12, 2); -REG(X86GpReg, r13w, kX86RegTypeGpw, 13, 2); -REG(X86GpReg, r14w, kX86RegTypeGpw, 14, 2); -REG(X86GpReg, r15w, kX86RegTypeGpw, 15, 2); + // Gpq. + { + REG(kX86RegTypeGpq, 0, 8), + REG(kX86RegTypeGpq, 1, 8), + REG(kX86RegTypeGpq, 2, 8), + REG(kX86RegTypeGpq, 3, 8), + REG(kX86RegTypeGpq, 4, 8), + REG(kX86RegTypeGpq, 5, 8), + REG(kX86RegTypeGpq, 6, 8), + REG(kX86RegTypeGpq, 7, 8), + REG(kX86RegTypeGpq, 8, 8), + REG(kX86RegTypeGpq, 9, 8), + REG(kX86RegTypeGpq, 10, 8), + REG(kX86RegTypeGpq, 11, 8), + REG(kX86RegTypeGpq, 12, 8), + REG(kX86RegTypeGpq, 13, 8), + REG(kX86RegTypeGpq, 14, 8), + REG(kX86RegTypeGpq, 15, 8) + }, -REG(X86GpReg, eax, kX86RegTypeGpd, kX86RegIndexAx, 4); -REG(X86GpReg, ecx, kX86RegTypeGpd, kX86RegIndexCx, 4); -REG(X86GpReg, edx, kX86RegTypeGpd, kX86RegIndexDx, 4); -REG(X86GpReg, ebx, kX86RegTypeGpd, kX86RegIndexBx, 4); -REG(X86GpReg, esp, kX86RegTypeGpd, kX86RegIndexSp, 4); -REG(X86GpReg, ebp, kX86RegTypeGpd, kX86RegIndexBp, 4); -REG(X86GpReg, esi, kX86RegTypeGpd, kX86RegIndexSi, 4); -REG(X86GpReg, edi, kX86RegTypeGpd, kX86RegIndexDi, 4); -REG(X86GpReg, r8d, kX86RegTypeGpd, 8, 4); -REG(X86GpReg, r9d, kX86RegTypeGpd, 9, 4); -REG(X86GpReg, r10d, kX86RegTypeGpd, 10, 4); -REG(X86GpReg, r11d, kX86RegTypeGpd, 11, 4); -REG(X86GpReg, r12d, kX86RegTypeGpd, 12, 4); -REG(X86GpReg, r13d, kX86RegTypeGpd, 13, 4); -REG(X86GpReg, r14d, kX86RegTypeGpd, 14, 4); -REG(X86GpReg, r15d, kX86RegTypeGpd, 15, 4); + // Fp. + { + REG(kX86RegTypeFp, 0, 10), + REG(kX86RegTypeFp, 1, 10), + REG(kX86RegTypeFp, 2, 10), + REG(kX86RegTypeFp, 3, 10), + REG(kX86RegTypeFp, 4, 10), + REG(kX86RegTypeFp, 5, 10), + REG(kX86RegTypeFp, 6, 10), + REG(kX86RegTypeFp, 7, 10) + }, -REG(X86GpReg, rax, kX86RegTypeGpq, kX86RegIndexAx, 8); -REG(X86GpReg, rcx, kX86RegTypeGpq, kX86RegIndexCx, 8); -REG(X86GpReg, rdx, kX86RegTypeGpq, kX86RegIndexDx, 8); -REG(X86GpReg, rbx, kX86RegTypeGpq, kX86RegIndexBx, 8); -REG(X86GpReg, rsp, kX86RegTypeGpq, kX86RegIndexSp, 8); -REG(X86GpReg, rbp, kX86RegTypeGpq, kX86RegIndexBp, 8); -REG(X86GpReg, rsi, kX86RegTypeGpq, kX86RegIndexSi, 8); -REG(X86GpReg, rdi, kX86RegTypeGpq, kX86RegIndexDi, 8); -REG(X86GpReg, r8, kX86RegTypeGpq, 8, 8); -REG(X86GpReg, r9, kX86RegTypeGpq, 9, 8); -REG(X86GpReg, r10, kX86RegTypeGpq, 10, 8); -REG(X86GpReg, r11, kX86RegTypeGpq, 11, 8); -REG(X86GpReg, r12, kX86RegTypeGpq, 12, 8); -REG(X86GpReg, r13, kX86RegTypeGpq, 13, 8); -REG(X86GpReg, r14, kX86RegTypeGpq, 14, 8); -REG(X86GpReg, r15, kX86RegTypeGpq, 15, 8); + // Mm. + { + REG(kX86RegTypeMm, 0, 8), + REG(kX86RegTypeMm, 1, 8), + REG(kX86RegTypeMm, 2, 8), + REG(kX86RegTypeMm, 3, 8), + REG(kX86RegTypeMm, 4, 8), + REG(kX86RegTypeMm, 5, 8), + REG(kX86RegTypeMm, 6, 8), + REG(kX86RegTypeMm, 7, 8) + }, -REG(X86FpReg, fp0, kX86RegTypeFp, 0, 10); -REG(X86FpReg, fp1, kX86RegTypeFp, 1, 10); -REG(X86FpReg, fp2, kX86RegTypeFp, 2, 10); -REG(X86FpReg, fp3, kX86RegTypeFp, 3, 10); -REG(X86FpReg, fp4, kX86RegTypeFp, 4, 10); -REG(X86FpReg, fp5, kX86RegTypeFp, 5, 10); -REG(X86FpReg, fp6, kX86RegTypeFp, 6, 10); -REG(X86FpReg, fp7, kX86RegTypeFp, 7, 10); + // K. + { + REG(kX86RegTypeK, 0, 8), + REG(kX86RegTypeK, 1, 8), + REG(kX86RegTypeK, 2, 8), + REG(kX86RegTypeK, 3, 8), + REG(kX86RegTypeK, 4, 8), + REG(kX86RegTypeK, 5, 8), + REG(kX86RegTypeK, 6, 8), + REG(kX86RegTypeK, 7, 8) + }, -REG(X86MmReg, mm0, kX86RegTypeMm, 0, 8); -REG(X86MmReg, mm1, kX86RegTypeMm, 1, 8); -REG(X86MmReg, mm2, kX86RegTypeMm, 2, 8); -REG(X86MmReg, mm3, kX86RegTypeMm, 3, 8); -REG(X86MmReg, mm4, kX86RegTypeMm, 4, 8); -REG(X86MmReg, mm5, kX86RegTypeMm, 5, 8); -REG(X86MmReg, mm6, kX86RegTypeMm, 6, 8); -REG(X86MmReg, mm7, kX86RegTypeMm, 7, 8); + // Xmm. + { + REG(kX86RegTypeXmm, 0, 16), + REG(kX86RegTypeXmm, 1, 16), + REG(kX86RegTypeXmm, 2, 16), + REG(kX86RegTypeXmm, 3, 16), + REG(kX86RegTypeXmm, 4, 16), + REG(kX86RegTypeXmm, 5, 16), + REG(kX86RegTypeXmm, 6, 16), + REG(kX86RegTypeXmm, 7, 16), + REG(kX86RegTypeXmm, 8, 16), + REG(kX86RegTypeXmm, 9, 16), + REG(kX86RegTypeXmm, 10, 16), + REG(kX86RegTypeXmm, 11, 16), + REG(kX86RegTypeXmm, 12, 16), + REG(kX86RegTypeXmm, 13, 16), + REG(kX86RegTypeXmm, 14, 16), + REG(kX86RegTypeXmm, 15, 16), + REG(kX86RegTypeXmm, 16, 16), + REG(kX86RegTypeXmm, 17, 16), + REG(kX86RegTypeXmm, 18, 16), + REG(kX86RegTypeXmm, 19, 16), + REG(kX86RegTypeXmm, 20, 16), + REG(kX86RegTypeXmm, 21, 16), + REG(kX86RegTypeXmm, 22, 16), + REG(kX86RegTypeXmm, 23, 16), + REG(kX86RegTypeXmm, 24, 16), + REG(kX86RegTypeXmm, 25, 16), + REG(kX86RegTypeXmm, 26, 16), + REG(kX86RegTypeXmm, 27, 16), + REG(kX86RegTypeXmm, 28, 16), + REG(kX86RegTypeXmm, 29, 16), + REG(kX86RegTypeXmm, 30, 16), + REG(kX86RegTypeXmm, 31, 16) + }, -REG(X86XmmReg, xmm0, kX86RegTypeXmm, 0, 16); -REG(X86XmmReg, xmm1, kX86RegTypeXmm, 1, 16); -REG(X86XmmReg, xmm2, kX86RegTypeXmm, 2, 16); -REG(X86XmmReg, xmm3, kX86RegTypeXmm, 3, 16); -REG(X86XmmReg, xmm4, kX86RegTypeXmm, 4, 16); -REG(X86XmmReg, xmm5, kX86RegTypeXmm, 5, 16); -REG(X86XmmReg, xmm6, kX86RegTypeXmm, 6, 16); -REG(X86XmmReg, xmm7, kX86RegTypeXmm, 7, 16); -REG(X86XmmReg, xmm8, kX86RegTypeXmm, 8, 16); -REG(X86XmmReg, xmm9, kX86RegTypeXmm, 9, 16); -REG(X86XmmReg, xmm10, kX86RegTypeXmm, 10, 16); -REG(X86XmmReg, xmm11, kX86RegTypeXmm, 11, 16); -REG(X86XmmReg, xmm12, kX86RegTypeXmm, 12, 16); -REG(X86XmmReg, xmm13, kX86RegTypeXmm, 13, 16); -REG(X86XmmReg, xmm14, kX86RegTypeXmm, 14, 16); -REG(X86XmmReg, xmm15, kX86RegTypeXmm, 15, 16); + // Ymm. + { + REG(kX86RegTypeYmm, 0, 32), + REG(kX86RegTypeYmm, 1, 32), + REG(kX86RegTypeYmm, 2, 32), + REG(kX86RegTypeYmm, 3, 32), + REG(kX86RegTypeYmm, 4, 32), + REG(kX86RegTypeYmm, 5, 32), + REG(kX86RegTypeYmm, 6, 32), + REG(kX86RegTypeYmm, 7, 32), + REG(kX86RegTypeYmm, 8, 32), + REG(kX86RegTypeYmm, 9, 32), + REG(kX86RegTypeYmm, 10, 32), + REG(kX86RegTypeYmm, 11, 32), + REG(kX86RegTypeYmm, 12, 32), + REG(kX86RegTypeYmm, 13, 32), + REG(kX86RegTypeYmm, 14, 32), + REG(kX86RegTypeYmm, 15, 32), + REG(kX86RegTypeYmm, 16, 32), + REG(kX86RegTypeYmm, 17, 32), + REG(kX86RegTypeYmm, 18, 32), + REG(kX86RegTypeYmm, 19, 32), + REG(kX86RegTypeYmm, 20, 32), + REG(kX86RegTypeYmm, 21, 32), + REG(kX86RegTypeYmm, 22, 32), + REG(kX86RegTypeYmm, 23, 32), + REG(kX86RegTypeYmm, 24, 32), + REG(kX86RegTypeYmm, 25, 32), + REG(kX86RegTypeYmm, 26, 32), + REG(kX86RegTypeYmm, 27, 32), + REG(kX86RegTypeYmm, 28, 32), + REG(kX86RegTypeYmm, 29, 32), + REG(kX86RegTypeYmm, 30, 32), + REG(kX86RegTypeYmm, 31, 32) + }, -REG(X86YmmReg, ymm0, kX86RegTypeYmm, 0, 32); -REG(X86YmmReg, ymm1, kX86RegTypeYmm, 1, 32); -REG(X86YmmReg, ymm2, kX86RegTypeYmm, 2, 32); -REG(X86YmmReg, ymm3, kX86RegTypeYmm, 3, 32); -REG(X86YmmReg, ymm4, kX86RegTypeYmm, 4, 32); -REG(X86YmmReg, ymm5, kX86RegTypeYmm, 5, 32); -REG(X86YmmReg, ymm6, kX86RegTypeYmm, 6, 32); -REG(X86YmmReg, ymm7, kX86RegTypeYmm, 7, 32); -REG(X86YmmReg, ymm8, kX86RegTypeYmm, 8, 32); -REG(X86YmmReg, ymm9, kX86RegTypeYmm, 9, 32); -REG(X86YmmReg, ymm10, kX86RegTypeYmm, 10, 32); -REG(X86YmmReg, ymm11, kX86RegTypeYmm, 11, 32); -REG(X86YmmReg, ymm12, kX86RegTypeYmm, 12, 32); -REG(X86YmmReg, ymm13, kX86RegTypeYmm, 13, 32); -REG(X86YmmReg, ymm14, kX86RegTypeYmm, 14, 32); -REG(X86YmmReg, ymm15, kX86RegTypeYmm, 15, 32); - -REG(X86SegReg, cs, kX86RegTypeSeg, kX86SegCs, 2); -REG(X86SegReg, ss, kX86RegTypeSeg, kX86SegSs, 2); -REG(X86SegReg, ds, kX86RegTypeSeg, kX86SegDs, 2); -REG(X86SegReg, es, kX86RegTypeSeg, kX86SegEs, 2); -REG(X86SegReg, fs, kX86RegTypeSeg, kX86SegFs, 2); -REG(X86SegReg, gs, kX86RegTypeSeg, kX86SegGs, 2); + // Zmm. + { + REG(kX86RegTypeZmm, 0, 64), + REG(kX86RegTypeZmm, 1, 64), + REG(kX86RegTypeZmm, 2, 64), + REG(kX86RegTypeZmm, 3, 64), + REG(kX86RegTypeZmm, 4, 64), + REG(kX86RegTypeZmm, 5, 64), + REG(kX86RegTypeZmm, 6, 64), + REG(kX86RegTypeZmm, 7, 64), + REG(kX86RegTypeZmm, 8, 64), + REG(kX86RegTypeZmm, 9, 64), + REG(kX86RegTypeZmm, 10, 64), + REG(kX86RegTypeZmm, 11, 64), + REG(kX86RegTypeZmm, 12, 64), + REG(kX86RegTypeZmm, 13, 64), + REG(kX86RegTypeZmm, 14, 64), + REG(kX86RegTypeZmm, 15, 64), + REG(kX86RegTypeZmm, 16, 64), + REG(kX86RegTypeZmm, 17, 64), + REG(kX86RegTypeZmm, 18, 64), + REG(kX86RegTypeZmm, 19, 64), + REG(kX86RegTypeZmm, 20, 64), + REG(kX86RegTypeZmm, 21, 64), + REG(kX86RegTypeZmm, 22, 64), + REG(kX86RegTypeZmm, 23, 64), + REG(kX86RegTypeZmm, 24, 64), + REG(kX86RegTypeZmm, 25, 64), + REG(kX86RegTypeZmm, 26, 64), + REG(kX86RegTypeZmm, 27, 64), + REG(kX86RegTypeZmm, 28, 64), + REG(kX86RegTypeZmm, 29, 64), + REG(kX86RegTypeZmm, 30, 64), + REG(kX86RegTypeZmm, 31, 64) + } +}; #undef REG -} // x86 namespace } // asmjit namespace // [Api-End] diff --git a/src/asmjit/x86/x86scheduler.cpp b/src/asmjit/x86/x86scheduler.cpp index 33ddb61..10a2332 100644 --- a/src/asmjit/x86/x86scheduler.cpp +++ b/src/asmjit/x86/x86scheduler.cpp @@ -76,7 +76,7 @@ Error X86Scheduler::run(Node* start, Node* stop) { Node* next = node_->getNext(); ASMJIT_ASSERT(node_->getType() == kNodeTypeInst); - printf(" %s\n", X86Util::getInstInfo(static_cast(node_)->getCode()).getInstName()); + printf(" %s\n", X86Util::getInstInfo(static_cast(node_)->getInstId()).getInstName()); node_ = next; } diff --git a/tools/src-gendefs.js b/tools/src-gendefs.js index d1c1b33..66d3c74 100644 --- a/tools/src-gendefs.js +++ b/tools/src-gendefs.js @@ -12,20 +12,26 @@ var fs = require("fs"); // [Utilities] // ---------------------------------------------------------------------------- -var upFirst = function(s) { +function upFirst(s) { if (!s) return s; return s[0].toUpperCase() + s.substr(1); -}; +} -var trimLeft = function(s) { +function trimLeft(s) { return s.replace(/^\s+/, ""); } -var inject = function(s, start, end, code) { +function padLeft(s, n) { + while (s.length < n) + s += " "; + return s; +} + +function inject(s, start, end, code) { var iStart = s.indexOf(start); var iEnd = s.indexOf(end); - + if (iStart === -1) throw new Error("Couldn't locate start mark."); @@ -33,7 +39,7 @@ var inject = function(s, start, end, code) { throw new Error("Couldn't locate end mark."); return s.substr(0, iStart + start.length) + code + s.substr(iEnd); -}; +} // ---------------------------------------------------------------------------- // [Database] @@ -109,7 +115,7 @@ var Database = (function() { var extendedData = this.extendedData; var extendedMap = this.extendedMap; - + for (var name in instMap) { var inst = instMap[name]; @@ -171,67 +177,101 @@ var generate = function(fileName, arch) { var data = oldData; var code = ""; var disclaimer = "// Automatically generated, do not edit.\n"; - + + var instCount = 0; + var sizeof_X86InstInfo = 8; + var sizeof_X86InstExtendedInfo = 24; + // Create database. var db = new Database(); var re = new RegExp( - "INST\\(([A-Za-z0-9_]+)\\s*," + // [01] Inst-Code. - "\\s*\\\"([A-Za-z0-9_ ]*)\\\"\\s*," + // [02] Inst-Name. - "([^,]+)," + // [03] Inst-Group. - "([^,]+)," + // [04] Inst-Flags. - "([^,]+)," + // [05] Move-Size. - "([^,]+)," + // [06] Operand-Flags[0]. - "([^,]+)," + // [07] Operand-Flags[1]. - "([^,]+)," + // [08] Operand-Flags[2]. - "([^,]+)," + // [09] Operand-Flags[3]. - "\\s*E\\(([A-Z_]+)\\)\\s*," + // [10] EFLAGS. - "(.{17}[^,]*)," + // [11] OpCode[0]. - "(.{17}[^\\)]*)\\)", // [12] OpCode[1]. + "INST\\(([A-Za-z0-9_]+)\\s*," + // [01] Id. + "\\s*\\\"([A-Za-z0-9_ ]*)\\\"\\s*," + // [02] Name. + "(.{20}[^,]*)," + // [03] Opcode[0]. + "(.{20}[^,]*)," + // [04] Opcode[1]. + "([^,]+)," + // [05] Encoding. + "([^,]+)," + // [06] IFLAGS. + "\\s*EF\\(([A-Z_]+)\\)\\s*," + // [07] EFLAGS. + "([^,]+)," + // [08] Write-Index. + "([^,]+)," + // [09] Write-Size. + "([^,]+)," + // [10] Operand-Flags[0]. + "([^,]+)," + // [11] Operand-Flags[1]. + "([^,]+)," + // [12] Operand-Flags[2]. + "([^,]+)," + // [13] Operand-Flags[3]. + "([^\\)]+)\\)", // [14] Operand-Flags[4]. "g"); + var i, k, m; + var srcForm = ""; + while (m = re.exec(data)) { // Extract instruction ID and Name. var id = m[1]; var name = m[2]; - // Extract data that goes to the secondary table (ExtendedInfo). - var instGroup = trimLeft(m[3]); - var instFlags = trimLeft(m[4]); - var moveSize = trimLeft(m[5]); - - var opFlags0 = trimLeft(m[6]); - var opFlags1 = trimLeft(m[7]); - var opFlags2 = trimLeft(m[8]); - var opFlags3 = trimLeft(m[9]); - var eflags = m[10]; - var opCode1 = trimLeft(m[12]); + // Extract data that goes to the secondary table (X86InstExtendedInfo). + var opcode0 = trimLeft(m[3]); + var opcode1 = trimLeft(m[4]); + var encoding = trimLeft(m[5]); + var iflags = trimLeft(m[6]); + var eflags = m[7]; + var writeIndex = trimLeft(m[8]); + var writeSize = trimLeft(m[9]); + var oflags0 = trimLeft(m[10]); + var oflags1 = trimLeft(m[11]); + var oflags2 = trimLeft(m[12]); + var oflags3 = trimLeft(m[13]); + var oflags4 = trimLeft(m[14]); // Generate EFlags-In and EFlags-Out. - var eflagsIn = decToHex(getEFlagsMask(eflags, "RX"), 2); - var eflagsOut = decToHex(getEFlagsMask(eflags, "WXU"), 2); + var eflagsIn = decToHex(getEFlagsMask(eflags, "RX" ), 2); + var eflagsOut = decToHex(getEFlagsMask(eflags, "WXU"), 2); - var extData = "" + - instGroup + ", " + - moveSize + ", " + - eflagsIn + ", " + - eflagsOut + ", " + - instFlags + ", " + - "{ " + opFlags0 + ", " + opFlags1 + ", " + opFlags2 + ", " + opFlags3 + ", U }, " + - opCode1; + var extData = + encoding + ", " + + writeIndex + ", " + + writeSize + ", " + + eflagsIn + ", " + + eflagsOut + ", " + + "0" + ", " + + "{ " + oflags0 + ", " + oflags1 + ", " + oflags2 + ", " + oflags3 + ", " + oflags4 + " }, " + + iflags + ", " + + opcode1; + + srcForm += " INST(" + + padLeft(id, 27) + ", " + + padLeft('"' + name + '"', 19) + ", " + + opcode0 + ", " + + opcode1 + ", " + + encoding + ", " + + iflags + ", " + + "EF(" + eflags + "), " + + writeIndex + ", " + + writeSize + ", " + + oflags0 + ", " + + oflags1 + ", " + + oflags2 + ", " + + oflags3 + ", " + + oflags4 + "),\n"; db.add(name, id, extData); + instCount++; } + // fs.writeFileSync("srcform.cpp", srcForm, "utf8"); db.index(); - console.log("Number of instructions: " + db.instNames.array.length); - console.log("Instruction names size: " + db.instNames.getSize()); - console.log("Extended-info length : " + db.extendedData.length); + var instDataSize = instCount * sizeof_X86InstInfo + db.extendedData.length * sizeof_X86InstExtendedInfo; + + console.log("Number of Instructions : " + instCount); + console.log("Number of ExtInfo Rows : " + db.extendedData.length); + console.log("Instructions' Data Size: " + instDataSize); + console.log("Instructions' Names Size: " + db.instNames.getSize()); // Generate InstName[] string. code += disclaimer; - code += "#if !defined(ASMJIT_DISABLE_INST_NAMES)\n"; + code += "#if !defined(ASMJIT_DISABLE_NAMES)\n"; code += "const char _" + arch + "InstName[] =\n"; - for (var k in db.instMap) { + for (k in db.instMap) { var inst = db.instMap[k]; code += " \"" + k + "\\0\"\n"; } @@ -248,7 +288,7 @@ var generate = function(fileName, arch) { code += disclaimer; code += "static const uint16_t _" + arch + "InstAlphaIndex[26] = {\n"; - for (var i = 0; i < db.instAlpha.length; i++) { + for (i = 0; i < db.instAlpha.length; i++) { var id = db.instAlpha[i]; code += " " + (id === undefined ? "0xFFFF" : id); if (i !== db.instAlpha.length - 1) @@ -260,18 +300,18 @@ var generate = function(fileName, arch) { // Generate NameIndex. code += disclaimer; code += "enum k" + Arch + "InstData_NameIndex {\n"; - for (var k in db.instMap) { + for (k in db.instMap) { var inst = db.instMap[k]; code += " " + inst.id + "_NameIndex = " + inst.nameIndex + ",\n"; } code = code.substr(0, code.length - 2) + "\n};\n"; - code += "#endif // !ASMJIT_DISABLE_INST_NAMES\n" + code += "#endif // !ASMJIT_DISABLE_NAMES\n" code += "\n"; // Generate ExtendedInfo. code += disclaimer; code += "const " + Arch + "InstExtendedInfo _" + arch + "InstExtendedInfo[] = {\n"; - for (var i = 0; i < db.extendedData.length; i++) { + for (i = 0; i < db.extendedData.length; i++) { code += " { " + db.extendedData[i] + " }"; if (i !== db.extendedData.length - 1) code += ","; @@ -282,7 +322,7 @@ var generate = function(fileName, arch) { code += disclaimer; code += "enum k" + Arch + "InstData_ExtendedIndex {\n"; - for (var k in db.instMap) { + for (k in db.instMap) { var inst = db.instMap[k]; code += " " + inst.id + "_ExtendedIndex = " + inst.extendedIndex + ",\n"; }