summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-08 04:49:01 +0000
committertg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-08 04:49:01 +0000
commitec93adf1b7126a0969ec5eb6b07febf6bfd8dbcf (patch)
tree220b991b3502a4f3c48246a7ade75e151b7b3f34
parent677af5f6f8ea691f7931f9851aaedf35bab5c408 (diff)
downloadfpc-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.pas3445
-rw-r--r--fixes_3_2/tests/utils/avx/avxopcodes.pas3003
-rw-r--r--fixes_3_2/tests/utils/avx/avxtestgenerator.pp19
-rw-r--r--fixes_3_2/tests/utils/avx/options.pas12
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);