diff options
author | tg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-01-08 04:49:01 +0000 |
---|---|---|
committer | tg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-01-08 04:49:01 +0000 |
commit | ec93adf1b7126a0969ec5eb6b07febf6bfd8dbcf (patch) | |
tree | 220b991b3502a4f3c48246a7ade75e151b7b3f34 | |
parent | 677af5f6f8ea691f7931f9851aaedf35bab5c408 (diff) | |
download | fpc-ec93adf1b7126a0969ec5eb6b07febf6bfd8dbcf.tar.gz |
merge avxtestgenerator backward from trunk
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48107 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | fixes_3_2/tests/utils/avx/asmtestgenerator.pas | 3445 | ||||
-rw-r--r-- | fixes_3_2/tests/utils/avx/avxopcodes.pas | 3003 | ||||
-rw-r--r-- | fixes_3_2/tests/utils/avx/avxtestgenerator.pp | 19 | ||||
-rw-r--r-- | fixes_3_2/tests/utils/avx/options.pas | 12 |
4 files changed, 5472 insertions, 1007 deletions
diff --git a/fixes_3_2/tests/utils/avx/asmtestgenerator.pas b/fixes_3_2/tests/utils/avx/asmtestgenerator.pas index f1cddc39ed..607d6a1a71 100644 --- a/fixes_3_2/tests/utils/avx/asmtestgenerator.pas +++ b/fixes_3_2/tests/utils/avx/asmtestgenerator.pas @@ -27,9 +27,10 @@ interface uses BaseList, Classes; type - TOpType = (otUnknown, otXMMReg, otXMMRM, otXMMRM16, otXMMRM8, otYMMReg, otYMMRM, otEAX, otRAX, otMem32, - otMem8, otMem16, otMem64, otMem128, otMem256, otREG64, otREG32, otRM32, otRM64, otIMM8, - otXMEM32, otXMEM64, otYMEM32, otYMEM64); + TOpType = (otUnknown, otXMMReg, otXMMRM, otXMMRM16, otXMMRM8, otYMMReg, otYMMRM, otZMMReg, otZMMRM, otEAX, otRAX, otMem32, + otMem8, otMem16, otMem64, otMem128, otMem256, otMem512, otREG64, otREG32, otREG16, otREG8, otRM32, otRM64, otIMM8, + otXMEM32, otXMEM64, otYMEM32, otYMEM64, otZMEM32, otZMEM64, + otB32, otB64, otKREG); TOperandListItem = class(TObject) private @@ -63,6 +64,8 @@ type TAsmTestGenerator = class(TObject) private + FReg8 : TStringList; + FReg16 : TStringList; FReg32Base : TStringList; FReg32Index : TStringList; FReg64Base : TStringList; @@ -71,27 +74,1076 @@ type FReg6432Index : TStringList; FReg32XMMIndex : TStringList; FReg32YMMIndex : TStringList; + FReg32ZMMIndex : TStringList; FReg64XMMIndex : TStringList; FReg64YMMIndex : TStringList; + FReg64ZMMIndex : TStringList; + FRegKREG : TStringList; Fx64: boolean; + FAVX512: boolean; + FSAE: boolean; - procedure MemRegBaseIndexCombi(const aPrefix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); - procedure VectorMemRegBaseIndexCombi(const aPrefix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); + procedure MemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); + procedure VectorMemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); function InternalCalcTestData(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList; + function InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList; public constructor Create; destructor Destroy; override; class procedure CalcTestData(aX64: boolean; const aInst, aOp1, aOp2, aOp3, aOp4: String; aSL: TStringList); + class procedure CalcTestDataMREF(aX64: boolean; const aInst, aOp1, aOp2, aOp3, aOp4: String; aSL: TStringList); + + class procedure CalcTestInstFile; + class procedure ListMemRefState; property x64: boolean read Fx64; end; implementation -uses SysUtils, Dialogs; +uses SysUtils, Dialogs, typinfo; + +type + TAsmOp={$i ../../../compiler/x86_64/x8664op.inc} + TAttSuffix = (AttSufNONE,AttSufINT,AttSufFPU,AttSufFPUint,AttSufINTdual,AttSufMM,AttSufMMX,AttSufMMS); + + TMemRefSizeInfo = (msiUnknown, msiUnsupported, msiNoSize, msiNoMemRef, + msiMultiple, msiMultipleMinSize8, msiMultipleMinSize16, msiMultipleMinSize32, + msiMultipleMinSize64, msiMultipleMinSize128, msiMultipleminSize256, msiMultipleMinSize512, + msiMemRegSize, msiMemRegx16y32, msiMemRegx16y32z64, msiMemRegx32y64, msiMemRegx32y64z128, msiMemRegx64y128, msiMemRegx64y128z256, + msiMemRegx64y256, msiMemRegx64y256z512, + msiMem8, msiMem16, msiMem32, msiBMem32, msiMem64, msiBMem64, msiMem128, msiMem256, msiMem512, + msiXMem32, msiXMem64, msiYMem32, msiYMem64, msiZMem32, msiZMem64, + msiVMemMultiple, msiVMemRegSize, + msiMemRegConst128,msiMemRegConst256,msiMemRegConst512); + + TMemRefSizeInfoBCST = (msbUnknown, msbBCST32, msbBCST64, msbMultiple); + TMemRefSizeInfoBCSTType = (btUnknown, bt1to2, bt1to4, bt1to8, bt1to16); + + TEVEXTupleState = (etsUnknown, etsIsTuple, etsNotTuple); + TConstSizeInfo = (csiUnknown, csiMultiple, csiNoSize, csiMem8, csiMem16, csiMem32, csiMem64); + + + TInsTabMemRefSizeInfoRec = record + MemRefSize : TMemRefSizeInfo; + MemRefSizeBCST : TMemRefSizeInfoBCST; + BCSTXMMMultiplicator : byte; + ExistsSSEAVX : boolean; + ConstSize : TConstSizeInfo; + BCSTTypes : Set of TMemRefSizeInfoBCSTType; + RegXMMSizeMask : int64; + RegYMMSizeMask : int64; + RegZMMSizeMask : int64; + end; + + + TInsTabMemRefSizeInfoCache=array[TasmOp] of TInsTabMemRefSizeInfoRec; + PInsTabMemRefSizeInfoCache=^TInsTabMemRefSizeInfoCache; + + TInsTabCache=array[TasmOp] of longint; + PInsTabCache=^TInsTabCache; + + +const + instabentries = {$i ../../../compiler/x86_64/x8664nop.inc} + gas_needsuffix:array[tasmop] of TAttSuffix={$i ../../../compiler/x86_64/x8664ats.inc} + + MemRefMultiples: set of TMemRefSizeInfo = [msiMultiple, msiMultipleMinSize8, + msiMultipleMinSize16, msiMultipleMinSize32, + msiMultipleMinSize64, msiMultipleMinSize128, + msiMultipleMinSize256, msiMultipleMinSize512, + msiVMemMultiple]; + + MemRefSizeInfoVMems: Set of TMemRefSizeInfo = [msiXMem32, msiXMem64, msiYMem32, msiYMem64, + msiZMem32, msiZMem64, + msiVMemMultiple, msiVMemRegSize]; + + +var + InsTabCache : PInsTabCache; + InsTabMemRefSizeInfoCache: PInsTabMemRefSizeInfoCache; + +type + + + op2strtable=array[tasmop] of string[16]; + + {Instruction flags } + tinsflag = ( + { please keep these in order and in sync with IF_SMASK } + IF_SM, { size match first two operands } + IF_SM2, + IF_SB, { unsized operands can't be non-byte } + IF_SW, { unsized operands can't be non-word } + IF_SD, { unsized operands can't be nondword } + + { unsized argument spec } + { please keep these in order and in sync with IF_ARMASK } + IF_AR0, { SB, SW, SD applies to argument 0 } + IF_AR1, { SB, SW, SD applies to argument 1 } + IF_AR2, { SB, SW, SD applies to argument 2 } + + IF_PRIV, { it's a privileged instruction } + IF_SMM, { it's only valid in SMM } + IF_PROT, { it's protected mode only } + IF_NOX86_64, { removed instruction in x86_64 } + IF_UNDOC, { it's an undocumented instruction } + IF_FPU, { it's an FPU instruction } + IF_MMX, { it's an MMX instruction } + { it's a 3DNow! instruction } + IF_3DNOW, + { it's a SSE (KNI, MMX2) instruction } + IF_SSE, + { SSE2 instructions } + IF_SSE2, + { SSE3 instructions } + IF_SSE3, + { SSE64 instructions } + IF_SSE64, + { SVM instructions } + IF_SVM, + { SSE4 instructions } + IF_SSE4, + IF_SSSE3, + IF_SSE41, + IF_SSE42, + IF_MOVBE, + IF_CLMUL, + IF_AVX, + IF_AVX2, + IF_AVX512, + IF_BMI1, + IF_BMI2, + { Intel ADX (Multi-Precision Add-Carry Instruction Extensions) } + IF_ADX, + IF_16BITONLY, + IF_FMA, + IF_FMA4, + IF_TSX, + IF_RAND, + IF_XSAVE, + IF_PREFETCHWT1, + + { mask for processor level } + { please keep these in order and in sync with IF_PLEVEL } + IF_8086, { 8086 instruction } + IF_186, { 186+ instruction } + IF_286, { 286+ instruction } + IF_386, { 386+ instruction } + IF_486, { 486+ instruction } + IF_PENT, { Pentium instruction } + IF_P6, { P6 instruction } + IF_KATMAI, { Katmai instructions } + IF_WILLAMETTE, { Willamette instructions } + IF_PRESCOTT, { Prescott instructions } + IF_X86_64, + IF_SANDYBRIDGE, { Sandybridge-specific instruction } + IF_NEC, { NEC V20/V30 instruction } + + { the following are not strictly part of the processor level, because + they are never used standalone, but always in combination with a + separate processor level flag. Therefore, they use bits outside of + IF_PLEVEL, otherwise they would mess up the processor level they're + used in combination with. + The following combinations are currently used: + [IF_AMD, IF_P6], + [IF_CYRIX, IF_486], + [IF_CYRIX, IF_PENT], + [IF_CYRIX, IF_P6] } + IF_CYRIX, { Cyrix, Centaur or VIA-specific instruction } + IF_AMD, { AMD-specific instruction } + + { added flags } + IF_PRE, { it's a prefix instruction } + IF_PASS2, { if the instruction can change in a second pass } + IF_IMM4, { immediate operand is a nibble (must be in range [0..15]) } + IF_IMM3, { immediate operand is a triad (must be in range [0..7]) } + + IF_BCST2, + IF_BCST4, + IF_BCST8, + IF_BCST16, + IF_T2, { disp8 - tuple - 2 } + IF_T4, { disp8 - tuple - 4 } + IF_T8, { disp8 - tuple - 8 } + IF_T1S, { disp8 - tuple - 1 scalar } + IF_T1S8, + IF_T1S16, + IF_T1F32, + IF_T1F64, + IF_TMDDUP, + IF_TFV, { disp8 - tuple - full vector } + IF_TFVM, { disp8 - tuple - full vector memory } + IF_TQVM, + IF_TMEM128, + IF_THV, + IF_THVM, + IF_TOVM, + + IF_SCL32, + IF_SCL64 + + + ); + tinsflags=set of tinsflag; + + + tinsentry=packed record + opcode : tasmop; + ops : byte; + //optypes : array[0..max_operands-1] of longint; + optypes : array[0..3] of int64; //TG + code : array[0..11] of char; + flags : tinsflags; + end; + pinsentry=^tinsentry; + +const + OT_NONE = $00000000; + + { Bits 0..7: sizes } + OT_BITS8 = $00000001; + OT_BITS16 = $00000002; + OT_BITS32 = $00000004; + OT_BITS64 = $00000008; { x86_64 and FPU } + //OT_BITS128 = $10000000; { 16 byte SSE } + //OT_BITS256 = $20000000; { 32 byte AVX } + //OT_BITS512 = $40000000; { 64 byte AVX512 } + OT_BITS128 = $20000000; { 16 byte SSE } + OT_BITS256 = $40000000; { 32 byte AVX } + OT_BITS512 = $80000000; { 64 byte AVX512 } + + OT_VECTORMASK = $1000000000; { OPTIONAL VECTORMASK AVX512} + OT_VECTORZERO = $2000000000; { OPTIONAL ZERO-FLAG AVX512} + OT_VECTORBCST = $4000000000; { BROADCAST-MEM-FLAG AVX512} + OT_VECTORSAE = $8000000000; { OPTIONAL SAE-FLAG AVX512} + OT_VECTORER = $10000000000; { OPTIONAL ER-FLAG-FLAG AVX512} + + + OT_BITSB32 = OT_BITS32 or OT_VECTORBCST; + OT_BITSB64 = OT_BITS64 or OT_VECTORBCST; + + + OT_VECTOR_EXT_MASK = OT_VECTORMASK or OT_VECTORZERO or OT_VECTORBCST; + + OT_BITS80 = $00000010; { FPU only } + OT_FAR = $00000020; { this means 16:16 or 16:32, like in CALL/JMP } + OT_NEAR = $00000040; + OT_SHORT = $00000080; + + { TODO: FAR/NEAR/SHORT are sizes too, they should be included into size mask, + but this requires adjusting the opcode table } + //OT_SIZE_MASK = $3000001F; { all the size attributes } + OT_SIZE_MASK = $E000001F; { all the size attributes } + OT_NON_SIZE = int64(not int64(OT_SIZE_MASK)); + + { Bits 8..11: modifiers } + OT_SIGNED = $00000100; { the operand need to be signed -128-127 } + OT_TO = $00000200; { reverse effect in FADD, FSUB &c } + OT_COLON = $00000400; { operand is followed by a colon } + OT_MODIFIER_MASK = $00000F00; + + { Bits 12..15: type of operand } + OT_REGISTER = $00001000; + OT_IMMEDIATE = $00002000; + OT_MEMORY = $0000C000; { always includes 'OT_REGMEM' bit as well } + OT_REGMEM = $00008000; { for r/m, ie EA, operands } + OT_TYPE_MASK = OT_REGISTER or OT_IMMEDIATE or OT_MEMORY or OT_REGMEM; + + OT_REGNORM = OT_REGISTER or OT_REGMEM; { 'normal' reg, qualifies as EA } + + { Bits 20..22, 24..26: register classes + otf_* consts are not used alone, only to build other constants. } + otf_reg_cdt = $00100000; + otf_reg_gpr = $00200000; + otf_reg_sreg = $00400000; + otf_reg_k = $00800000; + otf_reg_fpu = $01000000; + otf_reg_mmx = $02000000; + otf_reg_xmm = $04000000; + otf_reg_ymm = $08000000; + otf_reg_zmm = $10000000; + + + otf_reg_extra_mask = $0F000000; + { Bits 16..19: subclasses, meaning depends on classes field } + otf_sub0 = $00010000; + otf_sub1 = $00020000; + otf_sub2 = $00040000; + otf_sub3 = $00080000; + OT_REG_SMASK = otf_sub0 or otf_sub1 or otf_sub2 or otf_sub3; + + //OT_REG_EXTRA_MASK = $0F000000; + OT_REG_EXTRA_MASK = $1F000000; + + OT_REG_TYPMASK = otf_reg_cdt or otf_reg_gpr or otf_reg_sreg or otf_reg_k or otf_reg_extra_mask; + { register class 0: CRx, DRx and TRx } + OT_REG_CDT = OT_REGISTER or otf_reg_cdt or OT_BITS64; + OT_REG_CREG = OT_REG_CDT or otf_sub0; { CRn } + OT_REG_DREG = OT_REG_CDT or otf_sub1; { DRn } + OT_REG_TREG = OT_REG_CDT or otf_sub2; { TRn } + OT_REG_CR4 = OT_REG_CDT or otf_sub3; { CR4 (Pentium only) } + + { register class 1: general-purpose registers } + OT_REG_GPR = OT_REGNORM or otf_reg_gpr; + OT_RM_GPR = OT_REGMEM or otf_reg_gpr; + OT_REG8 = OT_REG_GPR or OT_BITS8; { 8-bit GPR } + OT_REG16 = OT_REG_GPR or OT_BITS16; + OT_REG32 = OT_REG_GPR or OT_BITS32; + OT_REG64 = OT_REG_GPR or OT_BITS64; + + { GPR subclass 0: accumulator: AL, AX, EAX or RAX } + OT_REG_ACCUM = OT_REG_GPR or otf_sub0; + OT_REG_AL = OT_REG_ACCUM or OT_BITS8; + OT_REG_AX = OT_REG_ACCUM or OT_BITS16; + OT_REG_EAX = OT_REG_ACCUM or OT_BITS32; + OT_REG_RAX = OT_REG_ACCUM or OT_BITS64; + { GPR subclass 1: counter: CL, CX, ECX or RCX } + OT_REG_COUNT = OT_REG_GPR or otf_sub1; + OT_REG_CL = OT_REG_COUNT or OT_BITS8; + OT_REG_CX = OT_REG_COUNT or OT_BITS16; + OT_REG_ECX = OT_REG_COUNT or OT_BITS32; + OT_REG_RCX = OT_REG_COUNT or OT_BITS64; + { GPR subclass 2: data register: DL, DX, EDX or RDX } + OT_REG_DX = OT_REG_GPR or otf_sub2 or OT_BITS16; + OT_REG_EDX = OT_REG_GPR or otf_sub2 or OT_BITS32; + + { register class 2: Segment registers } + OT_REG_SREG = OT_REGISTER or otf_reg_sreg or OT_BITS16; + OT_REG_CS = OT_REG_SREG or otf_sub0; { CS } + OT_REG_DESS = OT_REG_SREG or otf_sub1; { DS, ES, SS (non-CS 86 registers) } + OT_REG_FSGS = OT_REG_SREG or otf_sub2; { FS, GS (386 extended registers) } + + { register class 3: FPU registers } + OT_FPUREG = OT_REGISTER or otf_reg_fpu; + OT_FPU0 = OT_FPUREG or otf_sub0; { FPU stack register zero } + + { register class 4: MMX (both reg and r/m) } + OT_MMXREG = OT_REGNORM or otf_reg_mmx; + OT_MMXRM = OT_REGMEM or otf_reg_mmx; + + { register class 5: XMM (both reg and r/m) } + OT_XMMREG = OT_REGNORM or otf_reg_xmm; + OT_XMMRM = OT_REGMEM or otf_reg_xmm; + OT_XMEM32 = OT_REGNORM or otf_reg_xmm or otf_reg_gpr or OT_BITS32; + OT_XMEM32_M = OT_XMEM32 or OT_VECTORMASK; + OT_XMEM64 = OT_REGNORM or otf_reg_xmm or otf_reg_gpr or OT_BITS64; + OT_XMEM64_M = OT_XMEM64 or OT_VECTORMASK; + + OT_XMMREG_M = OT_XMMREG or OT_VECTORMASK; + OT_XMMREG_MZ = OT_XMMREG or OT_VECTORMASK or OT_VECTORZERO; + OT_XMMRM_MZ = OT_XMMRM or OT_VECTORMASK or OT_VECTORZERO; + OT_XMMREG_SAE = OT_XMMREG or OT_VECTORSAE; + OT_XMMRM_SAE = OT_XMMRM or OT_VECTORSAE; + OT_XMMREG_ER = OT_XMMREG or OT_VECTORER; + OT_XMMRM_ER = OT_XMMRM or OT_VECTORER; + + + + { register class 5: YMM (both reg and r/m) } + OT_YMMREG = OT_REGNORM or otf_reg_ymm; + OT_YMMRM = OT_REGMEM or otf_reg_ymm; + OT_YMEM32 = OT_REGNORM or otf_reg_ymm or otf_reg_gpr or OT_BITS32; + OT_YMEM32_M = OT_YMEM32 or OT_VECTORMASK; + OT_YMEM64 = OT_REGNORM or otf_reg_ymm or otf_reg_gpr or OT_BITS64; + OT_YMEM64_M = OT_YMEM64 or OT_VECTORMASK; + + OT_YMMREG_M = OT_YMMREG or OT_VECTORMASK; + OT_YMMREG_MZ = OT_YMMREG or OT_VECTORMASK or OT_VECTORZERO; + OT_YMMRM_MZ = OT_YMMRM or OT_VECTORMASK or OT_VECTORZERO; + OT_YMMREG_SAE = OT_YMMREG or OT_VECTORSAE; + OT_YMMRM_SAE = OT_YMMRM or OT_VECTORSAE; + OT_YMMREG_ER = OT_YMMREG or OT_VECTORER; + OT_YMMRM_ER = OT_YMMRM or OT_VECTORER; + + + { register class 5: ZMM (both reg and r/m) } + OT_ZMMREG = OT_REGNORM or otf_reg_zmm; + OT_ZMMRM = OT_REGMEM or otf_reg_zmm; + OT_ZMEM32 = OT_REGNORM or otf_reg_zmm or otf_reg_gpr or OT_BITS32; + OT_ZMEM32_M = OT_ZMEM32 or OT_VECTORMASK; + OT_ZMEM64 = OT_REGNORM or otf_reg_zmm or otf_reg_gpr or OT_BITS64; + OT_ZMEM64_M = OT_ZMEM64 or OT_VECTORMASK; + + OT_ZMMREG_M = OT_ZMMREG or OT_VECTORMASK; + OT_ZMMREG_MZ = OT_ZMMREG or OT_VECTORMASK or OT_VECTORZERO; + OT_ZMMRM_MZ = OT_ZMMRM or OT_VECTORMASK or OT_VECTORZERO; + OT_ZMMREG_SAE = OT_ZMMREG or OT_VECTORSAE; + OT_ZMMRM_SAE = OT_ZMMRM or OT_VECTORSAE; + OT_ZMMREG_ER = OT_ZMMREG or OT_VECTORER; + OT_ZMMRM_ER = OT_ZMMRM or OT_VECTORER; + + + OT_KREG = OT_REGNORM or otf_reg_k; + OT_KREG_M = OT_KREG or OT_VECTORMASK; + + { Vector-Memory operands } + OT_VMEM_ANY = OT_XMEM32 or OT_XMEM64 or OT_YMEM32 or OT_YMEM64 or OT_ZMEM32 or OT_ZMEM64; + + { Memory operands } + OT_MEM8 = OT_MEMORY or OT_BITS8; + OT_MEM16 = OT_MEMORY or OT_BITS16; + OT_MEM16_M = OT_MEM16 or OT_VECTORMASK; + OT_MEM32 = OT_MEMORY or OT_BITS32; + OT_MEM32_M = OT_MEMORY or OT_BITS32 or OT_VECTORMASK; + OT_BMEM32 = OT_MEMORY or OT_BITS32 or OT_VECTORBCST; + OT_BMEM32_SAE= OT_MEMORY or OT_BITS32 or OT_VECTORBCST or OT_VECTORSAE; + OT_MEM64 = OT_MEMORY or OT_BITS64; + OT_MEM64_M = OT_MEMORY or OT_BITS64 or OT_VECTORMASK; + OT_BMEM64 = OT_MEMORY or OT_BITS64 or OT_VECTORBCST; + OT_BMEM64_SAE= OT_MEMORY or OT_BITS64 or OT_VECTORBCST or OT_VECTORSAE; + OT_MEM128 = OT_MEMORY or OT_BITS128; + OT_MEM128_M = OT_MEMORY or OT_BITS128 or OT_VECTORMASK; + OT_MEM256 = OT_MEMORY or OT_BITS256; + OT_MEM256_M = OT_MEMORY or OT_BITS256 or OT_VECTORMASK; + OT_MEM512 = OT_MEMORY or OT_BITS512; + OT_MEM512_M = OT_MEMORY or OT_BITS512 or OT_VECTORMASK; + OT_MEM80 = OT_MEMORY or OT_BITS80; + + + + + OT_MEM_OFFS = OT_MEMORY or otf_sub0; { special type of EA } + { simple [address] offset } + + { Matches any type of r/m operand } + OT_MEMORY_ANY = OT_MEMORY or OT_RM_GPR or OT_XMMRM or OT_MMXRM or OT_YMMRM or OT_ZMMRM or OT_REG_EXTRA_MASK; + + { Immediate operands } + OT_IMM8 = OT_IMMEDIATE or OT_BITS8; + OT_IMM16 = OT_IMMEDIATE or OT_BITS16; + OT_IMM32 = OT_IMMEDIATE or OT_BITS32; + OT_IMM64 = OT_IMMEDIATE or OT_BITS64; + + OT_ONENESS = otf_sub0; { special type of immediate operand } + OT_UNITY = OT_IMMEDIATE or OT_ONENESS; { for shift/rotate instructions } + + std_op2str:op2strtable={$i ../../../compiler/x86_64/x8664int.inc} + + InsTab:array[0..instabentries-1] of TInsEntry={$i ../../../compiler/x86_64/x8664tab.inc} + + procedure BuildInsTabCache; + var + i : longint; + begin + new(instabcache); + FillChar(instabcache^,sizeof(tinstabcache),$ff); + i:=0; + while (i<InsTabEntries) do + begin + if InsTabCache^[InsTab[i].OPcode]=-1 then + InsTabCache^[InsTab[i].OPcode]:=i; + inc(i); + end; + end; + + procedure BuildInsTabMemRefSizeInfoCache; + var + AsmOp: TasmOp; + i,j: longint; + insentry : PInsEntry; + + MRefInfo: TMemRefSizeInfo; + SConstInfo: TConstSizeInfo; + actRegSize: int64; + actMemSize: int64; + actConstSize: int64; + actRegCount: integer; + actMemCount: integer; + actConstCount: integer; + actRegTypes : int64; + actRegMemTypes: int64; + NewRegSize: int64; + + actVMemCount : integer; + actVMemTypes : int64; + + RegMMXSizeMask: int64; + RegXMMSizeMask: int64; + RegYMMSizeMask: int64; + RegZMMSizeMask: int64; + + RegMMXConstSizeMask: int64; + RegXMMConstSizeMask: int64; + RegYMMConstSizeMask: int64; + RegZMMConstSizeMask: int64; + + RegBCSTSizeMask: int64; + RegBCSTXMMSizeMask: int64; + RegBCSTYMMSizeMask: int64; + RegBCSTZMMSizeMask: int64; + ExistsMemRef : boolean; + + bitcount : integer; + ExistsCode336 : boolean; + ExistsCode337 : boolean; + ExistsSSEAVXReg : boolean; + + function bitcnt(aValue: int64): integer; + var + i: integer; + begin + result := 0; + + for i := 0 to 63 do + begin + if (aValue mod 2) = 1 then + begin + inc(result); + end; + + aValue := aValue shr 1; + end; + end; + + begin + new(InsTabMemRefSizeInfoCache); + FillChar(InsTabMemRefSizeInfoCache^,sizeof(TInsTabMemRefSizeInfoCache),0); + + for AsmOp := low(TAsmOp) to high(TAsmOp) do + begin + i := InsTabCache^[AsmOp]; + + if i >= 0 then + begin + + + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnknown; + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSizeBCST := msbUnknown; + InsTabMemRefSizeInfoCache^[AsmOp].BCSTXMMMultiplicator := 0; + InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnknown; + InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := false; + InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := []; + + insentry:=@instab[i]; + + RegMMXSizeMask := 0; + RegXMMSizeMask := 0; + RegYMMSizeMask := 0; + RegZMMSizeMask := 0; + + RegMMXConstSizeMask := 0; + RegXMMConstSizeMask := 0; + RegYMMConstSizeMask := 0; + RegZMMConstSizeMask := 0; + + RegBCSTSizeMask:= 0; + RegBCSTXMMSizeMask := 0; + RegBCSTYMMSizeMask := 0; + RegBCSTZMMSizeMask := 0; + ExistsMemRef := false; + + while (insentry^.opcode=AsmOp) do + begin + MRefInfo := msiUnknown; + + actRegSize := 0; + actRegCount := 0; + actRegTypes := 0; + NewRegSize := 0; + + actMemSize := 0; + actMemCount := 0; + actRegMemTypes := 0; + + actVMemCount := 0; + actVMemTypes := 0; + + actConstSize := 0; + actConstCount := 0; + + ExistsCode336 := false; // indicate fixed operand size 32 bit + ExistsCode337 := false; // indicate fixed operand size 64 bit + ExistsSSEAVXReg := false; + + // parse insentry^.code for &336 and &337 + // &336 (octal) = 222 (decimal) == fixed operand size 32 bit + // &337 (octal) = 223 (decimal) == fixed operand size 64 bit + for i := low(insentry^.code) to high(insentry^.code) do + begin + case insentry^.code[i] of + #222: ExistsCode336 := true; + #223: ExistsCode337 := true; + #0,#1,#2,#3: break; + end; + end; + + for i := 0 to insentry^.ops -1 do + begin + if (insentry^.optypes[i] and OT_REGISTER) = OT_REGISTER then + case insentry^.optypes[i] and (OT_XMMREG or OT_YMMREG or OT_ZMMREG or OT_KREG or OT_REG_EXTRA_MASK) of + OT_XMMREG, + OT_YMMREG, + OT_ZMMREG: ExistsSSEAVXReg := true; + else; + end; + end; + + + for j := 0 to insentry^.ops -1 do + begin + if ((insentry^.optypes[j] and OT_XMEM32) = OT_XMEM32) OR + ((insentry^.optypes[j] and OT_XMEM64) = OT_XMEM64) OR + ((insentry^.optypes[j] and OT_YMEM32) = OT_YMEM32) OR + ((insentry^.optypes[j] and OT_YMEM64) = OT_YMEM64) OR + ((insentry^.optypes[j] and OT_ZMEM32) = OT_ZMEM32) OR + ((insentry^.optypes[j] and OT_ZMEM64) = OT_ZMEM64) then + begin + inc(actVMemCount); + + case insentry^.optypes[j] and (OT_XMEM32 OR OT_XMEM64 OR OT_YMEM32 OR OT_YMEM64 OR OT_ZMEM32 OR OT_ZMEM64) of + OT_XMEM32: actVMemTypes := actVMemTypes or OT_XMEM32; + OT_XMEM64: actVMemTypes := actVMemTypes or OT_XMEM64; + OT_YMEM32: actVMemTypes := actVMemTypes or OT_YMEM32; + OT_YMEM64: actVMemTypes := actVMemTypes or OT_YMEM64; + OT_ZMEM32: actVMemTypes := actVMemTypes or OT_ZMEM32; + OT_ZMEM64: actVMemTypes := actVMemTypes or OT_ZMEM64; + else; + end; + end + else if (insentry^.optypes[j] and OT_REGISTER) = OT_REGISTER then + begin + inc(actRegCount); + + NewRegSize := (insentry^.optypes[j] and OT_SIZE_MASK); + if NewRegSize = 0 then + begin + case insentry^.optypes[j] and (OT_MMXREG or OT_XMMREG or OT_YMMREG or OT_ZMMREG or OT_KREG or OT_REG_EXTRA_MASK) of + OT_MMXREG: begin + NewRegSize := OT_BITS64; + end; + OT_XMMREG: begin + NewRegSize := OT_BITS128; + InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true; + end; + OT_YMMREG: begin + NewRegSize := OT_BITS256; + InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true; + end; + OT_ZMMREG: begin + NewRegSize := OT_BITS512; + InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true; + end; + OT_KREG: begin + InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true; + end; + + else NewRegSize := not(0); + end; + end; + + actRegSize := actRegSize or NewRegSize; + actRegTypes := actRegTypes or (insentry^.optypes[j] and (OT_MMXREG or OT_XMMREG or OT_YMMREG or OT_ZMMREG or OT_KREG or OT_REG_EXTRA_MASK)); + end + else if ((insentry^.optypes[j] and OT_MEMORY) <> 0) then + begin + inc(actMemCount); + + + if ExistsSSEAVXReg and ExistsCode336 then + actMemSize := actMemSize or OT_BITS32 + else if ExistsSSEAVXReg and ExistsCode337 then + actMemSize := actMemSize or OT_BITS64 + else + actMemSize:=actMemSize or (insentry^.optypes[j] and (OT_SIZE_MASK OR OT_VECTORBCST)); + + if (insentry^.optypes[j] and OT_REGMEM) = OT_REGMEM then + begin + actRegMemTypes := actRegMemTypes or insentry^.optypes[j]; + end; + end + else if ((insentry^.optypes[j] and OT_IMMEDIATE) = OT_IMMEDIATE) then + begin + inc(actConstCount); + + actConstSize := actConstSize or (insentry^.optypes[j] and OT_SIZE_MASK); + end + end; + + if actConstCount > 0 then + begin + case actConstSize of + 0: SConstInfo := csiNoSize; + OT_BITS8: SConstInfo := csiMem8; + OT_BITS16: SConstInfo := csiMem16; + OT_BITS32: SConstInfo := csiMem32; + OT_BITS64: SConstInfo := csiMem64; + else SConstInfo := csiMultiple; + end; + + if InsTabMemRefSizeInfoCache^[AsmOp].ConstSize = csiUnknown then + begin + InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := SConstInfo; + end + else if InsTabMemRefSizeInfoCache^[AsmOp].ConstSize <> SConstInfo then + begin + InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiMultiple; + end; + end; + + if actVMemCount > 0 then + begin + if actVMemCount = 1 then + begin + if actVMemTypes > 0 then + begin + case actVMemTypes of + OT_XMEM32: MRefInfo := msiXMem32; + OT_XMEM64: MRefInfo := msiXMem64; + OT_YMEM32: MRefInfo := msiYMem32; + OT_YMEM64: MRefInfo := msiYMem64; + OT_ZMEM32: MRefInfo := msiZMem32; + OT_ZMEM64: MRefInfo := msiZMem64; + else; + end; + + case actRegTypes of + OT_XMMREG: case MRefInfo of + msiXMem32, + msiXMem64: RegXMMSizeMask := RegXMMSizeMask or OT_BITS128; + msiYMem32, + msiYMem64: RegXMMSizeMask := RegXMMSizeMask or OT_BITS256; + msiZMem32, + msiZMem64: RegXMMSizeMask := RegXMMSizeMask or OT_BITS512; + else; + end; + OT_YMMREG: case MRefInfo of + msiXMem32, + msiXMem64: RegYMMSizeMask := RegYMMSizeMask or OT_BITS128; + msiYMem32, + msiYMem64: RegYMMSizeMask := RegYMMSizeMask or OT_BITS256; + msiZMem32, + msiZMem64: RegYMMSizeMask := RegYMMSizeMask or OT_BITS512; + else; + end; + OT_ZMMREG: case MRefInfo of + msiXMem32, + msiXMem64: RegZMMSizeMask := RegZMMSizeMask or OT_BITS128; + msiYMem32, + msiYMem64: RegZMMSizeMask := RegZMMSizeMask or OT_BITS256; + msiZMem32, + msiZMem64: RegZMMSizeMask := RegZMMSizeMask or OT_BITS512; + else; + end; + + //else InternalError(777209); + end; + + + if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo; + end + else if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize <> MRefInfo then + begin + if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize in [msiXMem32, msiXMem64, msiYMem32, msiYMem64, msiZMem32, msiZMem64] then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiVMemMultiple; + end + else if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize <> msiVMemMultiple then; + end; + + end; + end + else; + end + else + begin + if (actMemCount=2) and ((AsmOp=A_MOVS) or (AsmOp=A_CMPS)) then actMemCount:=1; + + ExistsMemRef := ExistsMemRef or (actMemCount > 0); + + case actMemCount of + 0: ; // nothing todo + 1: begin + MRefInfo := msiUnknown; + + if not(ExistsCode336 or ExistsCode337) then + case actRegMemTypes and (OT_MMXRM or OT_XMMRM or OT_YMMRM or OT_ZMMRM or OT_REG_EXTRA_MASK) of + OT_MMXRM: actMemSize := actMemSize or OT_BITS64; + OT_XMMRM: actMemSize := actMemSize or OT_BITS128; + OT_YMMRM: actMemSize := actMemSize or OT_BITS256; + OT_ZMMRM: actMemSize := actMemSize or OT_BITS512; + end; + + case actMemSize of + 0: MRefInfo := msiNoSize; + OT_BITS8: MRefInfo := msiMem8; + OT_BITS16: MRefInfo := msiMem16; + OT_BITS32: MRefInfo := msiMem32; + OT_BITSB32: MRefInfo := msiBMem32; + OT_BITS64: MRefInfo := msiMem64; + OT_BITSB64: MRefInfo := msiBMem64; + OT_BITS128: MRefInfo := msiMem128; + OT_BITS256: MRefInfo := msiMem256; + OT_BITS512: MRefInfo := msiMem512; + OT_BITS80, + OT_FAR, + OT_NEAR, + OT_SHORT: ; // ignore + else + begin + bitcount := bitcnt(actMemSize); + + if bitcount > 1 then MRefInfo := msiMultiple + else; + end; + end; + + if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo; + end + else + begin + // ignore broadcast-memory + if not(MRefInfo in [msiBMem32, msiBMem64]) then + begin + if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize <> MRefInfo then + begin + with InsTabMemRefSizeInfoCache^[AsmOp] do + begin + if ((MemRefSize in [msiMem8, msiMULTIPLEMinSize8]) OR (MRefInfo = msiMem8)) then MemRefSize := msiMultipleMinSize8 + else if ((MemRefSize in [ msiMem16, msiMULTIPLEMinSize16]) OR (MRefInfo = msiMem16)) then MemRefSize := msiMultipleMinSize16 + else if ((MemRefSize in [ msiMem32, msiMULTIPLEMinSize32]) OR (MRefInfo = msiMem32)) then MemRefSize := msiMultipleMinSize32 + else if ((MemRefSize in [ msiMem64, msiMULTIPLEMinSize64]) OR (MRefInfo = msiMem64)) then MemRefSize := msiMultipleMinSize64 + else if ((MemRefSize in [msiMem128, msiMULTIPLEMinSize128]) OR (MRefInfo = msiMem128)) then MemRefSize := msiMultipleMinSize128 + else if ((MemRefSize in [msiMem256, msiMULTIPLEMinSize256]) OR (MRefInfo = msiMem256)) then MemRefSize := msiMultipleMinSize256 + else if ((MemRefSize in [msiMem512, msiMULTIPLEMinSize512]) OR (MRefInfo = msiMem512)) then MemRefSize := msiMultipleMinSize512 + else MemRefSize := msiMultiple; + end; + end; + end; + end; + + //if not(MRefInfo in [msiBMem32, msiBMem64]) and (actRegCount > 0) then + if actRegCount > 0 then + begin + if MRefInfo in [msiBMem32, msiBMem64] then + begin + if IF_BCST2 in insentry^.flags then InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes + [bt1to2]; + if IF_BCST4 in insentry^.flags then InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes + [bt1to4]; + if IF_BCST8 in insentry^.flags then InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes + [bt1to8]; + if IF_BCST16 in insentry^.flags then InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes + [bt1to16]; + + //InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes + + // BROADCAST - OPERAND + RegBCSTSizeMask := RegBCSTSizeMask or actMemSize; + + case actRegTypes and (OT_XMMREG or OT_YMMREG or OT_ZMMREG or OT_REG_EXTRA_MASK) of + OT_XMMREG: RegBCSTXMMSizeMask := RegBCSTXMMSizeMask or actMemSize; + OT_YMMREG: RegBCSTYMMSizeMask := RegBCSTYMMSizeMask or actMemSize; + OT_ZMMREG: RegBCSTZMMSizeMask := RegBCSTZMMSizeMask or actMemSize; + else begin + + RegBCSTXMMSizeMask := not(0); + RegBCSTYMMSizeMask := not(0); + RegBCSTZMMSizeMask := not(0); + end; + end; + end + else + case actRegTypes and (OT_MMXREG or OT_XMMREG or OT_YMMREG or OT_ZMMREG or OT_REG_EXTRA_MASK) of + OT_MMXREG: if actConstCount > 0 then RegMMXConstSizeMask := RegMMXConstSizeMask or actMemSize + else RegMMXSizeMask := RegMMXSizeMask or actMemSize; + OT_XMMREG: if actConstCount > 0 then RegXMMConstSizeMask := RegXMMConstSizeMask or actMemSize + else RegXMMSizeMask := RegXMMSizeMask or actMemSize; + OT_YMMREG: if actConstCount > 0 then RegYMMConstSizeMask := RegYMMConstSizeMask or actMemSize + else RegYMMSizeMask := RegYMMSizeMask or actMemSize; + OT_ZMMREG: if actConstCount > 0 then RegZMMConstSizeMask := RegZMMConstSizeMask or actMemSize + else RegZMMSizeMask := RegZMMSizeMask or actMemSize; + else begin + RegMMXSizeMask := not(0); + RegXMMSizeMask := not(0); + RegYMMSizeMask := not(0); + RegZMMSizeMask := not(0); + + RegMMXConstSizeMask := not(0); + RegXMMConstSizeMask := not(0); + RegYMMConstSizeMask := not(0); + RegZMMConstSizeMask := not(0); + end; + end; + end + else + + + end + else; + end; + end; + + inc(insentry); + end; + + if InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX then + begin + case RegBCSTSizeMask of + 0: ; // ignore; + OT_BITSB32: begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSizeBCST := msbBCST32; + InsTabMemRefSizeInfoCache^[AsmOp].BCSTXMMMultiplicator := 4; + end; + OT_BITSB64: begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSizeBCST := msbBCST64; + InsTabMemRefSizeInfoCache^[AsmOp].BCSTXMMMultiplicator := 2; + end; + else begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSizeBCST := msbMultiple; + end; + end; + end; + + + if (InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize in MemRefMultiples) and + (InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX)then + begin + if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiVMemMultiple then + begin + if ((RegXMMSizeMask = OT_BITS128) or (RegXMMSizeMask = 0)) and + ((RegYMMSizeMask = OT_BITS256) or (RegYMMSizeMask = 0)) and + ((RegZMMSizeMask = OT_BITS512) or (RegZMMSizeMask = 0)) and + ((RegXMMSizeMask or RegYMMSizeMask or RegZMMSizeMask) <> 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiVMemRegSize; + end; + end + else if (RegMMXSizeMask or RegMMXConstSizeMask) <> 0 then + begin + if ((RegMMXSizeMask or RegMMXConstSizeMask) = OT_BITS64) and + ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS128) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = 0) and + ((RegZMMSizeMask or RegZMMConstSizeMask) = 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegSize; + end; + end + else if (((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS128) or ((RegXMMSizeMask or RegXMMConstSizeMask) = 0)) and + (((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS256) or ((RegYMMSizeMask or RegYMMConstSizeMask) = 0)) and + (((RegZMMSizeMask or RegZMMConstSizeMask) = OT_BITS512) or ((RegZMMSizeMask or RegZMMConstSizeMask) = 0)) and + (((RegXMMSizeMask or RegXMMConstSizeMask or + RegYMMSizeMask or RegYMMConstSizeMask or + RegZMMSizeMask or RegZMMConstSizeMask)) <> 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegSize; + end + else if (RegXMMSizeMask or RegXMMConstSizeMask = OT_BITS16) and + (RegYMMSizeMask or RegYMMConstSizeMask = OT_BITS32) and + (RegZMMSizeMask or RegZMMConstSizeMask = 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx16y32; + end + else if (RegXMMSizeMask or RegXMMConstSizeMask = OT_BITS16) and + (RegYMMSizeMask or RegYMMConstSizeMask = OT_BITS32) and + (RegZMMSizeMask or RegZMMConstSizeMask = OT_BITS64) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx16y32z64; + end + else if ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS32) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS64) then + begin + if ((RegZMMSizeMask or RegZMMConstSizeMask) = 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx32y64; + end + else if ((RegZMMSizeMask or RegZMMConstSizeMask) = OT_BITS128) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx32y64z128; + end; + end + else if ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS64) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS128) and + ((RegZMMSizeMask or RegZMMConstSizeMask) = 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx64y128; + end + else if ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS64) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS128) and + ((RegZMMSizeMask or RegZMMConstSizeMask) = OT_BITS256) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx64y128z256; + end + else if ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS64) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS256) and + ((RegZMMSizeMask or RegZMMConstSizeMask) = 0) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx64y256; + end + else if ((RegXMMSizeMask or RegXMMConstSizeMask) = OT_BITS64) and + ((RegYMMSizeMask or RegYMMConstSizeMask) = OT_BITS256) and + ((RegZMMSizeMask or RegZMMConstSizeMask) = OT_BITS512) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegx64y256z512; + end + else if ((RegXMMConstSizeMask = 0) or (RegXMMConstSizeMask = OT_BITS128)) and + ((RegYMMConstSizeMask = 0) or (RegYMMConstSizeMask = OT_BITS256)) and + ((RegZMMConstSizeMask = 0) or (RegZMMConstSizeMask = OT_BITS512)) and + ((RegXMMConstSizeMask or RegYMMConstSizeMask or RegZMMConstSizeMask) <> 0) and + ( + ((RegXMMSizeMask or RegYMMSizeMask or RegZMMSizeMask) = OT_BITS128) or + ((RegXMMSizeMask or RegYMMSizeMask or RegZMMSizeMask) = OT_BITS256) or + ((RegXMMSizeMask or RegYMMSizeMask or RegZMMSizeMask) = OT_BITS512) + ) then + begin + case RegXMMSizeMask or RegYMMSizeMask or RegZMMSizeMask of + OT_BITS128: InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegConst128; + OT_BITS256: InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegConst256; + OT_BITS512: InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMemRegConst512; + else InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiMultiple; + end; + end + else + begin + if not( + (AsmOp = A_CVTSI2SS) or + (AsmOp = A_CVTSI2SD) or + (AsmOp = A_CVTPD2DQ) or + (AsmOp = A_VCVTPD2DQ) or + (AsmOp = A_VCVTPD2PS) or + (AsmOp = A_VCVTSI2SD) or + (AsmOp = A_VCVTSI2SS) or + (AsmOp = A_VCVTTPD2DQ) or + + + // TODO check + (AsmOp = A_VCMPSS) + + + ) then; + + end; + + end + else if (InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX) and + (InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown) and + (not(ExistsMemRef)) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiNoMemRef; + end; + + InsTabMemRefSizeInfoCache^[AsmOp].RegXMMSizeMask:=RegXMMSizeMask; + InsTabMemRefSizeInfoCache^[AsmOp].RegYMMSizeMask:=RegYMMSizeMask; + InsTabMemRefSizeInfoCache^[AsmOp].RegZMMSizeMask:=RegZMMSizeMask; + + end; + end; + + for AsmOp := low(TAsmOp) to high(TAsmOp) do + begin + + + // only supported intructiones with SSE- or AVX-operands + if not(InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX) then + begin + InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnknown; + InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnknown; + end; + end; + end; { TOperandListItem } @@ -128,6 +1180,7 @@ end; function TAsmTestGenerator.InternalCalcTestData(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList; var + i: integer; Item: TOperandListItem; OItem1: TOperandListItem; OItem2: TOperandListItem; @@ -140,6 +1193,7 @@ var il_Op3: integer; il_Op4: integer; + sSuffix: string; sl_Operand: String; sl_Inst : String; sl_RegCombi: String; @@ -151,6 +1205,8 @@ var sl_RegCombi1: string; sl_RegCombi2: string; sl_RegCombi3: string; + MaskRegNeeded:boolean; + function PrepareOperandTyp(const aTyp: String): String; begin @@ -173,11 +1229,30 @@ begin OItem4 := TOperandListItem.Create; try - UsePrefix := (aInst = 'VCVTPD2DQ') OR - (aInst = 'VCVTPD2PS') OR - (aInst = 'VCVTSI2SD') OR - (aInst = 'VCVTSI2SS') OR - (aInst = 'VCVTTPD2DQ'); + UsePrefix := (UpperCase(aInst) = 'VCVTPD2DQ') OR + (UpperCase(aInst) = 'VCVTPD2PS') OR + (UpperCase(aInst) = 'VCVTSI2SD') OR + (UpperCase(aInst) = 'VCVTSI2SS') OR + (UpperCase(aInst) = 'VCVTTPD2DQ') or + (UpperCase(aInst) = 'VPMOVZXWQ') or + (UpperCase(aInst) = 'VCVTPD2UDQ') or + (UpperCase(aInst) = 'VCVTPD2UDQ') or + (UpperCase(aInst) = 'VCVTTPD2UDQ') or + (UpperCase(aInst) = 'VCVTUQQ2PS') or + (UpperCase(aInst) = 'VCVTQQ2PS') or + (UpperCase(aInst) = 'VCVTUSI2SD') or + (UpperCase(aInst) = 'VCVTUSI2SS') or + (UpperCase(aInst) = 'VFPCLASSPD') or + (UpperCase(aInst) = 'VFPCLASSPS') or + (UpperCase(aInst) = 'VCMPSS') + + ; + + + MaskRegNeeded := (Pos('VGATHER', Uppercase(aInst)) = 1) or + (Pos('VPGATHER', Uppercase(aInst)) = 1) or + (Pos('VPSCATTER', Uppercase(aInst)) = 1) or + (Pos('VSCATTER', Uppercase(aInst)) = 1); for il_Op := 1 to 4 do begin @@ -204,85 +1279,143 @@ begin sl_Operand := PrepareOperandTyp(sl_Operand); - if AnsiSameText(sl_Operand, 'XMMREG') then + if (AnsiSameText(sl_Operand, 'XMMREG')) or + (AnsiSameText(sl_Operand, 'XMMREG_M')) or + (AnsiSameText(sl_Operand, 'XMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'XMMREG_ER')) or + (AnsiSameText(sl_Operand, 'XMMREG_SAE')) then begin Item.OpNumber := il_Op; Item.OpTyp := otXMMReg; Item.OpActive := true; - Item.Values.Add('XMM0'); - Item.Values.Add('XMM1'); - Item.Values.Add('XMM2'); - Item.Values.Add('XMM3'); - Item.Values.Add('XMM4'); - Item.Values.Add('XMM5'); - Item.Values.Add('XMM6'); - Item.Values.Add('XMM7'); + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {ru-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM1' + sSuffix); + Item.Values.Add('XMM2' + sSuffix); + Item.Values.Add('XMM3' + sSuffix); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM5' + sSuffix); + Item.Values.Add('XMM6' + sSuffix); + Item.Values.Add('XMM7' + sSuffix); if x64 then begin - if aOp4 <> 'XMMREG' then + Item.Values.Clear; + if FAVX512 then begin - Item.Values.Add('XMM8'); - Item.Values.Add('XMM9'); - Item.Values.Add('XMM10'); - Item.Values.Add('XMM11'); - Item.Values.Add('XMM12'); - Item.Values.Add('XMM13'); - Item.Values.Add('XMM14'); - Item.Values.Add('XMM15'); + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM9' + sSuffix); + Item.Values.Add('XMM18' + sSuffix); + Item.Values.Add('XMM27' + sSuffix); + Item.Values.Add('XMM31' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('XMM0'); + Item.Values.Add('XMM9'); + Item.Values.Add('XMM18'); + Item.Values.Add('XMM27'); + Item.Values.Add('XMM31'); + end; end else begin - Item.Values.Clear; - - Item.Values.Add('XMM0'); - Item.Values.Add('XMM7'); - Item.Values.Add('XMM8'); - Item.Values.Add('XMM15'); + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM8' + sSuffix); + Item.Values.Add('XMM12' + sSuffix); + Item.Values.Add('XMM15' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('XMM0'); + Item.Values.Add('XMM4'); + Item.Values.Add('XMM8'); + Item.Values.Add('XMM12'); + Item.Values.Add('XMM15'); + end; end; end; end - else if AnsiSameText(sl_Operand, 'XMMRM') then + else if (AnsiSameText(sl_Operand, 'XMMRM')) or + (AnsiSameText(sl_Operand, 'XMMRM_M')) or + (AnsiSameText(sl_Operand, 'XMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM_SAE')) then begin Item.OpNumber := il_Op; Item.OpTyp := otXMMRM; Item.OpActive := true; if UsePrefix then sl_Prefix := 'oword '; - - Item.Values.Add('XMM0'); - Item.Values.Add('XMM1'); - Item.Values.Add('XMM2'); - Item.Values.Add('XMM3'); - Item.Values.Add('XMM4'); - Item.Values.Add('XMM5'); - Item.Values.Add('XMM6'); - Item.Values.Add('XMM7'); + + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM1' + sSuffix); + Item.Values.Add('XMM2' + sSuffix); + Item.Values.Add('XMM3' + sSuffix); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM5' + sSuffix); + Item.Values.Add('XMM6' + sSuffix); + Item.Values.Add('XMM7' + sSuffix); if x64 then begin - Item.Values.Add('XMM8'); - Item.Values.Add('XMM9'); - Item.Values.Add('XMM10'); - Item.Values.Add('XMM11'); - Item.Values.Add('XMM12'); - Item.Values.Add('XMM13'); - Item.Values.Add('XMM14'); - Item.Values.Add('XMM15'); - - //Item.Values.Add('[RIP]'); - //Item.Values.Add('[RIP + 16]'); + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM9' + sSuffix); + Item.Values.Add('XMM9'); + Item.Values.Add('XMM18' + sSuffix); + Item.Values.Add('XMM18'); + Item.Values.Add('XMM27' + sSuffix); + Item.Values.Add('XMM27'); + Item.Values.Add('XMM31' + sSuffix); + Item.Values.Add('XMM31'); + end + else + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM4'); + Item.Values.Add('XMM8' + sSuffix); + Item.Values.Add('XMM8'); + Item.Values.Add('XMM12' + sSuffix); + Item.Values.Add('XMM15'); + Item.Values.Add('XMM15' + sSuffix); + end; - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end else begin - MemRegBaseIndexCombi(sl_Prefix, FReg32Base, FReg32Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values); end; end - else if AnsiSameText(sl_Operand, 'XMMRM8') then + else if (AnsiSameText(sl_Operand, 'XMMRM8')) or + (AnsiSameText(sl_Operand, 'XMMRM8_M')) or + (AnsiSameText(sl_Operand, 'XMMRM8_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM8_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM8_SAE')) then begin Item.OpNumber := il_Op; Item.OpTyp := otXMMRM8; @@ -290,38 +1423,69 @@ begin if UsePrefix then sl_Prefix := 'byte '; - Item.Values.Add('XMM0'); - Item.Values.Add('XMM1'); - Item.Values.Add('XMM2'); - Item.Values.Add('XMM3'); - Item.Values.Add('XMM4'); - Item.Values.Add('XMM5'); - Item.Values.Add('XMM6'); - Item.Values.Add('XMM7'); + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM1' + sSuffix); + Item.Values.Add('XMM2' + sSuffix); + Item.Values.Add('XMM3' + sSuffix); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM5' + sSuffix); + Item.Values.Add('XMM6' + sSuffix); + Item.Values.Add('XMM7' + sSuffix); if x64 then begin - Item.Values.Add('XMM8'); - Item.Values.Add('XMM9'); - Item.Values.Add('XMM10'); - Item.Values.Add('XMM11'); - Item.Values.Add('XMM12'); - Item.Values.Add('XMM13'); - Item.Values.Add('XMM14'); - Item.Values.Add('XMM15'); + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM9' + sSuffix); + Item.Values.Add('XMM9'); + Item.Values.Add('XMM18' + sSuffix); + Item.Values.Add('XMM18'); + Item.Values.Add('XMM27' + sSuffix); + Item.Values.Add('XMM27'); + Item.Values.Add('XMM31' + sSuffix); + Item.Values.Add('XMM31'); + end + else + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM4'); + Item.Values.Add('XMM8' + sSuffix); + Item.Values.Add('XMM8'); + Item.Values.Add('XMM12' + sSuffix); + Item.Values.Add('XMM12'); + Item.Values.Add('XMM15' + sSuffix); + Item.Values.Add('XMM15'); + end; //Item.Values.Add('[RIP]'); //Item.Values.Add('[RIP + 16]'); - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end else begin - MemRegBaseIndexCombi(sl_Prefix, FReg32Base, FReg32Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values); end; end - else if AnsiSameText(sl_Operand, 'XMMRM16') then + else if (AnsiSameText(sl_Operand, 'XMMRM16')) or + (AnsiSameText(sl_Operand, 'XMMRM16_M')) or + (AnsiSameText(sl_Operand, 'XMMRM16_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM16_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM16_SAE')) + then begin Item.OpNumber := il_Op; Item.OpTyp := otXMMRM16; @@ -329,77 +1493,137 @@ begin if UsePrefix then sl_Prefix := 'word '; - Item.Values.Add('XMM0'); - Item.Values.Add('XMM1'); - Item.Values.Add('XMM2'); - Item.Values.Add('XMM3'); - Item.Values.Add('XMM4'); - Item.Values.Add('XMM5'); - Item.Values.Add('XMM6'); - Item.Values.Add('XMM7'); + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM1' + sSuffix); + Item.Values.Add('XMM2' + sSuffix); + Item.Values.Add('XMM3' + sSuffix); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM5' + sSuffix); + Item.Values.Add('XMM6' + sSuffix); + Item.Values.Add('XMM7' + sSuffix); if x64 then begin - Item.Values.Add('XMM8'); - Item.Values.Add('XMM9'); - Item.Values.Add('XMM10'); - Item.Values.Add('XMM11'); - Item.Values.Add('XMM12'); - Item.Values.Add('XMM13'); - Item.Values.Add('XMM14'); - Item.Values.Add('XMM15'); + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM9' + sSuffix); + Item.Values.Add('XMM9'); + Item.Values.Add('XMM18' + sSuffix); + Item.Values.Add('XMM18'); + Item.Values.Add('XMM27' + sSuffix); + Item.Values.Add('XMM27'); + Item.Values.Add('XMM31' + sSuffix); + Item.Values.Add('XMM31'); + end + else + begin + Item.Values.Add('XMM0' + sSuffix); + Item.Values.Add('XMM0'); + Item.Values.Add('XMM4' + sSuffix); + Item.Values.Add('XMM4'); + Item.Values.Add('XMM8' + sSuffix); + Item.Values.Add('XMM8'); + Item.Values.Add('XMM12' + sSuffix); + Item.Values.Add('XMM12'); + Item.Values.Add('XMM15' + sSuffix); + Item.Values.Add('XMM15'); + end; //Item.Values.Add('[RIP]'); //Item.Values.Add('[RIP + 16]'); - MemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end else begin - MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + MemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32Index, Item.Values); end; end - else if AnsiSameText(sl_Operand, 'YMMREG') then + else if (AnsiSameText(sl_Operand, 'YMMREG')) or + (AnsiSameText(sl_Operand, 'YMMREG_M')) or + (AnsiSameText(sl_Operand, 'YMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'YMMREG_ER')) or + (AnsiSameText(sl_Operand, 'YMMREG_SAE')) + then begin Item.OpNumber := il_Op; Item.OpTyp := otYMMReg; Item.OpActive := true; - Item.Values.Add('YMM0'); - Item.Values.Add('YMM1'); - Item.Values.Add('YMM2'); - Item.Values.Add('YMM3'); - Item.Values.Add('YMM4'); - Item.Values.Add('YMM5'); - Item.Values.Add('YMM6'); - Item.Values.Add('YMM7'); + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM1' + sSuffix); + Item.Values.Add('YMM2' + sSuffix); + Item.Values.Add('YMM3' + sSuffix); + Item.Values.Add('YMM4' + sSuffix); + Item.Values.Add('YMM5' + sSuffix); + Item.Values.Add('YMM6' + sSuffix); + Item.Values.Add('YMM7' + sSuffix); if x64 then begin - if aOp4 <> 'YMMREG' then + Item.Values.Clear; + if FAVX512 then begin - Item.Values.Add('YMM8'); - Item.Values.Add('YMM9'); - Item.Values.Add('YMM10'); - Item.Values.Add('YMM11'); - Item.Values.Add('YMM12'); - Item.Values.Add('YMM13'); - Item.Values.Add('YMM14'); - Item.Values.Add('YMM15'); + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM9' + sSuffix); + Item.Values.Add('YMM18' + sSuffix); + Item.Values.Add('YMM27' + sSuffix); + Item.Values.Add('YMM31' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('YMM0'); + Item.Values.Add('YMM9'); + Item.Values.Add('YMM18'); + Item.Values.Add('YMM27'); + Item.Values.Add('YMM31'); + end; end else begin - Item.Values.Clear; - - Item.Values.Add('YMM0'); - Item.Values.Add('YMM7'); - Item.Values.Add('YMM8'); - Item.Values.Add('YMM15'); + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM4' + sSuffix); + Item.Values.Add('YMM8' + sSuffix); + Item.Values.Add('YMM12' + sSuffix); + Item.Values.Add('YMM15' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('YMM0'); + Item.Values.Add('YMM4'); + Item.Values.Add('YMM8'); + Item.Values.Add('YMM12'); + Item.Values.Add('YMM15'); + end; end; end; end - else if AnsiSameText(sl_Operand, 'YMMRM') then + else if (AnsiSameText(sl_Operand, 'YMMRM')) or + (AnsiSameText(sl_Operand, 'YMMRM_M')) or + (AnsiSameText(sl_Operand, 'YMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'YMMRM_ER')) or + (AnsiSameText(sl_Operand, 'YMMRM_SAE')) + then begin Item.OpNumber := il_Op; Item.OpTyp := otYMMRM; @@ -407,32 +1631,193 @@ begin if UsePrefix then sl_Prefix := 'yword '; - Item.Values.Add('YMM0'); - Item.Values.Add('YMM1'); - Item.Values.Add('YMM2'); - Item.Values.Add('YMM3'); - Item.Values.Add('YMM4'); - Item.Values.Add('YMM5'); - Item.Values.Add('YMM6'); - Item.Values.Add('YMM7'); + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM1' + sSuffix); + Item.Values.Add('YMM2' + sSuffix); + Item.Values.Add('YMM3' + sSuffix); + Item.Values.Add('YMM4' + sSuffix); + Item.Values.Add('YMM5' + sSuffix); + Item.Values.Add('YMM6' + sSuffix); + Item.Values.Add('YMM7' + sSuffix); if x64 then begin - Item.Values.Add('YMM8'); - Item.Values.Add('YMM9'); - Item.Values.Add('YMM10'); - Item.Values.Add('YMM11'); - Item.Values.Add('YMM12'); - Item.Values.Add('YMM13'); - Item.Values.Add('YMM14'); - Item.Values.Add('YMM15'); - - MemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64Index, Item.Values); + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM9' + sSuffix); + Item.Values.Add('YMM18' + sSuffix); + Item.Values.Add('YMM27' + sSuffix); + Item.Values.Add('YMM31' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('YMM0'); + Item.Values.Add('YMM9'); + Item.Values.Add('YMM18'); + Item.Values.Add('YMM27'); + Item.Values.Add('YMM31'); + end; + end + else + begin + Item.Values.Add('YMM0' + sSuffix); + Item.Values.Add('YMM4' + sSuffix); + Item.Values.Add('YMM8' + sSuffix); + Item.Values.Add('YMM12' + sSuffix); + Item.Values.Add('YMM15' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('YMM0'); + Item.Values.Add('YMM4'); + Item.Values.Add('YMM8'); + Item.Values.Add('YMM12'); + Item.Values.Add('YMM15'); + end; + end; + + MemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end else begin - MemRegBaseIndexCombi(sl_Prefix, FReg32Base, FReg32Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values); + end; + end + else if (AnsiSameText(sl_Operand, 'ZMMREG')) or + (AnsiSameText(sl_Operand, 'ZMMREG_M')) or + (AnsiSameText(sl_Operand, 'ZMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'ZMMREG_ER')) or + (AnsiSameText(sl_Operand, 'ZMMREG_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMMReg; + Item.OpActive := true; + + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM1' + sSuffix); + Item.Values.Add('ZMM2' + sSuffix); + Item.Values.Add('ZMM3' + sSuffix); + Item.Values.Add('ZMM4' + sSuffix); + Item.Values.Add('ZMM5' + sSuffix); + Item.Values.Add('ZMM6' + sSuffix); + Item.Values.Add('ZMM7' + sSuffix); + + if x64 then + begin + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM9' + sSuffix); + Item.Values.Add('ZMM18' + sSuffix); + Item.Values.Add('ZMM27' + sSuffix); + Item.Values.Add('ZMM31' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('ZMM0'); + Item.Values.Add('ZMM9'); + Item.Values.Add('ZMM18'); + Item.Values.Add('ZMM27'); + Item.Values.Add('ZMM31'); + end; + end + else + begin + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM4' + sSuffix); + Item.Values.Add('ZMM8' + sSuffix); + Item.Values.Add('ZMM12' + sSuffix); + Item.Values.Add('ZMM15' + sSuffix); + end; + end; + end + else if (AnsiSameText(sl_Operand, 'ZMMRM')) or + (AnsiSameText(sl_Operand, 'ZMMRM_M')) or + (AnsiSameText(sl_Operand, 'ZMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMMRM; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + sSuffix := ''; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}' + else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}' + else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}'; + + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM1' + sSuffix); + Item.Values.Add('ZMM2' + sSuffix); + Item.Values.Add('ZMM3' + sSuffix); + Item.Values.Add('ZMM4' + sSuffix); + Item.Values.Add('ZMM5' + sSuffix); + Item.Values.Add('ZMM6' + sSuffix); + Item.Values.Add('ZMM7' + sSuffix); + + if x64 then + begin + Item.Values.Clear; + if FAVX512 then + begin + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM9' + sSuffix); + Item.Values.Add('ZMM18' + sSuffix); + Item.Values.Add('ZMM27' + sSuffix); + Item.Values.Add('ZMM31' + sSuffix); + + if (sSuffix <> '') and + (MaskRegNeeded = false) then + begin + Item.Values.Add('ZMM0'); + Item.Values.Add('ZMM9'); + Item.Values.Add('ZMM18'); + Item.Values.Add('ZMM27'); + Item.Values.Add('ZMM31'); + end; + end + else + begin + Item.Values.Add('ZMM0' + sSuffix); + Item.Values.Add('ZMM4' + sSuffix); + Item.Values.Add('ZMM8' + sSuffix); + Item.Values.Add('ZMM12' + sSuffix); + Item.Values.Add('ZMM15' + sSuffix); + end; + + MemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else + begin + MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values); end; end else if AnsiSameText(sl_Operand, 'MEM8') then @@ -441,16 +1826,22 @@ begin Item.OpTyp := otMEM8; Item.OpActive := true; - if UsePrefix then sl_Prefix := 'byte '; - if x64 then + + if UsePrefix then sl_Prefix := 'byte '; + + + sSuffix := ''; + + if x64 then begin - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32Index, Item.Values); end - else if AnsiSameText(sl_Operand, 'MEM16') then + else if AnsiSameText(sl_Operand, 'MEM16') or + AnsiSameText(sl_Operand, 'MEM16_M') then begin Item.OpNumber := il_Op; Item.OpTyp := otMEM16; @@ -458,14 +1849,19 @@ begin if UsePrefix then sl_Prefix := 'word '; + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if x64 then begin - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_Prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_Prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); end - else if AnsiSameText(sl_Operand, 'MEM32') then + else if AnsiSameText(sl_Operand, 'MEM32') or + AnsiSameText(sl_Operand, 'MEM32_M') or + AnsiSameText(sl_Operand, 'MEM32_MZ') then begin Item.OpNumber := il_Op; Item.OpTyp := otMEM32; @@ -473,14 +1869,22 @@ begin if UsePrefix then sl_Prefix := 'dword '; + sSuffix := ''; + + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'; + + if x64 then begin - MemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); end - else if AnsiSameText(sl_Operand, 'MEM64') then + else if (AnsiSameText(sl_Operand, 'MEM64')) or + (AnsiSameText(sl_Operand, 'MEM64_M')) or + (AnsiSameText(sl_Operand, 'MEM64_MZ')) then begin Item.OpNumber := il_Op; Item.OpTyp := otMEM64; @@ -488,14 +1892,20 @@ begin if UsePrefix then sl_Prefix := 'qword '; + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'; + if x64 then begin - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); end - else if AnsiSameText(sl_Operand, 'MEM128') then + else if (AnsiSameText(sl_Operand, 'MEM128')) or + (AnsiSameText(sl_Operand, 'MEM128_M')) or + (AnsiSameText(sl_Operand, 'MEM128_MZ')) then begin Item.OpNumber := il_Op; Item.OpTyp := otMEM128; @@ -503,14 +1913,20 @@ begin if UsePrefix then sl_Prefix := 'oword '; + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'; + if x64 then begin - MemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); end - else if AnsiSameText(sl_Operand, 'MEM256') then + else if (AnsiSameText(sl_Operand, 'MEM256')) or + (AnsiSameText(sl_Operand, 'MEM256_M')) or + (AnsiSameText(sl_Operand, 'MEM256_MZ')) then begin Item.OpNumber := il_Op; Item.OpTyp := otMEM256; @@ -518,12 +1934,63 @@ begin if UsePrefix then sl_Prefix := 'yword '; + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'; + + if x64 then begin - MemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); + end + else if (AnsiSameText(sl_Operand, 'MEM512')) or + (AnsiSameText(sl_Operand, 'MEM512_M')) or + (AnsiSameText(sl_Operand, 'MEM512_MZ')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM512; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, 'REG8') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG8; + Item.OpActive := true; + + if x64 then + begin + Item.Values.AddStrings(FReg8); + end + else Item.Values.AddStrings(FReg8); + end + else if AnsiSameText(sl_Operand, 'REG16') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG16; + Item.OpActive := true; + + if x64 then + begin + Item.Values.AddStrings(FReg16); + end + else Item.Values.AddStrings(FReg16); end else if AnsiSameText(sl_Operand, 'REG32') then begin @@ -560,10 +2027,10 @@ begin if x64 then begin - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32Index, Item.Values); end else if AnsiSameText(sl_Operand, 'RM64') then begin @@ -578,10 +2045,10 @@ begin if x64 then begin Item.Values.AddStrings(FReg64Base); - MemRegBaseIndexCombi(sl_Prefix, FReg64Base, FReg64Index, Item.Values); + MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values); //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); end - else MemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32Index, Item.Values); + else MemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32Index, Item.Values); end else if AnsiSameText(sl_Operand, 'IMM8') then begin @@ -591,7 +2058,8 @@ begin Item.Values.Add('0'); end - else if AnsiSameText(sl_Operand, 'XMEM32') then + else if AnsiSameText(sl_Operand, 'XMEM32') or + AnsiSameText(sl_Operand, 'XMEM32_M') then begin Item.OpNumber := il_Op; Item.OpTyp := otXMEM32; @@ -599,33 +2067,65 @@ begin if UsePrefix then sl_Prefix := 'oword '; + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if x64 then begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64XMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64XMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64XMMIndex, Item.Values); end else begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32XMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32XMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32XMMIndex, Item.Values); end; end - else if AnsiSameText(sl_Operand, 'XMEM64') then + else if AnsiSameText(sl_Operand, 'XMEM64') or + AnsiSameText(sl_Operand, 'XMEM64_M') then begin Item.OpNumber := il_Op; Item.OpTyp := otXMEM64; Item.OpActive := true; - if UsePrefix then sl_Prefix := 'oword '; + //if UsePrefix then sl_Prefix := 'oword '; + // + //if x64 then + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64XMMIndex, Item.Values); + //end + //else + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32XMMIndex, Item.Values); + //end; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; if x64 then begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64XMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64XMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64XMMIndex, Item.Values); end else begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32XMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32XMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32XMMIndex, Item.Values); end; + end - else if AnsiSameText(sl_Operand, 'YMEM32') then + else if AnsiSameText(sl_Operand, 'YMEM32') or + AnsiSameText(sl_Operand, 'YMEM32_M') then begin Item.OpNumber := il_Op; Item.OpTyp := otYMEM32; @@ -633,16 +2133,38 @@ begin if UsePrefix then sl_Prefix := 'yword '; + //if x64 then + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64YMMIndex, Item.Values); + //end + //else + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32YMMIndex, Item.Values); + //end; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if x64 then begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64YMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64YMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64YMMIndex, Item.Values); end else begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32YMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32YMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32YMMIndex, Item.Values); end; + end - else if AnsiSameText(sl_Operand, 'YMEM64') then + else if AnsiSameText(sl_Operand, 'YMEM64') or + AnsiSameText(sl_Operand, 'YMEM64_M') then begin Item.OpNumber := il_Op; Item.OpTyp := otYMEM64; @@ -650,25 +2172,1223 @@ begin if UsePrefix then sl_Prefix := 'yword '; + //if x64 then + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64YMMIndex, Item.Values); + //end + //else + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32YMMIndex, Item.Values); + //end; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if x64 then + begin + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64YMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64YMMIndex, Item.Values); + end + else + begin + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32YMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32YMMIndex, Item.Values); + end; + + end + else if AnsiSameText(sl_Operand, 'ZMEM32') or + AnsiSameText(sl_Operand, 'ZMEM32_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMEM32; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + //if x64 then + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64ZMMIndex, Item.Values); + //end + //else + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32ZMMIndex, Item.Values); + //end; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if x64 then + begin + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64ZMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64ZMMIndex, Item.Values); + end + else + begin + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32ZMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32ZMMIndex, Item.Values); + end; + + end + else if AnsiSameText(sl_Operand, 'ZMEM64') or + AnsiSameText(sl_Operand, 'ZMEM64_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMEM64; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + //if x64 then + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64ZMMIndex, Item.Values); + //end + //else + //begin + // VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32ZMMIndex, Item.Values); + //end; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + if x64 then begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg64Base, FReg64YMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg64Base, FReg64ZMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg64Base, FReg64ZMMIndex, Item.Values); end else begin - VectorMemRegBaseIndexCombi(sl_prefix, FReg32Base, FReg32YMMIndex, Item.Values); + VectorMemRegBaseIndexCombi(sl_prefix, sSuffix, FReg32Base, FReg32ZMMIndex, Item.Values); + if (sSuffix <> '') and + (MaskRegNeeded = false) + then + VectorMemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32ZMMIndex, Item.Values); end; + + end + else if AnsiSameText(sl_Operand, '2B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to2}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to2}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '4B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to4}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to4}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '8B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to8}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to8}', FReg32Base, FReg32Index, Item.Values); end + else if AnsiSameText(sl_Operand, '16B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to16}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to16}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '2B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to2}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to2}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '4B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to4}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to4}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '8B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to8}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to8}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, '16B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + + if x64 then + begin + MemRegBaseIndexCombi(sl_Prefix, ' {1to16}', FReg64Base, FReg64Index, Item.Values); + //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values); + end + else MemRegBaseIndexCombi(sl_prefix, ' {1to16}', FReg32Base, FReg32Index, Item.Values); + end + else if AnsiSameText(sl_Operand, 'KREG') or + AnsiSameText(sl_Operand, 'KREG_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otKREG; + Item.OpActive := true; + + sSuffix := ''; + if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; + + if UsePrefix then sl_Prefix := ''; + + for i := 0 to FRegKREG.Count - 1 do + Item.Values.Add(FRegKREG[i] + sSuffix); + end + else if trim(sl_Operand) = '' then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otUnknown; + Item.OpActive := false; + + Item.Values.Add(''); + end else begin Item.OpNumber := il_Op; Item.OpTyp := otUnknown; Item.OpActive := false; + Item.Values.Add('?' + sl_Operand); + end + + end; + + sl_RegCombi := ''; + + + il_Operands := 0; + UsedParams := 0; + + if OItem1.OpActive then + begin + inc(il_Operands); + UsedParams := UsedParams or 1; + end; + + if OItem2.OpActive then + begin + inc(il_Operands); + UsedParams := UsedParams or 2; + end; + + if OItem3.OpActive then + begin + inc(il_Operands); + UsedParams := UsedParams or 4; + end; + + if OItem4.OpActive then + begin + inc(il_Operands); + UsedParams := UsedParams or 8; + end; + + case il_Operands of + 1: UseDefault := UsedParams <> 1; + 2: UseDefault := UsedParams <> 3; + 3: UseDefault := UsedParams <> 7; + 4: UseDefault := UsedParams <> 15; + else UseDefault := true; + end; + + //UseDefault := true; + + if UseDefault then + begin + sl_Inst := format('%-20s', [aInst]); + + for il_Op1 := 0 to OItem1.Values.Count - 1 do + begin + for il_Op2 := 0 to OItem2.Values.Count - 1 do + begin + for il_Op3 := 0 to OItem3.Values.Count - 1 do + begin + for il_Op4 := 0 to OItem4.Values.Count - 1 do + begin + sl_RegCombi := ''; + + if OItem1.OpActive then + begin + if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', '; + sl_RegCombi := sl_RegCombi + OItem1.Values[il_Op1]; + end; + + if OItem2.OpActive then + begin + if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', '; + sl_RegCombi := sl_RegCombi + OItem2.Values[il_Op2]; + end; + + if OItem3.OpActive then + begin + if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', '; + sl_RegCombi := sl_RegCombi + OItem3.Values[il_Op3]; + end; + + if OItem4.OpActive then + begin + if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', '; + sl_RegCombi := sl_RegCombi + OItem4.Values[il_Op4]; + end; + + if sl_RegCombi <> '' then + begin + //result.Add(format('%-20s%s', [aInst, sl_RegCombi])); + result.Add(sl_Inst + sl_RegCombi); + sl_RegCombi := ''; + end; + end; + end; + end; + end; + end + else + begin + sl_Inst := format('%-20s', [aInst]); + + for il_Op1 := 0 to OItem1.Values.Count - 1 do + begin + if OItem1.OpActive then + begin + sl_RegCombi1 := OItem1.Values[il_Op1]; + end + else sl_RegCombi1 := ''; + + for il_Op2 := 0 to OItem2.Values.Count - 1 do + begin + if OItem2.OpActive then + begin + sl_RegCombi2 := sl_RegCombi1 + ', ' + OItem2.Values[il_Op2]; + end + else sl_RegCombi2 := sl_RegCombi1; + + for il_Op3 := 0 to OItem3.Values.Count - 1 do + begin + if OItem3.OpActive then + begin + sl_RegCombi3 := sl_RegCombi2 + ', ' + OItem3.Values[il_Op3]; + end + else sl_RegCombi3 := sl_RegCombi2; + + for il_Op4 := 0 to OItem4.Values.Count - 1 do + begin + if OItem4.OpActive then + begin + sl_RegCombi := sl_RegCombi3 + ', ' + OItem4.Values[il_Op4]; + end + else sl_RegCombi := sl_RegCombi3; + + if sl_RegCombi <> '' then + begin + //result.Add(format('%-20s%s', [aInst, sl_RegCombi])); + result.Add(sl_Inst + sl_RegCombi); + sl_RegCombi := ''; + end; + end; + end; + end; + end; + end; + finally + FreeAndNil(OItem4); + end; + finally + FreeAndNil(OItem3); + end; + finally + FreeAndNil(OItem2); + end; + finally + FreeAndNil(OItem1); + end; +end; + + +function TAsmTestGenerator.InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3, + aOp4: String): TStringList; +var + i: integer; + Item: TOperandListItem; + OItem1: TOperandListItem; + OItem2: TOperandListItem; + OItem3: TOperandListItem; + OItem4: TOperandListItem; + + il_Op: integer; + il_Op1: integer; + il_Op2: integer; + il_Op3: integer; + il_Op4: integer; + + sSuffix: string; + sl_Operand: String; + sl_Inst : String; + sl_RegCombi: String; + sl_Prefix: String; + UsePrefix: boolean; + il_Operands: integer; + UsedParams: cardinal; + UseDefault: boolean; + sl_RegCombi1: string; + sl_RegCombi2: string; + sl_RegCombi3: string; + + function PrepareOperandTyp(const aTyp: String): String; + begin + result := aTyp; + if copy(result, length(result), 1) = '*' then result := copy(result, 1, length(result) - 1); + if result = 'XMMRM128' then result := 'XMMRM'; + if result = 'YMMRM256' then result := 'YMMRM'; + end; + + +begin + result := TStringList.Create; + + OItem1 := TOperandListItem.Create; + try + OItem2 := TOperandListItem.Create; + try + OItem3 := TOperandListItem.Create; + try + OItem4 := TOperandListItem.Create; + try + + UsePrefix := (UpperCase(aInst) = 'VCVTPD2DQ') OR + (UpperCase(aInst) = 'VCVTPD2PS') OR + (UpperCase(aInst) = 'VCVTSI2SD') OR + (UpperCase(aInst) = 'VCVTSI2SS') OR + (UpperCase(aInst) = 'VCVTTPD2DQ') or + (UpperCase(aInst) = 'VPMOVZXWQ') or + (UpperCase(aInst) = 'VCVTPD2UDQ') or + (UpperCase(aInst) = 'VCVTPD2UDQ') or + (UpperCase(aInst) = 'VCVTTPD2UDQ') or + (UpperCase(aInst) = 'VCVTUQQ2PS') or + (UpperCase(aInst) = 'VCVTQQ2PS') or + (UpperCase(aInst) = 'VCVTUSI2SD') or + (UpperCase(aInst) = 'VCVTUSI2SS') or + (UpperCase(aInst) = 'VFPCLASSPD') or + (UpperCase(aInst) = 'VFPCLASSPS') or + (UpperCase(aInst) = 'VCMPSS') + + ; + + + + for il_Op := 1 to 4 do + begin + sl_Prefix := ''; + + case il_Op of + 1: begin + Item := OItem1; + sl_Operand := aOp1; + end; + 2: begin + Item := OItem2; + sl_Operand := aOp2; + end; + 3: begin + Item := OItem3; + sl_Operand := aOp3; + end; + 4: begin + Item := OItem4; + sl_Operand := aOp4; + end; + end; + + sl_Operand := PrepareOperandTyp(sl_Operand); + + if (AnsiSameText(sl_Operand, 'XMMREG')) or + (AnsiSameText(sl_Operand, 'XMMREG_M')) or + (AnsiSameText(sl_Operand, 'XMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'XMMREG_ER')) or + (AnsiSameText(sl_Operand, 'XMMREG_SAE')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMMReg; + Item.OpActive := true; + + Item.Values.Add('XMM0'); + end + else if (AnsiSameText(sl_Operand, 'XMMRM')) or + (AnsiSameText(sl_Operand, 'XMMRM_M')) or + (AnsiSameText(sl_Operand, 'XMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM_SAE')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMMRM; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'oword '; + + Item.Values.Add(' lOWord'); + Item.Values.Add(' gOWord'); + Item.Values.Add(' clOWord'); + Item.Values.Add(' cgOWord'); + + Item.Values.Add(' oword lOWord'); + Item.Values.Add(' oword gOWord'); + Item.Values.Add(' oword clOWord'); + Item.Values.Add(' oword cgOWord'); + + Item.Values.Add(' byte lOWord'); + Item.Values.Add(' byte gOWord'); + Item.Values.Add(' byte clOWord'); + Item.Values.Add(' byte cgOWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' oword lRec'); + Item.Values.Add(' oword gRec'); + + Item.Values.Add(' oword lRec.rOWord'); + Item.Values.Add(' oword gRec.rOWord'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'XMMRM8')) or + (AnsiSameText(sl_Operand, 'XMMRM8_M')) or + (AnsiSameText(sl_Operand, 'XMMRM8_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM8_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM8_SAE')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMMRM8; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'byte '; + + Item.Values.Add('lbyte'); + Item.Values.Add('gbyte'); + Item.Values.Add('clbyte'); + Item.Values.Add('cgbyte'); + + Item.Values.Add('byte lbyte'); + Item.Values.Add('byte gbyte'); + Item.Values.Add('byte clbyte'); + Item.Values.Add('byte cgbyte'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' byte lRec'); + Item.Values.Add(' byte gRec'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'XMMRM16')) or + (AnsiSameText(sl_Operand, 'XMMRM16_M')) or + (AnsiSameText(sl_Operand, 'XMMRM16_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM16_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM16_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMMRM16; + Item.OpActive := true; + + Item.Values.Add('lword'); + Item.Values.Add('gword'); + Item.Values.Add('clword'); + Item.Values.Add('cgword'); + + Item.Values.Add('word lword'); + Item.Values.Add('word gword'); + Item.Values.Add('word clword'); + Item.Values.Add('word cgword'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' word lRec'); + Item.Values.Add(' word gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'YMMREG')) or + (AnsiSameText(sl_Operand, 'YMMREG_M')) or + (AnsiSameText(sl_Operand, 'YMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'YMMREG_ER')) or + (AnsiSameText(sl_Operand, 'YMMREG_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otYMMReg; + Item.OpActive := true; + + Item.Values.Add('YMM0'); + end + else if (AnsiSameText(sl_Operand, 'YMMRM')) or + (AnsiSameText(sl_Operand, 'YMMRM_M')) or + (AnsiSameText(sl_Operand, 'YMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'YMMRM_ER')) or + (AnsiSameText(sl_Operand, 'YMMRM_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otYMMRM; + Item.OpActive := true; + + Item.Values.Add('lYWord'); + Item.Values.Add('gYWord'); + Item.Values.Add('clYWord'); + Item.Values.Add('cgYWord'); + + Item.Values.Add('yword lYWord'); + Item.Values.Add('yword gYWord'); + Item.Values.Add('yword clYWord'); + Item.Values.Add('yword cgYWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' yword lRec'); + Item.Values.Add(' yword gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'ZMMREG')) or + (AnsiSameText(sl_Operand, 'ZMMREG_M')) or + (AnsiSameText(sl_Operand, 'ZMMREG_MZ')) or + (AnsiSameText(sl_Operand, 'ZMMREG_ER')) or + (AnsiSameText(sl_Operand, 'ZMMREG_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMMReg; + Item.OpActive := true; + + Item.Values.Add('ZMM0'); + end + else if (AnsiSameText(sl_Operand, 'ZMMRM')) or + (AnsiSameText(sl_Operand, 'ZMMRM_M')) or + (AnsiSameText(sl_Operand, 'ZMMRM_MZ')) or + (AnsiSameText(sl_Operand, 'XMMRM_ER')) or + (AnsiSameText(sl_Operand, 'XMMRM_SAE')) + then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMMRM; + Item.OpActive := true; + + Item.Values.Add('lZWord'); + Item.Values.Add('gZWord'); + Item.Values.Add('clZWord'); + Item.Values.Add('cgZWord'); + + Item.Values.Add('zword lZWord'); + Item.Values.Add('zword gZWord'); + Item.Values.Add('zword clZWord'); + Item.Values.Add('zword cgZWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' zword lRec'); + Item.Values.Add(' zword gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if AnsiSameText(sl_Operand, 'MEM8') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM8; + Item.OpActive := true; + + Item.Values.Add('lByte'); + Item.Values.Add('gByte'); + Item.Values.Add('clByte'); + Item.Values.Add('cgByte'); + + Item.Values.Add('byte lByte'); + Item.Values.Add('byte gByte'); + Item.Values.Add('byte clByte'); + Item.Values.Add('byte cgByte'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' byte lRec'); + Item.Values.Add(' byte gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + end + else if AnsiSameText(sl_Operand, 'MEM16') or + AnsiSameText(sl_Operand, 'MEM16_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM16; + Item.OpActive := true; + + Item.Values.Add('lWord'); + Item.Values.Add('gWord'); + Item.Values.Add('clWord'); + Item.Values.Add('cgWord'); + + Item.Values.Add('word lWord'); + Item.Values.Add('word gWord'); + Item.Values.Add('word clWord'); + Item.Values.Add('word cgWord'); + + Item.Values.Add(' word lRec'); + Item.Values.Add(' word gRec'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + end + else if AnsiSameText(sl_Operand, 'MEM32') or + AnsiSameText(sl_Operand, 'MEM32_M') or + AnsiSameText(sl_Operand, 'MEM32_MZ') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM32; + Item.OpActive := true; + + Item.Values.Add('lDWord'); + Item.Values.Add('gDWord'); + Item.Values.Add('clDWord'); + Item.Values.Add('cgDWord'); + + Item.Values.Add('dword lDWord'); + Item.Values.Add('dword gDWord'); + Item.Values.Add('dword clDWord'); + Item.Values.Add('dword cgDWord'); + + Item.Values.Add(' dword lRec'); + Item.Values.Add(' dword gRec'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + end + else if (AnsiSameText(sl_Operand, 'MEM64')) or + (AnsiSameText(sl_Operand, 'MEM64_M')) or + (AnsiSameText(sl_Operand, 'MEM64_MZ')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM64; + Item.OpActive := true; + + Item.Values.Add('lQWord'); + Item.Values.Add('gQWord'); + Item.Values.Add('clQWord'); + Item.Values.Add('cgQWord'); + + Item.Values.Add('qword lQWord'); + Item.Values.Add('qword gQWord'); + Item.Values.Add('qword clQWord'); + Item.Values.Add('qword cgQWord'); + + Item.Values.Add(' qword lRec'); + Item.Values.Add(' qword gRec'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + end + else if (AnsiSameText(sl_Operand, 'MEM128')) or + (AnsiSameText(sl_Operand, 'MEM128_M')) or + (AnsiSameText(sl_Operand, 'MEM128_MZ')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM128; + Item.OpActive := true; + + Item.Values.Add('lOWord'); + Item.Values.Add('gOWord'); + Item.Values.Add('clOWord'); + Item.Values.Add('cgOWord'); + + Item.Values.Add('oword lOWord'); + Item.Values.Add('oword gOWord'); + Item.Values.Add('oword clOWord'); + Item.Values.Add('oword cgOWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' oword lRec'); + Item.Values.Add(' oword gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'MEM256')) or + (AnsiSameText(sl_Operand, 'MEM256_M')) or + (AnsiSameText(sl_Operand, 'MEM256_MZ')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM256; + Item.OpActive := true; + + Item.Values.Add('lYWord'); + Item.Values.Add('gYWord'); + Item.Values.Add('clYWord'); + Item.Values.Add('cgYWord'); + + Item.Values.Add('yword lYWord'); + Item.Values.Add('yword gYWord'); + Item.Values.Add('yword clYWord'); + Item.Values.Add('yword cgYWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' yword lRec'); + Item.Values.Add(' yword gRec'); + + Item.Values.Add(' lRec.rByte'); + Item.Values.Add(' gRec.rByte'); + + Item.Values.Add(' lRec.rWord'); + Item.Values.Add(' gRec.rWord'); + + Item.Values.Add(' lRec.rDWord'); + Item.Values.Add(' gRec.rDWord'); + + Item.Values.Add(' lRec.rQWord'); + Item.Values.Add(' gRec.rQWord'); + + Item.Values.Add(' lRec.rOWord'); + Item.Values.Add(' gRec.rOWord'); + + Item.Values.Add(' lRec.rYWord'); + Item.Values.Add(' gRec.rYWord'); + + Item.Values.Add(' lRec.rZWord'); + Item.Values.Add(' gRec.rZWord'); + + end + else if (AnsiSameText(sl_Operand, 'MEM512')) or + (AnsiSameText(sl_Operand, 'MEM512_M')) or + (AnsiSameText(sl_Operand, 'MEM512_MZ')) then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otMEM512; + Item.OpActive := true; + + Item.Values.Add('lZWord'); + Item.Values.Add('gZWord'); + Item.Values.Add('clZWord'); + Item.Values.Add('cgZWord'); + + Item.Values.Add('zword lZWord'); + Item.Values.Add('zword gZWord'); + Item.Values.Add('zword clZWord'); + Item.Values.Add('zword cgZWord'); + + Item.Values.Add(' lRec'); + Item.Values.Add(' gRec'); + + Item.Values.Add(' zword lRec'); + Item.Values.Add(' zword gRec'); + + + end + else if AnsiSameText(sl_Operand, 'REG8') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG8; + Item.OpActive := true; + + Item.Values.Add('al'); + end + else if AnsiSameText(sl_Operand, 'REG16') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG16; + Item.OpActive := true; + + Item.Values.Add('ax'); + end + else if AnsiSameText(sl_Operand, 'REG32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG32; + Item.OpActive := true; + + Item.Values.Add('eax'); + end + else if AnsiSameText(sl_Operand, 'REG64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otREG64; + Item.OpActive := true; + + Item.Values.Add('rax'); + end + else if AnsiSameText(sl_Operand, 'RM32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otRM32; + Item.OpActive := true; + + Item.Values.Add('lDWord'); + Item.Values.Add('gDWord'); + end + else if AnsiSameText(sl_Operand, 'RM64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otRM64; + Item.OpActive := true; + + Item.Values.Add('lQWord'); + Item.Values.Add('gQWord'); + end + else if AnsiSameText(sl_Operand, 'IMM8') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otIMM8; + Item.OpActive := true; + + Item.Values.Add('0'); + end + else if AnsiSameText(sl_Operand, 'XMEM32') or + AnsiSameText(sl_Operand, 'XMEM32_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMEM32; + Item.OpActive := true; + end + else if AnsiSameText(sl_Operand, 'XMEM64') or + AnsiSameText(sl_Operand, 'XMEM64_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otXMEM64; + Item.OpActive := true; + end + else if AnsiSameText(sl_Operand, 'YMEM32') or + AnsiSameText(sl_Operand, 'YMEM32_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otYMEM32; + Item.OpActive := true; + end + else if AnsiSameText(sl_Operand, 'YMEM64') or + AnsiSameText(sl_Operand, 'YMEM64_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otYMEM64; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'yword '; + + end + else if AnsiSameText(sl_Operand, 'ZMEM32') or + AnsiSameText(sl_Operand, 'ZMEM32_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMEM32; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + end + else if AnsiSameText(sl_Operand, 'ZMEM64') or + AnsiSameText(sl_Operand, 'ZMEM64_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otZMEM64; + Item.OpActive := true; + + if UsePrefix then sl_Prefix := 'zword '; + + end + else if AnsiSameText(sl_Operand, '2B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + Item.Values.Add('lDWord {1to2}'); + Item.Values.Add('gDWord {1to2}'); + end + else if AnsiSameText(sl_Operand, '4B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + Item.Values.Add('lDWord {1to4}'); + Item.Values.Add('gDWord {1to4}'); + end + else if AnsiSameText(sl_Operand, '8B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + Item.Values.Add('lDWord {1to8}'); + Item.Values.Add('gDWord {1to8}'); + end + else if AnsiSameText(sl_Operand, '16B32') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB32; + Item.OpActive := true; + + Item.Values.Add('lDWord {1to16}'); + Item.Values.Add('gDWord {1to16}'); + end + else if AnsiSameText(sl_Operand, '2B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + Item.Values.Add('lQWord {1to2}'); + Item.Values.Add('gQWord {1to2}'); + end + else if AnsiSameText(sl_Operand, '4B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + Item.Values.Add('lQWord {1to4}'); + Item.Values.Add('gQWord {1to4}'); + end + else if AnsiSameText(sl_Operand, '8B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + Item.Values.Add('lQWord {1to8}'); + Item.Values.Add('gQWord {1to8}'); + end + else if AnsiSameText(sl_Operand, '16B64') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otB64; + Item.OpActive := true; + + Item.Values.Add('lQWord {1to16}'); + Item.Values.Add('gQWord {1to16}'); + end + else if AnsiSameText(sl_Operand, 'KREG') or + AnsiSameText(sl_Operand, 'KREG_M') then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otKREG; + Item.OpActive := true; + + Item.Values.Add('k1'); + end + else if trim(sl_Operand) = '' then + begin + Item.OpNumber := il_Op; + Item.OpTyp := otUnknown; + Item.OpActive := false; + Item.Values.Add(''); end + else + begin + Item.OpNumber := il_Op; + Item.OpTyp := otUnknown; + Item.OpActive := false; + + Item.Values.Add('?' + sl_Operand); + end end; @@ -822,11 +3542,16 @@ begin end; end; + constructor TAsmTestGenerator.Create; begin inherited; FX64 := true; + FAVX512 := false; + + FReg8 := TStringList.Create; + FReg16 := TStringList.Create; FReg32Base := TStringList.Create; FReg32Index := TStringList.Create; @@ -836,16 +3561,30 @@ begin FReg6432Index := TStringList.Create; FReg32XMMIndex := TStringList.Create; FReg32YMMIndex := TStringList.Create; + FReg32ZMMIndex := TStringList.Create; FReg64XMMIndex := TStringList.Create; FReg64YMMIndex := TStringList.Create; + FReg64ZMMIndex := TStringList.Create; + FRegKREG := TStringList.Create; + + FReg8.Add('AL'); + FReg8.Add('BL'); + FReg8.Add('CL'); + FReg8.Add('DL'); + + + FReg16.Add('AX'); + FReg16.Add('BX'); + FReg16.Add('CX'); + FReg16.Add('DX'); FReg32Base.Add('EAX'); FReg32Base.Add('EBX'); FReg32Base.Add('ECX'); FReg32Base.Add('EDX'); - FReg32Base.Add('ESP'); - FReg32Base.Add('EBP'); + //FReg32Base.Add('ESP'); + //FReg32Base.Add('EBP'); FReg32Base.Add('EDI'); FReg32Base.Add('ESI'); @@ -854,7 +3593,7 @@ begin FReg32Index.Add('EBX'); FReg32Index.Add('ECX'); FReg32Index.Add('EDX'); - FReg32Index.Add('EBP'); + //FReg32Index.Add('EBP'); FReg32Index.Add('EDI'); FReg32Index.Add('ESI'); @@ -863,8 +3602,8 @@ begin FReg64Base.Add('RBX'); FReg64Base.Add('RCX'); FReg64Base.Add('RDX'); - FReg64Base.Add('RSP'); - FReg64Base.Add('RBP'); + //FReg64Base.Add('RSP'); + //FReg64Base.Add('RBP'); FReg64Base.Add('RDI'); FReg64Base.Add('RSI'); FReg64Base.Add('R8'); @@ -880,7 +3619,7 @@ begin FReg64Index.Add('RBX'); FReg64Index.Add('RCX'); FReg64Index.Add('RDX'); - FReg64Index.Add('RBP'); + //FReg64Index.Add('RBP'); FReg64Index.Add('RDI'); FReg64Index.Add('RSI'); FReg64Index.Add('R8'); @@ -897,7 +3636,7 @@ begin FReg6432Base.Add('ECX'); FReg6432Base.Add('EDX'); FReg6432Base.Add('ESP'); - FReg6432Base.Add('EBP'); + //FReg6432Base.Add('EBP'); FReg6432Base.Add('EDI'); FReg6432Base.Add('ESI'); FReg6432Base.Add('R8D'); @@ -913,7 +3652,7 @@ begin FReg6432Index.Add('EBX'); FReg6432Index.Add('ECX'); FReg6432Index.Add('EDX'); - FReg6432Index.Add('EBP'); + //FReg6432Index.Add('EBP'); FReg6432Index.Add('EDI'); FReg6432Index.Add('ESI'); FReg6432Index.Add('R8D'); @@ -943,6 +3682,16 @@ begin FReg32YMMIndex.ADD('YMM6'); FReg32YMMIndex.ADD('YMM7'); + FReg32ZMMIndex.ADD('ZMM0'); + FReg32ZMMIndex.ADD('ZMM1'); + FReg32ZMMIndex.ADD('ZMM2'); + FReg32ZMMIndex.ADD('ZMM3'); + FReg32ZMMIndex.ADD('ZMM4'); + FReg32ZMMIndex.ADD('ZMM5'); + FReg32ZMMIndex.ADD('ZMM6'); + FReg32ZMMIndex.ADD('ZMM7'); + + FReg64XMMIndex.ADD('XMM0'); FReg64XMMIndex.ADD('XMM1'); FReg64XMMIndex.ADD('XMM2'); @@ -978,10 +3727,55 @@ begin FReg64YMMIndex.ADD('YMM14'); FReg64YMMIndex.ADD('YMM15'); + FReg64ZMMIndex.ADD('ZMM0'); + FReg64ZMMIndex.ADD('ZMM1'); + FReg64ZMMIndex.ADD('ZMM2'); + FReg64ZMMIndex.ADD('ZMM3'); + FReg64ZMMIndex.ADD('ZMM4'); + FReg64ZMMIndex.ADD('ZMM5'); + FReg64ZMMIndex.ADD('ZMM6'); + FReg64ZMMIndex.ADD('ZMM7'); + FReg64ZMMIndex.ADD('ZMM8'); + FReg64ZMMIndex.ADD('ZMM9'); + FReg64ZMMIndex.ADD('ZMM10'); + FReg64ZMMIndex.ADD('ZMM11'); + FReg64ZMMIndex.ADD('ZMM12'); + FReg64ZMMIndex.ADD('ZMM13'); + FReg64ZMMIndex.ADD('ZMM14'); + FReg64ZMMIndex.ADD('ZMM15'); + FReg64ZMMIndex.ADD('ZMM16'); + FReg64ZMMIndex.ADD('ZMM17'); + FReg64ZMMIndex.ADD('ZMM18'); + FReg64ZMMIndex.ADD('ZMM19'); + FReg64ZMMIndex.ADD('ZMM20'); + FReg64ZMMIndex.ADD('ZMM21'); + FReg64ZMMIndex.ADD('ZMM22'); + FReg64ZMMIndex.ADD('ZMM23'); + FReg64ZMMIndex.ADD('ZMM24'); + FReg64ZMMIndex.ADD('ZMM25'); + FReg64ZMMIndex.ADD('ZMM26'); + FReg64ZMMIndex.ADD('ZMM27'); + FReg64ZMMIndex.ADD('ZMM28'); + FReg64ZMMIndex.ADD('ZMM29'); + FReg64ZMMIndex.ADD('ZMM30'); + FReg64ZMMIndex.ADD('ZMM31'); + + FRegKREG.ADD('K0'); + FRegKREG.ADD('K1'); + FRegKREG.ADD('K2'); + FRegKREG.ADD('K3'); + FRegKREG.ADD('K4'); + FRegKREG.ADD('K5'); + FRegKREG.ADD('K6'); + FRegKREG.ADD('K7'); + end; destructor TAsmTestGenerator.Destroy; begin + FreeAndNil(FReg8); + FreeAndNil(FReg16); + FreeAndNil(FReg32Base); FreeAndNil(FReg32Index); FreeAndNil(FReg64Base); @@ -991,13 +3785,17 @@ begin FreeAndNil(FReg32XMMIndex); FreeAndNil(FReg32YMMIndex); + FreeAndNil(FReg32ZMMIndex); FreeAndNil(FReg64XMMIndex); FreeAndNil(FReg64YMMIndex); + FreeAndNil(FReg64ZMMIndex); + + FreeAndnil(FRegKREG); inherited; end; -procedure TAsmTestGenerator.MemRegBaseIndexCombi(const aPrefix: String; aSLBaseReg, +procedure TAsmTestGenerator.MemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); var il_Base: integer; @@ -1006,24 +3804,29 @@ begin for il_Base := 0 to aSLBaseReg.Count - 1 do begin - aRList.Add(format(aPrefix + '[%s]', [aSLBaseReg[il_Base]])); + aRList.Add(format(aPrefix + '[%s]%s', [aSLBaseReg[il_Base], aSuffix])); for il_Index := 0 to aSLIndexReg.Count - 1 do begin - aRList.Add(format(aPrefix + '[%s + %s]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + aRList.Add(format(aPrefix + '[%s + %s]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s + $10]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s + $40]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s - $10]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s - $40]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); - aRList.Add(format(aPrefix + '[%s + %s * 2]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 4]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 8]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 2 + 16]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 4 + 32]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 8 + 48]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + aRList.Add(format(aPrefix + '[%s + %s * 2]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 4]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 8]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + + aRList.Add(format(aPrefix + '[%s + %s * 2 + 16]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 4 + 32]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 8 + 64]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); end; end; end; -procedure TAsmTestGenerator.VectorMemRegBaseIndexCombi(const aPrefix: String; +procedure TAsmTestGenerator.VectorMemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList); var il_Base: integer; @@ -1050,20 +3853,20 @@ begin for il_Index := 0 to aSLIndexReg.Count - 1 do begin - aRList.Add(format(aPrefix + '[%s + %s]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + aRList.Add(format(aPrefix + '[%s + %s]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); - aRList.Add(format(aPrefix + '[%s + %s * 2]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 4]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 8]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + aRList.Add(format(aPrefix + '[%s + %s * 2]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 4]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); + aRList.Add(format(aPrefix + '[%s + %s * 8]%s', [aSLBaseReg[il_Base], aSLIndexReg[il_Index], aSuffix])); - aRList.Add(format(aPrefix + '[%s + %s * 2 + 16]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 4 + 32]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s * 8 + 48]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + //aRList.Add(format(aPrefix + '[%s + %s * 2 + 16]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + //aRList.Add(format(aPrefix + '[%s + %s * 4 + 32]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); + //aRList.Add(format(aPrefix + '[%s + %s * 8 + 48]', [aSLBaseReg[il_Base], aSLIndexReg[il_Index]])); - aRList.Add(format(aPrefix + '[%s + %s]', [aSLIndexReg[il_Index], aSLBaseReg[il_Base]])); + aRList.Add(format(aPrefix + '[%s + %s]%s', [aSLIndexReg[il_Index], aSLBaseReg[il_Base], aSuffix])); - aRList.Add(format(aPrefix + '[%s + %s + 16]', [aSLIndexReg[il_Index], aSLBaseReg[il_Base]])); + //aRList.Add(format(aPrefix + '[%s + %s + 16]', [aSLIndexReg[il_Index], aSLBaseReg[il_Base]])); end; end; end; @@ -1077,6 +3880,7 @@ begin try Fx64 := aX64; + sl := InternalCalcTestData(aInst, aOp1, aOp2, aOp3, aOp4); try aSL.AddStrings(sl); @@ -1088,4 +3892,239 @@ begin end; end; +class procedure TAsmTestGenerator.CalcTestDataMREF(aX64: boolean; const aInst, aOp1, aOp2, aOp3, + aOp4: String; aSL: TStringList); +var + sl: TStringList; +begin + with TAsmTestGenerator.Create do + try + Fx64 := aX64; + + + sl := InternalCalcTestDataMREF(aInst, aOp1, aOp2, aOp3, aOp4); + try + aSL.AddStrings(sl); + finally + FreeAndNil(sl); + end; + finally + Free; + end; +end; + + + +class procedure TAsmTestGenerator.CalcTestInstFile; +var + i,j: integer; + sInst: string; + sI386: string; + sX8664: string; + sAVX512: string; + sOperands: string; + + sLine: string; + + + sl: TStringList; + bVEX: boolean; + bEVEX: boolean; + b256 : boolean; + b512 : boolean; +begin + sl := TStringList.Create; + try + + //tinsentry=packed record + // opcode : tasmop; + // ops : byte; + // //optypes : array[0..max_operands-1] of longint; + // optypes : array[0..3] of int64; //TG + // code : array[0..11] of char; + // flags : tinsflags; + //end; + + for i := 0 to length(InsTab) - 1 do + begin + bVEX := false; + bEVEX := false; + b256 := false; + b512 := false; + + //TG TODO delete + if instab[i].opcode = a_vtestps then + begin + b512 := b512; + end; + + for j := 0 to length(InsTab[i].code) - 1 do + begin + case ord(InsTab[i].code[j]) of + 0: break; + 1,2,3: break; + 232: bEVEX := true; + 233: b512 := true; + 242: bVEX := true; + 244: b256 := true; + end; + end; + + if bVEX or bEVEX or + (InsTab[i].optypes[0] = OT_XMMREG) or + (InsTab[i].optypes[0] = OT_XMMRM) or + (InsTab[i].optypes[0] = OT_YMMREG) or + (InsTab[i].optypes[0] = OT_YMMRM) or + + (InsTab[i].optypes[1] = OT_XMMREG) or + (InsTab[i].optypes[1] = OT_XMMRM) or + (InsTab[i].optypes[1] = OT_YMMREG) or + (InsTab[i].optypes[1] = OT_YMMRM) or + + (InsTab[i].optypes[2] = OT_XMMREG) or + (InsTab[i].optypes[2] = OT_XMMRM) or + (InsTab[i].optypes[2] = OT_YMMREG) or + (InsTab[i].optypes[2] = OT_YMMRM) or + + (InsTab[i].optypes[3] = OT_XMMREG) or + (InsTab[i].optypes[3] = OT_XMMRM) or + (InsTab[i].optypes[3] = OT_YMMREG) or + (InsTab[i].optypes[3] = OT_YMMRM) + + then + begin + sInst := std_op2str[InsTab[i].opcode]; + sI386 := '1'; + sX8664 := '1'; + if IF_X86_64 in InsTab[i].flags then + begin + sI386 := '0'; + end; + + sOperands := ''; + for j := 0 to 3 do + begin + case InsTab[i].optypes[j] of + OT_XMMREG: sOperands := sOperands + 'XMMREG,'; + OT_XMMRM: sOperands := sOperands + 'XMMRM,'; + + OT_YMMREG: sOperands := sOperands + 'YMMREG,'; + OT_YMMRM: sOperands := sOperands + 'YMMRM,'; + + + + OT_MEM32: sOperands := sOperands + 'MEM32,'; + OT_MEM64: sOperands := sOperands + 'MEM64,'; + OT_MEM128: sOperands := sOperands + 'MEM128,'; + OT_MEM256: sOperands := sOperands + 'MEM256,'; + + + OT_REG32: sOperands := sOperands + 'REG32,'; + OT_REG64: sOperands := sOperands + 'REG64,'; + ot_rm_gpr or ot_bits32: + sOperands := sOperands + 'RM32,'; + ot_rm_gpr or ot_bits64: + sOperands := sOperands + 'RM64,'; + + OT_XMEM32: sOperands := sOperands + 'XMEM32,'; + OT_XMEM64: sOperands := sOperands + 'XMEM64,'; + + OT_YMEM32: sOperands := sOperands + 'YMEM32,'; + OT_YMEM64: sOperands := sOperands + 'YMEM64,'; + + OT_IMM8: sOperands := sOperands + 'IMM8,'; + OT_NONE: sOperands := sOperands + ','; + + + + + else sOperands := sOperands; + end; + end; + + sOperands := copy(sOperands, 1, length(sOperands) - 1); + + sl.Add(format('FOpCodeList.Add(''%s,%s,%s,%s'');', [sInst, sI386, sX8664, sOperands])); + end; + + end; + + sl.Savetofile('/tmp/fpcavx.txt'); + + // std_op2str + + finally + FreeAndnil(sl); + end; +end; + +class procedure TAsmTestGenerator.ListMemRefState; +var + i: integer; + sGasSufffix: string; + mrsize: TMemRefSizeInfo; + opcode: tasmop; + sl: TStringList; + slEmpty: TStringList; +begin + BuildInsTabCache; + BuildInsTabMemRefSizeInfoCache; + + slEmpty := TStringList.Create; + try + for mrsize := low(TMemRefSizeInfo) to high(TMemRefSizeInfo) do + begin + + sl := TStringList.Create; + try + for opcode:=low(tasmop) to high(tasmop) do + begin + if InsTabMemRefSizeInfoCache^[opcode].MemRefSize = mrsize then + begin + sGasSufffix:=''; + if gas_needsuffix[opcode] <> AttSufNone then + sGasSufffix:=GetEnumName(Typeinfo(TAttSuffix), ord(gas_needsuffix[opcode])); + + sl.add(format('%-25s: %s: %s', [GetEnumName(Typeinfo(TMemRefSizeInfo), ord(mrsize)), std_op2str[opcode], sGasSufffix])); + end; + end; + + sl.Sort; + + if sl.Count > 0 then + begin + writeln; + + writeln(sl.text); + end + else slEmpty.Add(GetEnumName(Typeinfo(TMemRefSizeInfo), ord(mrsize))); + + + finally + FreeAndNil(sl); + end; + end; + + slEmpty.Sort; + writeln(''); + writeln(slEmpty.Text); + finally + FreeAndNil(slEmpty); + end; + + if assigned(instabcache) then + begin + dispose(instabcache); + instabcache:=nil; + end; + + if assigned(InsTabMemRefSizeInfoCache) then + begin + dispose(InsTabMemRefSizeInfoCache); + InsTabMemRefSizeInfoCache:=nil; + end; + + +end; + end. diff --git a/fixes_3_2/tests/utils/avx/avxopcodes.pas b/fixes_3_2/tests/utils/avx/avxopcodes.pas index bae89e0ec0..f58a62e552 100644 --- a/fixes_3_2/tests/utils/avx/avxopcodes.pas +++ b/fixes_3_2/tests/utils/avx/avxopcodes.pas @@ -8,7 +8,9 @@ uses Classes; type - TTestFileTyp = (tfNasm, tfFPC, tfFasm); + TTestFileTyp = (tfNasm, tfFPC, tfFasm, tfFPCInc, tfFPCMRef); + + { TAVXTestGenerator } TAVXTestGenerator = class(TObject) private @@ -16,30 +18,41 @@ type protected procedure Init; - function InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean; + function InternalMakeTestFiles(aMRef, aX64: boolean; aDestPath, aFilemask, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean; public constructor Create; destructor Destroy; override; - function MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean; aDestPath: String): boolean; + function MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean; aDestPath, aFilemask: String): boolean; + procedure ListMemRefState; +// function MakeTestFilesMREF(aTyp: TTestFileTyp; aX64, aAVX512, aSAE: boolean; aDestPath: String): boolean; property OpCodeList: TStringList read FOpCodeList write FOpCodeList; end; implementation -uses SysUtils, AsmTestGenerator; +uses SysUtils, AsmTestGenerator, Dialogs; { TAVXTestGenerator } constructor TAVXTestGenerator.Create; +var + i: integer; begin inherited; FOpCodeList := TStringList.Create; + FOpCodeList.Duplicates := dupIgnore; + FOpCodeList.Sorted := true; Init; + + + FOpCodeList.Sorted := false; + for i := 0 to FOpCodeList.Count - 1 do + FOpCodeList[i] := AnsiLowerCase(FOpCodeList[i]); end; destructor TAVXTestGenerator.Destroy; @@ -51,768 +64,1979 @@ end; procedure TAVXTestGenerator.Init; begin - FOpCodeList.Add('VADDPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VADDPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VADDPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VADDPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VADDSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VADDSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VADDSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VADDSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VAESDEC,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VAESDECLAST,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VAESENC,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VAESENCLAST,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VAESIMC,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VAESKEYGENASSIST,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VANDNPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VANDNPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VANDNPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VANDNPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VANDPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VANDPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VANDPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VANDPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VBLENDPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VBLENDPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VBLENDPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VBLENDPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VBLENDVPD,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); - FOpCodeList.Add('VBLENDVPD,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); - FOpCodeList.Add('VBLENDVPS,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); - FOpCodeList.Add('VBLENDVPS,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); - FOpCodeList.Add('VBROADCASTF128,1,1,YMMREG,MEM128,,'); - FOpCodeList.Add('VBROADCASTSD,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VBROADCASTSS,1,1,YMMREG,MEM32,,'); - FOpCodeList.Add('VBROADCASTSS,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VCMPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VCMPPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VCMPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VCMPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,MEM64,IMM8'); - FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,XMMREG,IMM8'); - FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,MEM64,IMM8'); - FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); - FOpCodeList.Add('VCOMISD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VCOMISD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VCOMISS,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VCOMISS,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VCVTDQ2PD,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTDQ2PS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTDQ2PS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTPS2DQ,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTPS2DQ,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VCVTPS2PD,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTSD2SI,1,1,REG32,MEM64,,'); - FOpCodeList.Add('VCVTSD2SI,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VCVTSD2SI,0,1,REG64,MEM64,,'); - FOpCodeList.Add('VCVTSD2SI,0,1,REG64,XMMREG,,'); - FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VCVTSI2SD,1,1,XMMREG,XMMREG,RM32,'); - FOpCodeList.Add('VCVTSI2SD,0,1,XMMREG,XMMREG,RM64,'); - FOpCodeList.Add('VCVTSI2SS,1,1,XMMREG,XMMREG,RM32,'); - FOpCodeList.Add('VCVTSI2SS,0,1,XMMREG,XMMREG,RM64,'); - FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VCVTSS2SI,1,1,REG32,MEM32,,'); - FOpCodeList.Add('VCVTSS2SI,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VCVTSS2SI,0,1,REG64,MEM32,,'); - FOpCodeList.Add('VCVTSS2SI,0,1,REG64,XMMREG,,'); - FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTTPS2DQ,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VCVTTPS2DQ,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,MEM64,,'); - FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,MEM64,,'); - FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,XMMREG,,'); - FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,MEM32,,'); - FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,MEM32,,'); - FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,XMMREG,,'); - FOpCodeList.Add('VDIVPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VDIVPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VDIVPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VDIVPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VDPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VDPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VDPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VEXTRACTF128,1,1,XMMRM,YMMREG,IMM8,'); - FOpCodeList.Add('VEXTRACTPS,1,1,RM32,XMMREG,IMM8,'); - FOpCodeList.Add('VHADDPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VHADDPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VHADDPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VHADDPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VHSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VHSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VHSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VHSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VINSERTF128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,MEM32,IMM8'); - FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); - FOpCodeList.Add('VLDDQU,1,1,XMMREG,MEM128,,'); - FOpCodeList.Add('VLDDQU,1,1,YMMREG,MEM256,,'); - FOpCodeList.Add('VLDMXCSR,1,1,MEM32,,,'); - FOpCodeList.Add('VMASKMOVDQU,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VMASKMOVPD,1,1,MEM256,YMMREG,YMMREG,'); - FOpCodeList.Add('VMASKMOVPD,1,1,MEM128,XMMREG,XMMREG,'); - FOpCodeList.Add('VMASKMOVPD,1,1,YMMREG,YMMREG,MEM256,'); - FOpCodeList.Add('VMASKMOVPD,1,1,XMMREG,XMMREG,MEM128,'); - FOpCodeList.Add('VMASKMOVPS,1,1,MEM256,YMMREG,YMMREG,'); - FOpCodeList.Add('VMASKMOVPS,1,1,MEM128,XMMREG,XMMREG,'); - FOpCodeList.Add('VMASKMOVPS,1,1,YMMREG,YMMREG,MEM256,'); - FOpCodeList.Add('VMASKMOVPS,1,1,XMMREG,XMMREG,MEM128,'); - FOpCodeList.Add('VMAXPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMAXPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMAXPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMAXPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMINPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMINPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMINPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMINPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVAPD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVAPD,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVAPD,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVAPD,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMOVAPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVAPS,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVAPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVAPS,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMOVD,1,1,XMMREG,RM32,,'); - FOpCodeList.Add('VMOVD,1,1,RM32,XMMREG,,'); - FOpCodeList.Add('VMOVDDUP,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VMOVDQA,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMOVDQA,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVDQA,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVDQA,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVDQU,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVDQU,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVDQU,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVDQU,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMOVHLPS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVHPD,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVHPD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMOVHPS,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMOVHPS,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVLHPS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVLPD,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVLPD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMOVLPS,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVLPS,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMOVMSKPD,1,1,REG32,YMMREG,,'); - FOpCodeList.Add('VMOVMSKPD,1,1,REG64,XMMREG,,'); - FOpCodeList.Add('VMOVMSKPD,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VMOVMSKPD,1,1,REG64,YMMREG,,'); - FOpCodeList.Add('VMOVMSKPS,1,1,REG32,YMMREG,,'); - FOpCodeList.Add('VMOVMSKPS,1,1,REG64,XMMREG,,'); - FOpCodeList.Add('VMOVMSKPS,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VMOVMSKPS,1,1,REG64,YMMREG,,'); - FOpCodeList.Add('VMOVNTDQ,1,1,MEM128,XMMREG,,'); - FOpCodeList.Add('VMOVNTDQ,1,1,MEM256,YMMREG,,'); - FOpCodeList.Add('VMOVNTDQA,1,1,XMMREG,MEM128,,'); - FOpCodeList.Add('VMOVNTPD,1,1,MEM256,YMMREG,,'); - FOpCodeList.Add('VMOVNTPD,1,1,MEM128,XMMREG,,'); - FOpCodeList.Add('VMOVNTPS,1,1,MEM128,YMMREG,,'); - FOpCodeList.Add('VMOVNTPS,1,1,MEM128,XMMREG,,'); - FOpCodeList.Add('VMOVQ,0,1,RM64,XMMREG,,'); - FOpCodeList.Add('VMOVQ,0,1,XMMREG,RM64,,'); - FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVSD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVSD,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVSHDUP,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVSHDUP,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVSLDUP,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVSLDUP,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVSS,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMOVSS,1,1,MEM64,XMMREG,,'); - FOpCodeList.Add('VMOVUPD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVUPD,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVUPD,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVUPD,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMOVUPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VMOVUPS,1,1,XMMRM,XMMREG,,'); - FOpCodeList.Add('VMOVUPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VMOVUPS,1,1,YMMRM,YMMREG,,'); - FOpCodeList.Add('VMPSADBW,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VMULPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMULPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMULPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VMULPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VORPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VORPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VORPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPABSB,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPABSB,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VPABSD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPABSD,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VPABSW,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPABSW,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VPACKSSDW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPACKSSDW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPACKSSWB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPACKSSWB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPACKUSDW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPACKUSDW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPACKUSWB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPACKUSWB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDUSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDUSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDUSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDUSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPADDW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPADDW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPALIGNR,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VPALIGNR,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VPAND,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPAND,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPANDN,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPANDN,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPAVGB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPAVGB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPAVGW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPAVGW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPBLENDVB,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); - FOpCodeList.Add('VPBLENDVB,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); - FOpCodeList.Add('VPBLENDW,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VPBLENDW,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VPCMPEQB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPEQB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPEQD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPEQD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPEQQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPEQQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPEQW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPEQW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPESTRI,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPCMPESTRM,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPCMPGTB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPGTB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPGTD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPGTD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPGTQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPGTQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPGTW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPCMPGTW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPCMPISTRI,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPCMPISTRM,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPERM2F128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPEXTRB,1,1,REG32,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRB,1,1,REG64,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRB,1,1,MEM8,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRD,1,1,RM32,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRQ,0,1,RM64,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRW,1,1,MEM16,XMMREG,IMM8,'); - FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,'); - FOpCodeList.Add('VPHADDD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHADDD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPHADDSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHADDSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPHADDW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHADDW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPHMINPOSUW,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPHSUBD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHSUBD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPHSUBSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHSUBSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPHSUBW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPHSUBW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,REG32,IMM8'); - FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,MEM8,IMM8'); - FOpCodeList.Add('VPINSRD,1,1,XMMREG,XMMREG,RM32,IMM8'); - FOpCodeList.Add('VPINSRQ,0,1,XMMREG,XMMREG,RM64,IMM8'); - FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,REG32,IMM8'); - FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,MEM16,IMM8'); - FOpCodeList.Add('VPMADDUBSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMADDUBSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMADDWD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMADDWD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXSD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXSD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXUB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXUB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXUD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXUD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMAXUW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMAXUW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINSD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINSD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINUB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINUB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINUD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINUD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMINUW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMINUW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMOVMSKB,1,1,REG64,XMMREG,,'); - FOpCodeList.Add('VPMOVMSKB,1,1,REG64,YMMREG,,'); - FOpCodeList.Add('VPMOVMSKB,1,1,REG32,XMMREG,,'); - FOpCodeList.Add('VPMOVMSKB,1,1,REG32,YMMREG,,'); - FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,MEM16,,'); - FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXBW,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXDQ,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,MEM16,,'); - FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXBW,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXDQ,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXWD,1,1,YMMREG,XMMRM,,'); - FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPMULDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULHRSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULHRSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULHUW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULHUW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULHW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULHW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULLD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULLD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULLW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULLW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPMULUDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPMULUDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPOR,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPOR,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSADBW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSADBW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSHUFB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSHUFB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSHUFD,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPSHUFD,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPSHUFHW,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPSHUFHW,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPSHUFLW,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VPSHUFLW,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPSIGNB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSIGNB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSIGND,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSIGND,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSIGNW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSIGNW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLDQ,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSLLDQ,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLDQ,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRLDQ,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,IMM8,'); - FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,IMM8,'); - FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBUSB,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBUSB,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBUSW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBUSW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSUBW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSUBW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VPUNPCKHBW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKHBW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKHDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKHDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKHQDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKHQDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKHWD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKHWD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKLBW,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKLBW,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKLDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKLDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKLQDQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKLQDQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPUNPCKLWD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPUNPCKLWD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPXOR,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPXOR,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VRCPPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VRCPPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VROUNDPD,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VROUNDPD,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VROUNDPS,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VROUNDPS,1,1,XMMREG,XMMRM,IMM8,'); - FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,MEM64,IMM8'); - FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,XMMREG,IMM8'); - FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,MEM32,IMM8'); - FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); - FOpCodeList.Add('VRSQRTPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VRSQRTPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VSHUFPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VSHUFPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VSHUFPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VSHUFPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VSQRTPD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VSQRTPD,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VSQRTPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VSQRTPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VSTMXCSR,1,1,MEM32,,,'); - FOpCodeList.Add('VSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,MEM64,'); - FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,MEM32,'); - FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,XMMREG,'); - FOpCodeList.Add('VTESTPD,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VTESTPD,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VTESTPS,1,1,YMMREG,YMMRM,,'); - FOpCodeList.Add('VTESTPS,1,1,XMMREG,XMMRM,,'); - FOpCodeList.Add('VUCOMISD,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VUCOMISD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VUCOMISS,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VUCOMISS,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VUNPCKHPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VUNPCKHPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VUNPCKHPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VUNPCKHPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VUNPCKLPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VUNPCKLPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VUNPCKLPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VUNPCKLPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VXORPD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VXORPD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VXORPS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VXORPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VZEROALL,1,1,,,,'); - FOpCodeList.Add('VZEROUPPER,1,1,,,,'); - - - FOpCodeList.Add('VBROADCASTI128,1,1,YMMREG,MEM128,,'); - FOpCodeList.Add('VEXTRACTI128,1,1,XMMRM,YMMREG,IMM8,'); - FOpCodeList.Add('VINSERTI128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VPBLENDD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VPBLENDD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); - FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,MEM8,,'); - FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,MEM8,,'); - FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,MEM32,,'); - FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,MEM32,,'); - FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,MEM64,,'); - FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,MEM64,,'); - FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,MEM16,,'); - FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,XMMREG,,'); - FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,MEM16,,'); - FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,XMMREG,,'); - FOpCodeList.Add('VPERM2I128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); - FOpCodeList.Add('VPERMD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPERMPD,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPERMPS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPERMQ,1,1,YMMREG,YMMRM,IMM8,'); - FOpCodeList.Add('VPMASKMOVD,1,1,XMMREG,XMMREG,MEM128,'); - FOpCodeList.Add('VPMASKMOVD,1,1,MEM128,XMMREG,XMMREG,'); - FOpCodeList.Add('VPMASKMOVD,1,1,YMMREG,YMMREG,MEM256,'); - FOpCodeList.Add('VPMASKMOVD,1,1,MEM256,YMMREG,YMMREG,'); - FOpCodeList.Add('VPMASKMOVQ,1,1,XMMREG,XMMREG,MEM128,'); - FOpCodeList.Add('VPMASKMOVQ,1,1,MEM128,XMMREG,XMMREG,'); - FOpCodeList.Add('VPMASKMOVQ,1,1,YMMREG,YMMREG,MEM256,'); - FOpCodeList.Add('VPMASKMOVQ,1,1,MEM256,YMMREG,YMMREG,'); - FOpCodeList.Add('VPSLLVD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSLLVD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSLLVQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSLLVQ,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRAVD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSRAVD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLVD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSRLVD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VPSRLVQ,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VPSRLVQ,1,1,XMMREG,XMMREG,XMMRM,'); - - - FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD231SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD132SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD213SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADD231SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMADDSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMADDSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUBADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUBADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD132SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD213SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD231SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD132SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD213SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMADD231SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); - FOpCodeList.Add('VFNMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,'); - FOpCodeList.Add('VFNMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,'); - - - FOpCodeList.Add('VGATHERDPD,1,1,XMMREG,XMEM32,XMMREG,'); - FOpCodeList.Add('VGATHERDPD,1,1,YMMREG,XMEM32,YMMREG,'); - - FOpCodeList.Add('VGATHERQPD,1,1,XMMREG,XMEM64,XMMREG,'); - FOpCodeList.Add('VGATHERQPD,1,1,YMMREG,YMEM64,YMMREG,'); - - - FOpCodeList.Add('VGATHERDPS,1,1,XMMREG,XMEM32,XMMREG,'); - FOpCodeList.Add('VGATHERDPS,1,1,YMMREG,YMEM32,YMMREG,'); - - FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,XMEM64,XMMREG,'); - FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,YMEM64,XMMREG,'); - - - - FOpCodeList.Add('VPGATHERDD,1,1,XMMREG,XMEM32,XMMREG,'); - FOpCodeList.Add('VPGATHERDD,1,1,YMMREG,YMEM32,YMMREG,'); - - FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,XMEM64,XMMREG,'); - FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,YMEM64,XMMREG,'); - - - FOpCodeList.Add('VPGATHERDQ,1,1,XMMREG,XMEM32,XMMREG,'); - FOpCodeList.Add('VPGATHERDQ,1,1,YMMREG,XMEM32,YMMREG,'); - - FOpCodeList.Add('VPGATHERQQ,1,1,XMMREG,XMEM64,XMMREG,'); - FOpCodeList.Add('VPGATHERQQ,1,1,YMMREG,YMEM64,YMMREG,'); - + //FOpCodeList.Add('VADDPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VADDPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VADDPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VADDPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VADDSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VADDSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VADDSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VADDSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VADDSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VADDSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VAESDEC,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VAESDECLAST,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VAESENC,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VAESENCLAST,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VAESIMC,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VAESKEYGENASSIST,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VANDNPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VANDNPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VANDNPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VANDNPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VANDPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VANDPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VANDPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VANDPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VBLENDPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VBLENDPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VBLENDPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VBLENDPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VBLENDVPD,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + //FOpCodeList.Add('VBLENDVPD,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + //FOpCodeList.Add('VBLENDVPS,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + //FOpCodeList.Add('VBLENDVPS,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + //FOpCodeList.Add('VBROADCASTF128,1,1,YMMREG,MEM128,,'); + //FOpCodeList.Add('VBROADCASTSD,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VBROADCASTSS,1,1,YMMREG,MEM32,,'); + //FOpCodeList.Add('VBROADCASTSS,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VCMPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VCMPPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VCMPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VCMPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,MEM64,IMM8'); + //FOpCodeList.Add('VCMPSD,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + //FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,MEM64,IMM8'); + //FOpCodeList.Add('VCMPSS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + //FOpCodeList.Add('VCOMISD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VCOMISD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VCOMISS,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VCOMISS,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VCVTDQ2PD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VCVTDQ2PD,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTDQ2PS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTDQ2PS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTPD2DQ,1,1,XMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTPD2PS,1,1,XMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTPS2DQ,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTPS2DQ,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VCVTPS2PD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VCVTPS2PD,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTSD2SI,1,1,REG32,MEM64,,'); + //FOpCodeList.Add('VCVTSD2SI,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VCVTSD2SI,0,1,REG64,MEM64,,'); + //FOpCodeList.Add('VCVTSD2SI,0,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VCVTSD2SS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VCVTSI2SD,1,1,XMMREG,XMMREG,RM32,'); + //FOpCodeList.Add('VCVTSI2SD,0,1,XMMREG,XMMREG,RM64,'); + //FOpCodeList.Add('VCVTSI2SS,1,1,XMMREG,XMMREG,RM32,'); + //FOpCodeList.Add('VCVTSI2SS,0,1,XMMREG,XMMREG,RM64,'); + //FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VCVTSS2SD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VCVTSS2SI,1,1,REG32,MEM32,,'); + //FOpCodeList.Add('VCVTSS2SI,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VCVTSS2SI,0,1,REG64,MEM32,,'); + //FOpCodeList.Add('VCVTSS2SI,0,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTTPD2DQ,1,1,XMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTTPS2DQ,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VCVTTPS2DQ,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,MEM64,,'); + //FOpCodeList.Add('VCVTTSD2SI,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,MEM64,,'); + //FOpCodeList.Add('VCVTTSD2SI,0,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,MEM32,,'); + //FOpCodeList.Add('VCVTTSS2SI,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,MEM32,,'); + //FOpCodeList.Add('VCVTTSS2SI,0,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VDIVPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VDIVPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VDIVPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VDIVPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VDIVSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VDIVSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VDPPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VDPPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VDPPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VEXTRACTF128,1,1,XMMRM,YMMREG,IMM8,'); + //FOpCodeList.Add('VEXTRACTPS,1,1,RM32,XMMREG,IMM8,'); + //FOpCodeList.Add('VHADDPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VHADDPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VHADDPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VHADDPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VHSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VHSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VHSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VHSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VINSERTF128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,MEM32,IMM8'); + //FOpCodeList.Add('VINSERTPS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + //FOpCodeList.Add('VLDDQU,1,1,XMMREG,MEM128,,'); + //FOpCodeList.Add('VLDDQU,1,1,YMMREG,MEM256,,'); + //FOpCodeList.Add('VLDMXCSR,1,1,MEM32,,,'); + //FOpCodeList.Add('VMASKMOVDQU,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VMASKMOVPD,1,1,MEM256,YMMREG,YMMREG,'); + //FOpCodeList.Add('VMASKMOVPD,1,1,MEM128,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMASKMOVPD,1,1,YMMREG,YMMREG,MEM256,'); + //FOpCodeList.Add('VMASKMOVPD,1,1,XMMREG,XMMREG,MEM128,'); + //FOpCodeList.Add('VMASKMOVPS,1,1,MEM256,YMMREG,YMMREG,'); + //FOpCodeList.Add('VMASKMOVPS,1,1,MEM128,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMASKMOVPS,1,1,YMMREG,YMMREG,MEM256,'); + //FOpCodeList.Add('VMASKMOVPS,1,1,XMMREG,XMMREG,MEM128,'); + //FOpCodeList.Add('VMAXPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMAXPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMAXPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMAXPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMAXSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VMAXSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMINPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMINPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMINPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMINPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMINSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VMINSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVAPD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVAPD,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVAPD,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVAPD,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMOVAPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVAPS,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVAPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVAPS,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMOVD,1,1,XMMREG,RM32,,'); + //FOpCodeList.Add('VMOVD,1,1,RM32,XMMREG,,'); + //FOpCodeList.Add('VMOVDDUP,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VMOVDDUP,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VMOVDQA,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMOVDQA,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVDQA,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVDQA,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVDQU,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVDQU,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVDQU,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVDQU,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMOVHLPS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVHPD,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVHPD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMOVHPS,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMOVHPS,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVLHPS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVLPD,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVLPD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMOVLPS,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVLPS,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMOVMSKPD,1,1,REG32,YMMREG,,'); + //FOpCodeList.Add('VMOVMSKPD,1,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VMOVMSKPD,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VMOVMSKPD,1,1,REG64,YMMREG,,'); + //FOpCodeList.Add('VMOVMSKPS,1,1,REG32,YMMREG,,'); + //FOpCodeList.Add('VMOVMSKPS,1,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VMOVMSKPS,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VMOVMSKPS,1,1,REG64,YMMREG,,'); + //FOpCodeList.Add('VMOVNTDQ,1,1,MEM128,XMMREG,,'); + //FOpCodeList.Add('VMOVNTDQ,1,1,MEM256,YMMREG,,'); + //FOpCodeList.Add('VMOVNTDQA,1,1,XMMREG,MEM128,,'); + //FOpCodeList.Add('VMOVNTPD,1,1,MEM256,YMMREG,,'); + //FOpCodeList.Add('VMOVNTPD,1,1,MEM128,XMMREG,,'); + //FOpCodeList.Add('VMOVNTPS,1,1,MEM128,YMMREG,,'); + //FOpCodeList.Add('VMOVNTPS,1,1,MEM128,XMMREG,,'); + //FOpCodeList.Add('VMOVQ,0,1,RM64,XMMREG,,'); + //FOpCodeList.Add('VMOVQ,0,1,XMMREG,RM64,,'); + //FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVSD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VMOVSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVSD,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVSHDUP,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVSHDUP,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVSLDUP,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVSLDUP,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVSS,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VMOVSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMOVSS,1,1,MEM64,XMMREG,,'); + //FOpCodeList.Add('VMOVUPD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVUPD,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVUPD,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVUPD,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMOVUPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VMOVUPS,1,1,XMMRM,XMMREG,,'); + //FOpCodeList.Add('VMOVUPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VMOVUPS,1,1,YMMRM,YMMREG,,'); + //FOpCodeList.Add('VMPSADBW,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VMULPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMULPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMULPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VMULPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VMULSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VMULSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VORPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VORPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VORPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPABSB,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPABSB,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VPABSD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPABSD,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VPABSW,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPABSW,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VPACKSSDW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPACKSSDW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPACKSSWB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPACKSSWB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPACKUSDW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPACKUSDW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPACKUSWB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPACKUSWB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDUSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDUSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDUSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDUSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPADDW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPADDW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPALIGNR,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VPALIGNR,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VPAND,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPAND,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPANDN,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPANDN,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPAVGB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPAVGB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPAVGW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPAVGW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPBLENDVB,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + //FOpCodeList.Add('VPBLENDVB,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + //FOpCodeList.Add('VPBLENDW,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VPBLENDW,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VPCLMULQDQ,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VPCMPEQB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPEQB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPEQD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPEQD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPEQQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPEQQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPEQW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPEQW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPESTRI,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPCMPESTRM,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPCMPGTB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPGTB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPGTD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPGTD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPGTQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPGTQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPGTW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPCMPGTW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPCMPISTRI,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPCMPISTRM,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPERM2F128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPERMILPD,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPERMILPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPERMILPS,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPERMILPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPEXTRB,1,1,REG32,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRB,1,1,REG64,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRB,1,1,MEM8,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRD,1,1,RM32,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRQ,0,1,RM64,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRW,1,1,REG64,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRW,1,1,MEM16,XMMREG,IMM8,'); + //FOpCodeList.Add('VPEXTRW,1,1,REG32,XMMREG,IMM8,'); + //FOpCodeList.Add('VPHADDD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHADDD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPHADDSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHADDSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPHADDW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHADDW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPHMINPOSUW,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPHSUBD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHSUBD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPHSUBSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHSUBSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPHSUBW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPHSUBW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,REG32,IMM8'); + //FOpCodeList.Add('VPINSRB,1,1,XMMREG,XMMREG,MEM8,IMM8'); + //FOpCodeList.Add('VPINSRD,1,1,XMMREG,XMMREG,RM32,IMM8'); + //FOpCodeList.Add('VPINSRQ,0,1,XMMREG,XMMREG,RM64,IMM8'); + //FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,REG32,IMM8'); + //FOpCodeList.Add('VPINSRW,1,1,XMMREG,XMMREG,MEM16,IMM8'); + //FOpCodeList.Add('VPMADDUBSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMADDUBSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMADDWD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMADDWD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXSD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXSD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXUB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXUB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXUD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXUD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMAXUW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMAXUW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINSD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINSD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINUB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINUB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINUD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINUD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMINUW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMINUW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMOVMSKB,1,1,REG64,XMMREG,,'); + //FOpCodeList.Add('VPMOVMSKB,1,1,REG64,YMMREG,,'); + //FOpCodeList.Add('VPMOVMSKB,1,1,REG32,XMMREG,,'); + //FOpCodeList.Add('VPMOVMSKB,1,1,REG32,YMMREG,,'); + //FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVSXBD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXBD,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,MEM16,,'); + //FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVSXBQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXBQ,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVSXBW,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXBW,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVSXDQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXDQ,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXWD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVSXWQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVSXWQ,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVZXBD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBD,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,MEM16,,'); + //FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVZXBQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBQ,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVZXBW,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXBW,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVZXDQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXDQ,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVZXWD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXWD,1,1,YMMREG,XMMRM,,'); + //FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VPMOVZXWQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMOVZXWQ,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPMULDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULHRSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULHRSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULHUW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULHUW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULHW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULHW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULLD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULLD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULLW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULLW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPMULUDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPMULUDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPOR,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPOR,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSADBW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSADBW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSHUFB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSHUFB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSHUFD,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPSHUFD,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPSHUFHW,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPSHUFHW,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPSHUFLW,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VPSHUFLW,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPSIGNB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSIGNB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSIGND,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSIGND,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSIGNW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSIGNW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLD,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLDQ,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLDQ,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLQ,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLQ,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSLLW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLW,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRAD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRAD,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRAW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRAW,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLD,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLDQ,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLDQ,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLQ,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,IMM8,'); + //FOpCodeList.Add('VPSRLW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLW,1,1,YMMREG,YMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBUSB,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBUSB,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBUSW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBUSW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSUBW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSUBW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VPTEST,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPTEST,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VPUNPCKHBW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKHBW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKHDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKHDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKHQDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKHQDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKHWD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKHWD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKLBW,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKLBW,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKLDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKLDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKLQDQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKLQDQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPUNPCKLWD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPUNPCKLWD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPXOR,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPXOR,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VRCPPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VRCPPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VRCPSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VROUNDPD,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VROUNDPD,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VROUNDPS,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VROUNDPS,1,1,XMMREG,XMMRM,IMM8,'); + //FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,MEM64,IMM8'); + //FOpCodeList.Add('VROUNDSD,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + //FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,MEM32,IMM8'); + //FOpCodeList.Add('VROUNDSS,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + //FOpCodeList.Add('VRSQRTPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VRSQRTPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VRSQRTSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VSHUFPD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VSHUFPD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VSHUFPS,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VSHUFPS,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VSQRTPD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VSQRTPD,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VSQRTPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VSQRTPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VSQRTSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VSQRTSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VSTMXCSR,1,1,MEM32,,,'); + //FOpCodeList.Add('VSUBPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VSUBPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VSUBPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VSUBPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,MEM64,'); + //FOpCodeList.Add('VSUBSD,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,MEM32,'); + //FOpCodeList.Add('VSUBSS,1,1,XMMREG,XMMREG,XMMREG,'); + //FOpCodeList.Add('VTESTPD,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VTESTPD,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VTESTPS,1,1,YMMREG,YMMRM,,'); + //FOpCodeList.Add('VTESTPS,1,1,XMMREG,XMMRM,,'); + //FOpCodeList.Add('VUCOMISD,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VUCOMISD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VUCOMISS,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VUCOMISS,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VUNPCKHPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VUNPCKHPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VUNPCKHPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VUNPCKHPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VUNPCKLPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VUNPCKLPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VUNPCKLPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VUNPCKLPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VXORPD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VXORPD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VXORPS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VXORPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VZEROALL,1,1,,,,'); + //FOpCodeList.Add('VZEROUPPER,1,1,,,,'); + // + // + //FOpCodeList.Add('VBROADCASTI128,1,1,YMMREG,MEM128,,'); + //FOpCodeList.Add('VEXTRACTI128,1,1,XMMRM,YMMREG,IMM8,'); + //FOpCodeList.Add('VINSERTI128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VPBLENDD,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VPBLENDD,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + //FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTB,1,1,XMMREG,MEM8,,'); + //FOpCodeList.Add('VPBROADCASTB,1,1,YMMREG,MEM8,,'); + //FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,MEM32,,'); + //FOpCodeList.Add('VPBROADCASTD,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTD,1,1,YMMREG,MEM32,,'); + //FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,MEM64,,'); + //FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,MEM64,,'); + //FOpCodeList.Add('VPBROADCASTQ,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTQ,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,MEM16,,'); + //FOpCodeList.Add('VPBROADCASTW,1,1,XMMREG,XMMREG,,'); + //FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,MEM16,,'); + //FOpCodeList.Add('VPBROADCASTW,1,1,YMMREG,XMMREG,,'); + //FOpCodeList.Add('VPERM2I128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + //FOpCodeList.Add('VPERMD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPERMPD,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPERMPS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPERMQ,1,1,YMMREG,YMMRM,IMM8,'); + //FOpCodeList.Add('VPMASKMOVD,1,1,XMMREG,XMMREG,MEM128,'); + //FOpCodeList.Add('VPMASKMOVD,1,1,MEM128,XMMREG,XMMREG,'); + //FOpCodeList.Add('VPMASKMOVD,1,1,YMMREG,YMMREG,MEM256,'); + //FOpCodeList.Add('VPMASKMOVD,1,1,MEM256,YMMREG,YMMREG,'); + //FOpCodeList.Add('VPMASKMOVQ,1,1,XMMREG,XMMREG,MEM128,'); + //FOpCodeList.Add('VPMASKMOVQ,1,1,MEM128,XMMREG,XMMREG,'); + //FOpCodeList.Add('VPMASKMOVQ,1,1,YMMREG,YMMREG,MEM256,'); + //FOpCodeList.Add('VPMASKMOVQ,1,1,MEM256,YMMREG,YMMREG,'); + //FOpCodeList.Add('VPSLLVD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSLLVD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSLLVQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSLLVQ,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRAVD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSRAVD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLVD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSRLVD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VPSRLVQ,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VPSRLVQ,1,1,XMMREG,XMMREG,XMMRM,'); + // + // + //FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD231SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD132SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD213SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADD231SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMADDSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMADDSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUBADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUBADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMADD231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD132SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD213SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD231SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD132SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD213SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMADD231SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB132PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB132PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB213PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB213PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB231PD,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB231PD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB132PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB132PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB213PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB213PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB231PS,1,1,YMMREG,YMMREG,YMMRM,'); + //FOpCodeList.Add('VFNMSUB231PS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB132SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB213SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB231SD,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB132SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB213SS,1,1,XMMREG,XMMREG,XMMRM,'); + //FOpCodeList.Add('VFNMSUB231SS,1,1,XMMREG,XMMREG,XMMRM,'); + // + // + //FOpCodeList.Add('VGATHERDPD,1,1,XMMREG,XMEM32,XMMREG,'); + //FOpCodeList.Add('VGATHERDPD,1,1,YMMREG,XMEM32,YMMREG,'); + // + //FOpCodeList.Add('VGATHERQPD,1,1,XMMREG,XMEM64,XMMREG,'); + //FOpCodeList.Add('VGATHERQPD,1,1,YMMREG,YMEM64,YMMREG,'); + // + // + //FOpCodeList.Add('VGATHERDPS,1,1,XMMREG,XMEM32,XMMREG,'); + //FOpCodeList.Add('VGATHERDPS,1,1,YMMREG,YMEM32,YMMREG,'); + // + //FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,XMEM64,XMMREG,'); + //FOpCodeList.Add('VGATHERQPS,1,1,XMMREG,YMEM64,XMMREG,'); + // + // + // + //FOpCodeList.Add('VPGATHERDD,1,1,XMMREG,XMEM32,XMMREG,'); + //FOpCodeList.Add('VPGATHERDD,1,1,YMMREG,YMEM32,YMMREG,'); + // + //FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,XMEM64,XMMREG,'); + //FOpCodeList.Add('VPGATHERQD,1,1,XMMREG,YMEM64,XMMREG,'); + // + // + //FOpCodeList.Add('VPGATHERDQ,1,1,XMMREG,XMEM32,XMMREG,'); + //FOpCodeList.Add('VPGATHERDQ,1,1,YMMREG,XMEM32,YMMREG,'); + // + //FOpCodeList.Add('VPGATHERQQ,1,1,XMMREG,XMEM64,XMMREG,'); + //FOpCodeList.Add('VPGATHERQQ,1,1,YMMREG,YMEM64,YMMREG,'); + + + FOpCodeList.Add('addpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('addps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('addsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('addss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('addsubpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('addsubps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aesdec,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aesdeclast,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aesenc,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aesenclast,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aesimc,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('aeskeygenassist,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('andn,0,1,REG64,REG64,RM64,'); + FOpCodeList.Add('andn,1,1,REG32,REG32,RM32,'); + FOpCodeList.Add('andnpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('andnps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('andpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('andps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('bextr,0,1,REG64,RM64,REG64,'); + FOpCodeList.Add('bextr,1,1,REG32,RM32,REG32,'); + FOpCodeList.Add('blendpd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('blendps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('blendvpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('blendvps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpeqpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpeqps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpeqsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpeqss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmplepd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpleps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmplesd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpless,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpltpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpltps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpltsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpltss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpneqpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpneqps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpneqsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpneqss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnlepd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnleps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnlesd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnless,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnltpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnltps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnltsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpnltss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpordpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpordps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpordsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpordss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmppd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('cmpps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('cmpsd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('cmpss,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('cmpunordpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpunordps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpunordsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cmpunordss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('comisd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('comiss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvtdq2pd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('cvtdq2pd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('cvtdq2ps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvtpd2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvtpd2pi,1,1,XMMRM,,'); + FOpCodeList.Add('cvtpd2ps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvtpi2pd,1,1,XMMREG,,'); + FOpCodeList.Add('cvtpi2ps,1,1,XMMREG,,'); + FOpCodeList.Add('cvtps2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvtps2pd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('cvtps2pd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('cvtps2pi,1,1,XMMREG,,'); + FOpCodeList.Add('cvtsd2si,0,1,REG64,XMMREG,,'); + FOpCodeList.Add('cvtsd2si,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('cvtsd2ss,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('cvtsd2ss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('cvtsi2sd,0,1,XMMREG,RM64,,'); + FOpCodeList.Add('cvtsi2sd,1,1,XMMREG,RM32,,'); + FOpCodeList.Add('cvtsi2ss,0,1,XMMREG,RM64,,'); + FOpCodeList.Add('cvtsi2ss,1,1,XMMREG,RM32,,'); + FOpCodeList.Add('cvtss2sd,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('cvtss2sd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('cvtss2si,1,1,XMMREG,,'); + FOpCodeList.Add('cvttpd2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvttpd2pi,1,1,XMMRM,,'); + FOpCodeList.Add('cvttps2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('cvttps2pi,1,1,XMMREG,,'); + FOpCodeList.Add('cvttsd2si,1,1,XMMREG,,'); + FOpCodeList.Add('cvttss2si,1,1,XMMREG,,'); + FOpCodeList.Add('divpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('divps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('divsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('divss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('dppd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('dpps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('extractps,1,1,XMMREG,'); + FOpCodeList.Add('extractps,1,1,XMMREG,'); + FOpCodeList.Add('extrq,1,1,XMMREG,'); + FOpCodeList.Add('extrq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('haddpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('haddps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('hsubpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('hsubps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('insertps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('insertq,1,1,XMMREG,XMMREG'); + FOpCodeList.Add('insertq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('lddqu,1,1,XMMREG,,'); + FOpCodeList.Add('maskmovdqu,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('maxpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('maxps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('maxsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('maxss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('minpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('minps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('minsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('minss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movapd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movapd,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movaps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movaps,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movd,1,1,RM32,XMMREG,,'); + FOpCodeList.Add('movd,1,1,XMMREG,RM32,,'); + FOpCodeList.Add('movddup,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movdq2q,1,1,XMMREG,,'); + FOpCodeList.Add('movdqa,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movdqa,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movdqu,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movdqu,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movhlps,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('movhpd,1,1,XMMREG,,'); + FOpCodeList.Add('movhpd,1,1,XMMREG,,'); + FOpCodeList.Add('movhps,1,1,XMMREG,,'); + FOpCodeList.Add('movhps,1,1,XMMREG,,'); + FOpCodeList.Add('movlhps,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('movlpd,1,1,XMMREG,,'); + FOpCodeList.Add('movlpd,1,1,XMMREG,,'); + FOpCodeList.Add('movlps,1,1,XMMREG,,'); + FOpCodeList.Add('movlps,1,1,XMMREG,,'); + FOpCodeList.Add('movmskpd,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('movmskps,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('movntdq,1,1,XMMREG,,'); + FOpCodeList.Add('movntdqa,1,1,XMMREG,,'); + FOpCodeList.Add('movntpd,1,1,XMMREG,,'); + FOpCodeList.Add('movntps,1,1,XMMREG,,'); + FOpCodeList.Add('movntsd,1,1,XMMREG,,'); + FOpCodeList.Add('movntss,1,1,XMMREG,,'); + FOpCodeList.Add('movq,0,1,REG64,XMMREG,,'); + FOpCodeList.Add('movq,0,1,XMMREG,REG64,,'); + FOpCodeList.Add('movq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movq,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movq2dq,1,1,XMMREG,,'); + FOpCodeList.Add('movsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movsd,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movshdup,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movsldup,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movss,1,1,MEM32,XMMREG,,'); + FOpCodeList.Add('movss,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('movss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('movss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('movupd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movupd,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('movups,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('movups,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('mpsadbw,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('mulpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('mulps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('mulsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('mulss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('orpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('orps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pabsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pabsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pabsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('packssdw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('packsswb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('packusdw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('packuswb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddusb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddusw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('paddw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('palignr,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pand,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pandn,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pavgb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pavgw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pblendvb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pblendw,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pcmpeqb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpeqd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpeqq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpeqw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpestri,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pcmpestrm,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pcmpgtb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpgtd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpgtq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpgtw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pcmpistri,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pcmpistrm,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pextrb,1,1,XMMREG,'); + FOpCodeList.Add('pextrb,1,1,XMMREG,'); + FOpCodeList.Add('pextrd,1,1,MEM32,XMMREG,'); + FOpCodeList.Add('pextrd,1,1,REG32,XMMREG,'); + FOpCodeList.Add('pextrq,0,1,MEM64,XMMREG,'); + FOpCodeList.Add('pextrq,0,1,REG64,XMMREG,'); + FOpCodeList.Add('pextrw,1,1,MEM32,XMMREG,'); + FOpCodeList.Add('pextrw,1,1,REG32,XMMREG,'); + FOpCodeList.Add('phaddd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phaddsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phaddw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phminposuw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phsubd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phsubsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('phsubw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pinsrb,1,1,XMMREG,'); + FOpCodeList.Add('pinsrb,1,1,XMMREG,'); + FOpCodeList.Add('pinsrd,1,1,XMMREG,MEM32,'); + FOpCodeList.Add('pinsrd,1,1,XMMREG,REG32,'); + FOpCodeList.Add('pinsrq,0,1,XMMREG,MEM64,'); + FOpCodeList.Add('pinsrq,0,1,XMMREG,REG64,'); + FOpCodeList.Add('pinsrw,1,1,XMMREG,'); + FOpCodeList.Add('pinsrw,1,1,XMMREG,'); + FOpCodeList.Add('pinsrw,1,1,XMMREG,'); + FOpCodeList.Add('pinsrw,1,1,XMMREG,REG32,'); + FOpCodeList.Add('pmaddubsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaddwd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxub,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxud,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmaxuw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminub,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminud,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pminuw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovmskb,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('pmovsxbd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovsxbq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovsxbw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovsxdq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovsxwd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovsxwq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxbd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxbq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxbw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxdq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxwd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmovzxwq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmuldq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmulhrsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmulhuw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmulhw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmulld,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmullw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pmuludq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('por,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psadbw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pshufb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pshufd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pshufhw,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('pshuflw,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('psignb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psignd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psignw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pslld,1,1,XMMREG,,'); + FOpCodeList.Add('pslld,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pslldq,1,1,XMMREG,,'); + FOpCodeList.Add('psllq,1,1,XMMREG,,'); + FOpCodeList.Add('psllq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psllw,1,1,XMMREG,,'); + FOpCodeList.Add('psllw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psrad,1,1,XMMREG,,'); + FOpCodeList.Add('psrad,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psraw,1,1,XMMREG,,'); + FOpCodeList.Add('psraw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psrld,1,1,XMMREG,,'); + FOpCodeList.Add('psrld,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psrldq,1,1,XMMREG,,'); + FOpCodeList.Add('psrlq,1,1,XMMREG,,'); + FOpCodeList.Add('psrlq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psrlw,1,1,XMMREG,,'); + FOpCodeList.Add('psrlw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubusb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubusw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('psubw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('ptest,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpckhbw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpckhdq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpckhqdq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpckhwd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpcklbw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpckldq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpcklqdq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('punpcklwd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('pxor,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('rcpps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('rcpss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('rorx,0,1,REG64,RM64,IMM8,'); + FOpCodeList.Add('rorx,1,1,REG32,RM32,IMM8,'); + FOpCodeList.Add('roundpd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('roundps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('roundsd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('roundss,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('rsqrtps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('rsqrtss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('sarx,0,1,REG64,RM64,REG64,'); + FOpCodeList.Add('sarx,1,1,REG32,RM32,REG32,'); + FOpCodeList.Add('shlx,0,1,REG64,RM64,REG64,'); + FOpCodeList.Add('shlx,1,1,REG32,RM32,REG32,'); + FOpCodeList.Add('shrx,0,1,REG64,RM64,REG64,'); + FOpCodeList.Add('shrx,1,1,REG32,RM32,REG32,'); + FOpCodeList.Add('shufpd,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('shufps,1,1,XMMREG,XMMRM,'); + FOpCodeList.Add('sqrtpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('sqrtps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('sqrtsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('sqrtss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('subpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('subps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('subsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('subss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('ucomisd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('ucomiss,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('unpckhpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('unpckhps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('unpcklpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('unpcklps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vaddpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaddpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vaddps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaddps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vaddsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vaddsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vaddss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vaddss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vaddsubpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaddsubpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vaddsubps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaddsubps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vaesdec,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaesdeclast,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaesenc,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaesenclast,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vaesimc,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vaeskeygenassist,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vandnpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vandnpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vandnps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vandnps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vandpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vandpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vandps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vandps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vblendpd,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vblendpd,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vblendps,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vblendps,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vblendvpd,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + FOpCodeList.Add('vblendvpd,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + FOpCodeList.Add('vblendvps,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + FOpCodeList.Add('vblendvps,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + FOpCodeList.Add('vbroadcastf128,1,1,YMMREG,MEM128,,'); + FOpCodeList.Add('vbroadcasti128,1,1,YMMREG,MEM128,,'); + FOpCodeList.Add('vbroadcastsd,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vbroadcastsd,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vbroadcastss,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vbroadcastss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vbroadcastss,1,1,YMMREG,MEM32,,'); + FOpCodeList.Add('vbroadcastss,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vcmpeqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_ospd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_ospd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_osps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_osps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_uqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_uqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_uqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_uqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_uspd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_uspd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpeq_usps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpeq_usps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpfalsepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpfalsepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpfalseps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpfalseps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpfalse_ospd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpfalse_ospd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpfalse_osps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpfalse_osps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgeps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgeps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpge_oqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpge_oqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpge_oqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpge_oqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgtpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgtpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgtps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgtps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgt_oqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgt_oqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpgt_oqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpgt_oqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmplepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmplepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpleps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpleps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmple_oqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmple_oqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmple_oqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmple_oqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpltpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpltpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpltps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpltps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmplt_oqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmplt_oqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmplt_oqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmplt_oqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_oqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_oqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_oqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_oqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_ospd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_ospd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_osps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_osps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_uspd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_uspd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpneq_usps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpneq_usps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngeps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngeps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnge_uqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnge_uqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnge_uqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnge_uqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngtpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngtpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngtps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngtps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngt_uqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngt_uqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpngt_uqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpngt_uqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnlepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnlepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnleps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnleps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnle_uqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnle_uqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnle_uqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnle_uqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnltpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnltpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnltps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnltps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnlt_uqpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnlt_uqpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpnlt_uqps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpnlt_uqps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpordpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpordpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpordps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpordps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpord_spd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpord_spd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpord_sps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpord_sps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmppd,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vcmppd,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vcmpps,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vcmpps,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vcmpsd,1,1,XMMREG,XMMREG,MEM64,IMM8'); + FOpCodeList.Add('vcmpsd,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vcmpss,1,1,XMMREG,XMMREG,MEM64,IMM8'); + FOpCodeList.Add('vcmpss,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vcmptruepd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmptruepd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmptrueps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmptrueps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmptrue_uspd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmptrue_uspd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmptrue_usps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmptrue_usps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpunordpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpunordpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpunordps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpunordps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpunord_spd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpunord_spd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcmpunord_sps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vcmpunord_sps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vcomisd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vcomisd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vcomiss,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vcomiss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vcvtdq2pd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vcvtdq2pd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vcvtdq2pd,1,1,YMMREG,MEM128,,'); + FOpCodeList.Add('vcvtdq2pd,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vcvtdq2ps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvtdq2ps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vcvtpd2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvtpd2dq,1,1,XMMREG,YMMRM,,'); + FOpCodeList.Add('vcvtpd2ps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvtpd2ps,1,1,XMMREG,YMMRM,,'); + FOpCodeList.Add('vcvtps2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvtps2dq,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vcvtps2pd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vcvtps2pd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vcvtps2pd,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vcvtsd2si,1,1,REG32,MEM64,,'); + FOpCodeList.Add('vcvtsd2si,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vcvtsd2si,1,1,REG64,MEM64,,'); + FOpCodeList.Add('vcvtsd2si,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vcvtsd2ss,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vcvtsd2ss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vcvtsi2sd,0,1,XMMREG,XMMREG,RM64,'); + FOpCodeList.Add('vcvtsi2sd,1,1,XMMREG,XMMREG,RM32,'); + FOpCodeList.Add('vcvtsi2ss,0,1,XMMREG,XMMREG,RM64,'); + FOpCodeList.Add('vcvtsi2ss,1,1,XMMREG,XMMREG,RM32,'); + FOpCodeList.Add('vcvtss2sd,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vcvtss2sd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vcvtss2si,1,1,REG32,MEM32,,'); + FOpCodeList.Add('vcvtss2si,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vcvtss2si,1,1,REG64,MEM32,,'); + FOpCodeList.Add('vcvtss2si,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vcvttpd2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvttpd2dq,1,1,XMMREG,YMMRM,,'); + FOpCodeList.Add('vcvttps2dq,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vcvttps2dq,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vcvttsd2si,1,1,REG32,MEM64,,'); + FOpCodeList.Add('vcvttsd2si,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vcvttsd2si,1,1,REG64,MEM64,,'); + FOpCodeList.Add('vcvttsd2si,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vcvttss2si,1,1,REG32,MEM32,,'); + FOpCodeList.Add('vcvttss2si,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vcvttss2si,1,1,REG64,MEM32,,'); + FOpCodeList.Add('vcvttss2si,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vdivpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vdivpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vdivps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vdivps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vdivsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vdivsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vdivss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vdivss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vdppd,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vdpps,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vdpps,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vextractf128,1,1,XMMRM,YMMREG,IMM8,'); + FOpCodeList.Add('vextracti128,1,1,XMMRM,YMMREG,IMM8,'); + FOpCodeList.Add('vextractps,1,1,RM32,XMMREG,IMM8,'); + FOpCodeList.Add('vfmadd132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd132sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd132ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd213sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd213ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmadd231sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmadd231ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddpd,1,1,XMMREG,XMMREG,XMMREG,XMMRM'); + FOpCodeList.Add('vfmaddpd,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + FOpCodeList.Add('vfmaddsub132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmaddsub132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmaddsub213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmaddsub213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmaddsub231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmaddsub231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmaddsub231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub132sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub132ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub213sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub213ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsub231sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsub231ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsubadd132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsubadd213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsubadd213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsubadd231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfmsubadd231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfmsubadd231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd132sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd132ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd213sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd213ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmadd231sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmadd231ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub132pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub132pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub132ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub132ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub132sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub132ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub213pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub213pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub213ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub213ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub213sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub213ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub231pd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub231pd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub231ps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub231ps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vfnmsub231sd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vfnmsub231ss,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vgatherdpd,1,1,XMMREG,XMEM64,XMMREG,'); + FOpCodeList.Add('vgatherdpd,1,1,YMMREG,XMEM64,YMMREG,'); + FOpCodeList.Add('vgatherdps,1,1,XMMREG,XMEM32,XMMREG,'); + FOpCodeList.Add('vgatherdps,1,1,YMMREG,YMEM32,YMMREG,'); + FOpCodeList.Add('vgatherqpd,1,1,XMMREG,XMEM64,XMMREG,'); + FOpCodeList.Add('vgatherqpd,1,1,YMMREG,YMEM64,YMMREG,'); + FOpCodeList.Add('vgatherqps,1,1,XMMREG,XMEM32,XMMREG,'); + FOpCodeList.Add('vgatherqps,1,1,XMMREG,YMEM32,XMMREG,'); + FOpCodeList.Add('vhaddpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vhaddpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vhaddps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vhaddps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vhsubpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vhsubpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vhsubps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vhsubps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vinsertf128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vinserti128,1,1,YMMREG,YMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vinsertps,1,1,XMMREG,XMMREG,MEM32,IMM8'); + FOpCodeList.Add('vinsertps,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vlddqu,1,1,XMMREG,MEM128,,'); + FOpCodeList.Add('vlddqu,1,1,YMMREG,MEM256,,'); + FOpCodeList.Add('vldmxcsr,1,1,MEM32,,,'); + FOpCodeList.Add('vmaskmovdqu,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vmaskmovpd,1,1,MEM128,XMMREG,XMMREG,'); + FOpCodeList.Add('vmaskmovpd,1,1,MEM256,YMMREG,YMMREG,'); + FOpCodeList.Add('vmaskmovpd,1,1,XMMREG,XMMREG,MEM128,'); + FOpCodeList.Add('vmaskmovpd,1,1,YMMREG,YMMREG,MEM256,'); + FOpCodeList.Add('vmaskmovps,1,1,MEM128,XMMREG,XMMREG,'); + FOpCodeList.Add('vmaskmovps,1,1,MEM256,YMMREG,YMMREG,'); + FOpCodeList.Add('vmaskmovps,1,1,XMMREG,XMMREG,MEM128,'); + FOpCodeList.Add('vmaskmovps,1,1,YMMREG,YMMREG,MEM256,'); + FOpCodeList.Add('vmaxpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vmaxpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vmaxps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vmaxps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vmaxsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmaxsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmaxss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vmaxss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vminpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vminpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vminps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vminps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vminsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vminsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vminss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vminss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovapd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovapd,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovapd,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovapd,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmovaps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovaps,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovaps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovaps,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmovd,1,1,RM32,XMMREG,,'); + FOpCodeList.Add('vmovd,1,1,XMMREG,RM32,,'); + FOpCodeList.Add('vmovddup,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vmovddup,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vmovddup,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovdqa,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovdqa,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovdqa,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovdqa,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmovdqu,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovdqu,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovdqu,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovdqu,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmovhlps,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovhpd,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovhpd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmovhps,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovhps,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmovlhps,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovlpd,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovlpd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmovlps,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovlps,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmovmskpd,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vmovmskpd,1,1,REG32,YMMREG,,'); + FOpCodeList.Add('vmovmskpd,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vmovmskpd,1,1,REG64,YMMREG,,'); + FOpCodeList.Add('vmovmskps,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vmovmskps,1,1,REG32,YMMREG,,'); + FOpCodeList.Add('vmovmskps,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vmovmskps,1,1,REG64,YMMREG,,'); + FOpCodeList.Add('vmovntdq,1,1,MEM128,XMMREG,,'); + FOpCodeList.Add('vmovntdq,1,1,MEM256,YMMREG,,'); + FOpCodeList.Add('vmovntdqa,1,1,XMMREG,MEM128,,'); + FOpCodeList.Add('vmovntdqa,1,1,YMMREG,MEM256,,'); + FOpCodeList.Add('vmovntpd,1,1,MEM128,XMMREG,,'); + FOpCodeList.Add('vmovntpd,1,1,MEM256,YMMREG,,'); + FOpCodeList.Add('vmovntps,1,1,MEM128,XMMREG,,'); + FOpCodeList.Add('vmovntps,1,1,MEM128,YMMREG,,'); + FOpCodeList.Add('vmovq,0,1,RM64,XMMREG,,'); + FOpCodeList.Add('vmovq,0,1,XMMREG,RM64,,'); + FOpCodeList.Add('vmovq,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovq,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vmovq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vmovq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vmovsd,1,1,MEM64,XMMREG,,'); + FOpCodeList.Add('vmovsd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vmovsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovshdup,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovshdup,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovsldup,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovsldup,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovss,1,1,MEM32,XMMREG,,'); + FOpCodeList.Add('vmovss,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vmovss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmovupd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovupd,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovupd,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovupd,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmovups,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vmovups,1,1,XMMRM,XMMREG,,'); + FOpCodeList.Add('vmovups,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vmovups,1,1,YMMRM,YMMREG,,'); + FOpCodeList.Add('vmpsadbw,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vmpsadbw,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vmulpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vmulpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vmulps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vmulps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vmulsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vmulsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vmulss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vmulss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vorpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vorps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vorps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpabsb,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vpabsb,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vpabsd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vpabsd,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vpabsw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vpabsw,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vpackssdw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpackssdw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpacksswb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpacksswb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpackusdw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpackusdw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpackuswb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpackuswb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddsb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddsb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddusb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddusb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddusw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddusw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpaddw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpaddw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpalignr,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vpalignr,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vpand,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpand,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpandn,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpandn,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpavgb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpavgb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpavgw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpavgw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpblendd,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vpblendd,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vpblendvb,1,1,XMMREG,XMMREG,XMMRM,XMMREG'); + FOpCodeList.Add('vpblendvb,1,1,YMMREG,YMMREG,YMMRM,YMMREG'); + FOpCodeList.Add('vpblendw,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vpblendw,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vpbroadcastb,1,1,XMMREG,,'); + FOpCodeList.Add('vpbroadcastb,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastb,1,1,YMMREG,,'); + FOpCodeList.Add('vpbroadcastb,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastd,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vpbroadcastd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastd,1,1,YMMREG,MEM32,,'); + FOpCodeList.Add('vpbroadcastd,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastq,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpbroadcastq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastq,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vpbroadcastq,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastw,1,1,XMMREG,,'); + FOpCodeList.Add('vpbroadcastw,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpbroadcastw,1,1,YMMREG,,'); + FOpCodeList.Add('vpbroadcastw,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpclmulqdq,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vpcmpeqb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpeqb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpeqd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpeqd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpeqq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpeqq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpeqw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpeqw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpestri,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpcmpestrm,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpcmpgtb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpgtb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpgtd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpgtd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpgtq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpgtq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpgtw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpcmpgtw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpcmpistri,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpcmpistrm,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vperm2f128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vperm2i128,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vpermd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpermilpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpermilpd,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpermilpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpermilpd,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpermilps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpermilps,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpermilps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpermilps,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpermpd,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpermps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpermq,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpextrb,1,1,REG32,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrb,1,1,REG64,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrb,1,1,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrd,1,1,RM32,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrq,1,1,RM64,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrw,1,1,REG32,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrw,1,1,REG32,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrw,1,1,REG64,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrw,1,1,REG64,XMMREG,IMM8,'); + FOpCodeList.Add('vpextrw,1,1,XMMREG,IMM8,'); + FOpCodeList.Add('vpgatherdd,1,1,XMMREG,XMEM32,XMMREG,'); + FOpCodeList.Add('vpgatherdd,1,1,YMMREG,YMEM32,YMMREG,'); + FOpCodeList.Add('vpgatherdq,1,1,XMMREG,XMEM64,XMMREG,'); + FOpCodeList.Add('vpgatherdq,1,1,YMMREG,XMEM64,YMMREG,'); + FOpCodeList.Add('vpgatherqd,1,1,XMMREG,XMEM32,XMMREG,'); + FOpCodeList.Add('vpgatherqd,1,1,XMMREG,YMEM32,XMMREG,'); + FOpCodeList.Add('vpgatherqq,1,1,XMMREG,XMEM64,XMMREG,'); + FOpCodeList.Add('vpgatherqq,1,1,YMMREG,YMEM64,YMMREG,'); + FOpCodeList.Add('vphaddd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphaddd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vphaddsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphaddsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vphaddw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphaddw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vphminposuw,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vphsubd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphsubd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vphsubsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphsubsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vphsubw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vphsubw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpinsrb,1,1,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vpinsrb,1,1,XMMREG,XMMREG,REG32,IMM8'); + FOpCodeList.Add('vpinsrd,1,1,XMMREG,XMMREG,RM32,IMM8'); + FOpCodeList.Add('vpinsrq,1,1,XMMREG,XMMREG,RM64,IMM8'); + FOpCodeList.Add('vpinsrw,1,1,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vpinsrw,1,1,XMMREG,XMMREG,REG32,IMM8'); + FOpCodeList.Add('vpmaddubsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaddubsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaddwd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaddwd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaskmovd,1,1,MEM128,XMMREG,XMMREG,'); + FOpCodeList.Add('vpmaskmovd,1,1,MEM256,YMMREG,YMMREG,'); + FOpCodeList.Add('vpmaskmovd,1,1,XMMREG,XMMREG,MEM128,'); + FOpCodeList.Add('vpmaskmovd,1,1,YMMREG,YMMREG,MEM256,'); + FOpCodeList.Add('vpmaskmovq,1,1,MEM128,XMMREG,XMMREG,'); + FOpCodeList.Add('vpmaskmovq,1,1,MEM256,YMMREG,YMMREG,'); + FOpCodeList.Add('vpmaskmovq,1,1,XMMREG,XMMREG,MEM128,'); + FOpCodeList.Add('vpmaskmovq,1,1,YMMREG,YMMREG,MEM256,'); + FOpCodeList.Add('vpmaxsb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxsb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaxsd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxsd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaxsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaxub,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxub,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaxud,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxud,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmaxuw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmaxuw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminsb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminsb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminsd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminsd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminub,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminub,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminud,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminud,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpminuw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpminuw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmovmskb,1,1,REG32,XMMREG,,'); + FOpCodeList.Add('vpmovmskb,1,1,REG32,YMMREG,,'); + FOpCodeList.Add('vpmovmskb,1,1,REG64,XMMREG,,'); + FOpCodeList.Add('vpmovmskb,1,1,REG64,YMMREG,,'); + FOpCodeList.Add('vpmovsxbd,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vpmovsxbd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxbd,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vpmovsxbd,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxbq,1,1,XMMREG,,'); + FOpCodeList.Add('vpmovsxbq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxbq,1,1,YMMREG,MEM32,,'); + FOpCodeList.Add('vpmovsxbq,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxbw,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovsxbw,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxbw,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovsxdq,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovsxdq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxdq,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovsxwd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovsxwd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxwd,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovsxwq,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vpmovsxwq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovsxwq,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vpmovsxwq,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbd,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vpmovzxbd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbd,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vpmovzxbd,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbq,1,1,XMMREG,,'); + FOpCodeList.Add('vpmovzxbq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbq,1,1,YMMREG,MEM32,,'); + FOpCodeList.Add('vpmovzxbq,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbw,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovzxbw,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxbw,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovzxdq,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovzxdq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxdq,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovzxwd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vpmovzxwd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxwd,1,1,YMMREG,XMMRM,,'); + FOpCodeList.Add('vpmovzxwq,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vpmovzxwq,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vpmovzxwq,1,1,YMMREG,MEM64,,'); + FOpCodeList.Add('vpmovzxwq,1,1,YMMREG,XMMREG,,'); + FOpCodeList.Add('vpmuldq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmuldq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmulhrsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmulhrsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmulhuw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmulhuw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmulhw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmulhw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmulld,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmulld,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmullw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmullw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpmuludq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpmuludq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpor,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpor,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsadbw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsadbw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpshufb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpshufb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpshufd,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpshufd,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpshufhw,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpshufhw,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpshuflw,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vpshuflw,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vpsignb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsignb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsignd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsignd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsignw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsignw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpslld,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpslld,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpslld,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpslld,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpslldq,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpslldq,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsllq,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsllq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsllq,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsllq,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsllvd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsllvd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsllvq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsllvq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsllw,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsllw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsllw,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsllw,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsrad,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsrad,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrad,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsrad,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsravd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsravd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsraw,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsraw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsraw,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsraw,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsrld,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsrld,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrld,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsrld,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsrldq,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsrldq,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsrlq,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsrlq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrlq,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsrlq,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsrlvd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrlvd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsrlvq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrlvq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsrlw,1,1,XMMREG,XMMREG,IMM8,'); + FOpCodeList.Add('vpsrlw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsrlw,1,1,YMMREG,YMMREG,IMM8,'); + FOpCodeList.Add('vpsrlw,1,1,YMMREG,YMMREG,XMMRM,'); + FOpCodeList.Add('vpsubb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubsb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubsb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubsw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubsw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubusb,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubusb,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubusw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubusw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpsubw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpsubw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vptest,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vptest,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vpunpckhbw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpckhbw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpckhdq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpckhdq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpckhqdq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpckhqdq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpckhwd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpckhwd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpcklbw,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpcklbw,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpckldq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpckldq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpcklqdq,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpcklqdq,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpunpcklwd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpunpcklwd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vpxor,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vpxor,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vrcpps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vrcpps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vrcpss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vrcpss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vroundpd,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vroundpd,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vroundps,1,1,XMMREG,XMMRM,IMM8,'); + FOpCodeList.Add('vroundps,1,1,YMMREG,YMMRM,IMM8,'); + FOpCodeList.Add('vroundsd,1,1,XMMREG,XMMREG,MEM64,IMM8'); + FOpCodeList.Add('vroundsd,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vroundss,1,1,XMMREG,XMMREG,MEM32,IMM8'); + FOpCodeList.Add('vroundss,1,1,XMMREG,XMMREG,XMMREG,IMM8'); + FOpCodeList.Add('vrsqrtps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vrsqrtps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vrsqrtss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vrsqrtss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vshufpd,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vshufpd,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vshufps,1,1,XMMREG,XMMREG,XMMRM,IMM8'); + FOpCodeList.Add('vshufps,1,1,YMMREG,YMMREG,YMMRM,IMM8'); + FOpCodeList.Add('vsqrtpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vsqrtpd,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vsqrtps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vsqrtps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vsqrtsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vsqrtsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vsqrtss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vsqrtss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vstmxcsr,1,1,MEM32,,,'); + FOpCodeList.Add('vsubpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vsubpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vsubps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vsubps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vsubsd,1,1,XMMREG,XMMREG,MEM64,'); + FOpCodeList.Add('vsubsd,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vsubss,1,1,XMMREG,XMMREG,MEM32,'); + FOpCodeList.Add('vsubss,1,1,XMMREG,XMMREG,XMMREG,'); + FOpCodeList.Add('vtestpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vtestpd,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vtestps,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('vtestps,1,1,YMMREG,YMMRM,,'); + FOpCodeList.Add('vucomisd,1,1,XMMREG,MEM64,,'); + FOpCodeList.Add('vucomisd,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vucomiss,1,1,XMMREG,MEM32,,'); + FOpCodeList.Add('vucomiss,1,1,XMMREG,XMMREG,,'); + FOpCodeList.Add('vunpckhpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vunpckhpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vunpckhps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vunpckhps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vunpcklpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vunpcklpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vunpcklps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vunpcklps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vxorpd,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vxorpd,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vxorps,1,1,XMMREG,XMMREG,XMMRM,'); + FOpCodeList.Add('vxorps,1,1,YMMREG,YMMREG,YMMRM,'); + FOpCodeList.Add('vzeroall,1,1,,,,'); + FOpCodeList.Add('vzeroupper,1,1,,,,'); + FOpCodeList.Add('xorpd,1,1,XMMREG,XMMRM,,'); + FOpCodeList.Add('xorps,1,1,XMMREG,XMMRM,,'); end; -function TAVXTestGenerator.InternalMakeTestFiles(aX64: boolean; aDestPath, aFileExt: String; +function TAVXTestGenerator.InternalMakeTestFiles(aMRef, aX64: boolean; aDestPath, aFilemask, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean; var - i: integer; + i,j: integer; + sData: string; + sDestFile: string; + sLocalVarDataTyp: string; sl: TStringList; slAsm: TStringList; + slLocalHeader: TStringList; + slFilemask: TStringList; LastOpCode: String; NewOpCode: String; + FoundNewOpcode: boolean; function SaveFile(aAsmList: TStringList; aOpcode, aDestPath, aFileExt: String; aHeaderList, aFooterList: TStringList): boolean; begin @@ -820,8 +2044,8 @@ var if aAsmList.Count > 0 then begin - aAsmList.Insert(0, StringReplace(aHeaderList.Text, '$$$OPCODE$$$', aOpCode, [])); - aAsmList.AddStrings(aFooterList); + aAsmList.Insert(0, StringReplace(aHeaderList.Text, '$$$OPCODE$$$', aOpCode, [rfReplaceAll])); + aAsmList.AddStrings(StringReplace(aFooterList.Text, '$$$OPCODE$$$', aOpCode, [rfReplaceAll])); aAsmList.SaveToFile(IncludeTrailingBackslash(aDestPath) + aOpCode + aFileExt); end; @@ -836,53 +2060,79 @@ begin try slAsm := TStringList.Create; try - LastOpCode := ''; - - for i := 0 to aOpCodeList.Count - 1 do - //for i := 0 to 0 do - begin - sl.Clear; - sl.CommaText := aOpCodeList[i]; + slFilemask := TStringList.Create; + try + slFilemask.CommaText := ansilowercase(aFilemask); - while sl.Count < 7 do sl.Add(''); + LastOpCode := ''; - NewOpCode := sl[0]; - if NewOpCode <> '' then + for i := 0 to aOpCodeList.Count - 1 do begin - if NewOpCode <> LastOpCode then - begin - if LastOpCode <> '' then - begin - SaveFile(slAsm, LastOpCode, aDestPath, aFileExt, aHeaderList, aFooterList); - writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt])); + sl.Clear; + sl.CommaText := aOpCodeList[i]; - slAsm.Clear; - LastOpCode := NewOpCode; - end - else LastOpCode := NewOpCode; + while sl.Count < 8 do sl.Add(''); + + NewOpCode := ansilowercase(sl[0]); + + FoundNewOpcode := false; + for j := 0 to slFilemask.Count - 1 do + begin + if Pos(slFilemask[j], NewOpCode) = 1 then + FoundNewOpcode := true; end; - if (not(aX64) and (sl[1] = '1')) or // i386 - (aX64 and (sl[2] = '1')) then // x86_64 + if not(FoundNewOpcode) and (slFilemask.Count > 0) then + NewOpcode := ''; + + if NewOpCode <> '' then begin - if (sl[3] = '') and - (sl[3] = '') and - (sl[3] = '') and - (sl[3] = '') then - begin // Opcode with no Params, e.g. VZEROALL - slAsm.Add(' ' + sl[0]); - end - else TAsmTestGenerator.CalcTestData(aX64, sl[0], sl[3], sl[4], sl[5], sl[6], slAsm); + if (not(aX64) and (sl[1] = '1')) or // i386 + (aX64 and (sl[2] = '1')) then // x86_64 + begin + sDestFile := format('%s_%d%s', [NewOpcode, i, trim(copy(sl[4],1,1) + copy(sl[5],1,1) + copy(sl[6],1,1) + copy(sl[7],1,1))]); + + slLocalHeader := TStringList.Create; + try + slLocalHeader.Text := aHeaderList.text; + + if (sl[4] = '') and + (sl[5] = '') and + (sl[6] = '') and + (sl[7] = '') then + begin // Opcode with no Params, e.g. VZEROALL + slAsm.Add(' ' + sl[0]); + end + else + begin + if aMREF then + begin + sLocalVarDataTyp := ''; + TAsmTestGenerator.CalcTestDataMREF(aX64, sl[0], sl[3], sl[4], sl[5], sl[6], slAsm); + sDestFile := 'MREF_' + sDestFile; + + if trim(sLocalVarDataTyp) = '' then + sLocalVarDataTyp := 'byte'; + + slLocalHeader.Text := StringReplace(aHeaderList.Text, '$$$LOCALVARDATATYP$$$', sLocalVarDataTyp, [rfReplaceAll]); + end + else TAsmTestGenerator.CalcTestData(aX64, sl[0], sl[3], sl[4], sl[5], sl[6], slAsm); + end; + + SaveFile(slAsm, sDestFile, aDestPath, aFileExt, slLocalHeader, aFooterList); + writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt])); + + finally + FreeAndNil(slLocalHeader); + end; + + slAsm.Clear; + end; end; end; + finally + FreeAndNil(slFilemask); end; - - if NewOpCode <> '' then - begin - SaveFile(slAsm, NewOpCode, aDestPath, aFileExt, aHeaderList, aFooterList); - writeln(format('%s%s%s', [aDestPath, NewOpCode, aFileExt])); - end; - finally FreeAndNil(slAsm); end; @@ -892,7 +2142,7 @@ begin end; function TAVXTestGenerator.MakeTestFiles(aTyp: TTestFileTyp; aX64: boolean; - aDestPath: String): boolean; + aDestPath, aFilemask: String): boolean; var slHeader: TStringList; slFooter: TStringList; @@ -928,6 +2178,156 @@ begin slFooter.Add(' end;'); slFooter.Add('end.'); end; + tfFPCMRef: + begin + writeln(format('outputformat: fpc platform: %s path: %s', + [cPlatform[aX64], aDestPath])); + + FileExt := '.pp'; + + slHeader.Add('Program $$$OPCODE$$$;'); + slHeader.Add('{$asmmode intel}'); + + slHeader.Add('type'); + slHeader.Add(' rec = record'); + + slHeader.Add(' rByte: byte;'); + slHeader.Add(' rWord: word;'); + slHeader.Add(' rDWord: dword;'); + slHeader.Add(' rQWord: qword;'); + slHeader.Add(' rOWord: array[0..15] of byte;'); + slHeader.Add(' rYWord: array[0..31] of byte;'); + slHeader.Add(' rZWord: array[0..63] of byte;'); + + slHeader.Add(' end;'); + + + slHeader.Add('var'); + slHeader.Add(' gRec: rec;'); + slHeader.Add(' gByte: byte;'); + slHeader.Add(' gWord: word;'); + slHeader.Add(' gDWord: dword;'); + slHeader.Add(' gQWord: qword;'); + slHeader.Add(' gOWord: array[0..15] of byte;'); + slHeader.Add(' gYWord: array[0..31] of byte;'); + slHeader.Add(' gZWord: array[0..63] of byte;'); + + slHeader.Add('const'); + slHeader.Add(' cgByte: byte = 0;'); + slHeader.Add(' cgWord: word = 0;'); + slHeader.Add(' cgDWord: dword = 0;'); + slHeader.Add(' cgQWord: qword = 0;'); + slHeader.Add(' cgOWord: array[0..15] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + + slHeader.Add(' cgYWord: array[0..31] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + + slHeader.Add(' cgZWord: array[0..63] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + +// slHeader.Add(' cgZWord: array[0..63] of byte;'); + + slHeader.Add(' procedure dummyproc;'); + slHeader.Add(' var'); + slHeader.Add(' lRec: rec;'); + slHeader.Add(' lByte: byte;'); + slHeader.Add(' lWord: word;'); + slHeader.Add(' lDWord: dword;'); + slHeader.Add(' lQWord: qword;'); + slHeader.Add(' lOWord: array[0..15] of byte;'); + slHeader.Add(' lYWord: array[0..31] of byte;'); + slHeader.Add(' lSingle: single;'); + + slHeader.Add(' lDouble: double;'); + slHeader.Add(' lZWord: array[0..63] of byte;'); + + slHeader.Add(' const'); + slHeader.Add(' clByte: byte = 0;'); + slHeader.Add(' clWord: word = 0;'); + slHeader.Add(' clDWord: dword = 0;'); + slHeader.Add(' clQWord: qword = 0;'); + slHeader.Add(' clOWord: array[0..15] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + + slHeader.Add(' clYWord: array[0..31] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + + slHeader.Add(' clZWord: array[0..63] of byte = ((0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0),' + + '(0),(0),(0),(0),(0),(0),(0),(0));'); + + + + slHeader.Add(' begin'); + slHeader.Add(' asm'); + for i := 1 to 10 do + slHeader.Add(' NOP'); + + + for i := 1 to 10 do + slFooter.Add(' NOP'); + + slFooter.Add(' end;'); + slFooter.Add(' end;'); + slFooter.Add('begin'); + slFooter.Add('end.'); + end; + tfFPCInc: begin + writeln(format('outputformat: fpc platform: %s path: %s', + [cPlatform[aX64], aDestPath])); + + FileExt := '.pp'; + + slHeader.Add('Program Test$$$OPCODE$$$;'); + slHeader.Add('{$asmmode intel}'); + slHeader.Add('{$warn 7102 off}'); + slHeader.Add('{$I $$$OPCODE$$$.inc}'); + slHeader.Add('Procedure Proc$$$OPCODE$$$;assembler;nostackframe;'); + slHeader.Add(' asm'); + + for i := 1 to 10 do + slHeader.Add(#9'NOP'); + + for i := 1 to 10 do + slFooter.Add(#9'NOP'); + + slFooter.Add(' end;'); + slFooter.Add('procedure check(const id: string; const expected: array of byte; p: pointer);'); + slFooter.Add('var'); + slFooter.Add(' i : longint;'); + slFooter.Add('begin'); + slFooter.Add(' for i:=0 to high(expected) do'); + slFooter.Add(' if expected[i]<>pbyte(p)[i] then'); + slFooter.Add(' begin'); + slFooter.Add(' writeln(id, '' mismatch at offset $'',hexstr(i,4), '', expected=$'',hexstr(expected[i],2),'' actual=$'',hexstr(pbyte(p)[i],2));'); + slFooter.Add(' halt(1);'); + slFooter.Add(' end;'); + slFooter.Add('end;'); + + slFooter.Add('begin'); + if aX64 then + slFooter.Add(' check(''x86_64'',$$$OPCODE$$$,@Proc$$$OPCODE$$$);') + else + slFooter.Add(' check(''i386'',$$$OPCODE$$$,@Proc$$$OPCODE$$$);'); + slFooter.Add(' writeln(''ok'');'); + slFooter.Add('end.'); + end; tfNasm: begin writeln(format('outputformat: Nasm platform: %s path: %s', [cPlatform[aX64], aDestPath])); @@ -963,7 +2363,7 @@ begin end; end; - InternalMakeTestFiles(aX64, aDestPath, Fileext, FOpCodeList, slHeader, slFooter); + InternalMakeTestFiles(aTyp = tfFPCMRef, aX64, aDestPath, aFilemask, Fileext, FOpCodeList, slHeader, slFooter); finally FreeAndNil(slFooter); @@ -973,5 +2373,10 @@ begin end; end; +procedure TAVXTestGenerator.ListMemRefState; +begin + TAsmTestGenerator.ListMemRefState; +end; + end. diff --git a/fixes_3_2/tests/utils/avx/avxtestgenerator.pp b/fixes_3_2/tests/utils/avx/avxtestgenerator.pp index 3c246e54e2..a7b1070f81 100644 --- a/fixes_3_2/tests/utils/avx/avxtestgenerator.pp +++ b/fixes_3_2/tests/utils/avx/avxtestgenerator.pp @@ -30,6 +30,8 @@ uses begin with TAVXTestGenerator.Create do try + + with TOptions.Create do try LoadParams; @@ -42,17 +44,24 @@ begin writeln('make avx assembler-testfiles'); writeln(''); writeln('-h help'); - writeln('-f [fpc,nasm,fasm] outputformat'); - writeln('-p [x8664] codegenerator for x86_64 platform'); + writeln('-f [fpc,fpcmref,nasm,fasm,fpcinc] outputformat'); + writeln('-l list opcode-memrefsize-states'); + writeln('-m create only these testfile(s) (e.g. -mvgather,vpgather)'); writeln('-o destination path'); + writeln('-p [x8664] codegenerator for x86_64 platform'); + + writeln(''); end else begin case OutputFormat of - 'f': MakeTestFiles(tfFPC, x64, Path); - 'F': MakeTestFiles(tfFasm, x64, Path); - 'n': MakeTestFiles(tfNasm, x64, Path); + 'f': MakeTestFiles(tfFPC, x64, Path, Filemask); + 'F': MakeTestFiles(tfFasm, x64, Path, Filemask); + 'n': MakeTestFiles(tfNasm, x64, Path, Filemask); + 'I': MakeTestFiles(tfFPCInc, x64, Path, Filemask); + 'm': MakeTestFiles(tfFPCMRef, x64, Path, Filemask); + 'l': ListMemRefState; end; end; finally diff --git a/fixes_3_2/tests/utils/avx/options.pas b/fixes_3_2/tests/utils/avx/options.pas index 8f5efafa54..43bbc89971 100644 --- a/fixes_3_2/tests/utils/avx/options.pas +++ b/fixes_3_2/tests/utils/avx/options.pas @@ -32,6 +32,8 @@ type FX64: boolean; FOutputFormat: Char; FPath: string; + FMemRef: boolean; + FFilemask: string; public constructor Create; @@ -41,6 +43,8 @@ type property OutputFormat: Char read FOutputFormat write FOutputFormat; property X64: boolean read FX64 write FX64; property Path: string read FPath write FPath; + property MemRef: boolean read FMemref write FMemRef; + property Filemask: string read FFilemask write FFilemask; end; implementation @@ -55,6 +59,8 @@ begin FX64 := false; FOutputFormat := '?'; FPath := ''; + FMemRef := false; + FFilemask := ''; end; procedure TOptions.LoadParams; @@ -84,12 +90,18 @@ begin 'f': if sValue = 'fpc' then FOutputFormat := 'f' else if sValue = 'nasm' then FOutputFormat := 'n' else if sValue = 'fasm' then FOutputFormat := 'F' + else if sValue = 'fpcinc' then FOutputFormat := 'I' + else if sValue = 'fpcmref' then FOutputFormat := 'm' + else IsInvalidParam := true; 'p': if sValue = 'x8664' then begin Fx64 := true; end else IsInvalidParam := true; + 'l': FOutputFormat := 'l'; + + 'm': FFilemask := sValue; 'o': if sValue <> '' then begin FPath := IncludeTrailingBackslash(sValue); |