Fixed encoding of 'CRC32 r64, r8/m8' instruction

Fixed encoding of 'POPCNT|TZCNT|LZCNT r16, r16/m16' instruction
Fixed encoding of EVEX instructions that don't provide VEX prefix equivalent
Added 'LOCK MOV CR8' extension used by AMD processors in 32-bit mode and 'ALTMOVCR8' CPU feature
Renamed some CPU features to respect their names used in X86/X64 architecture manuals
Added validation of immediate operands (correct size, correct sign/zero extension)
Added validation of explicit/implicit size of memory operands
Added validation of LOCK/REP/REPNZ prefixes to x86 validator
Reorganized some X86 instruction tables, removed family specific tables, introduced OperationData
Improved instruction tables generator to automatically generate instruction flags
Regenerated all instruction tables to respect the current state of 'asmdb.x86data'
This commit is contained in:
kobalicek
2017-02-25 19:26:08 +01:00
parent aa154e3590
commit f589e7165a
21 changed files with 5704 additions and 5612 deletions

View File

@@ -72,71 +72,77 @@ static void dumpCpu(void) {
#if ASMJIT_ARCH_X86 || ASMJIT_ARCH_X64
static const DumpCpuFeature x86FeaturesList[] = {
{ CpuInfo::kX86FeatureNX , "NX (Non-Execute Bit)" },
{ CpuInfo::kX86FeatureMT , "MT (Multi-Threading)" },
{ CpuInfo::kX86FeatureRDTSC , "RDTSC" },
{ CpuInfo::kX86FeatureRDTSCP , "RDTSCP" },
{ CpuInfo::kX86FeatureCMOV , "CMOV" },
{ CpuInfo::kX86FeatureCMPXCHG8B , "CMPXCHG8B" },
{ CpuInfo::kX86FeatureCMPXCHG16B , "CMPXCHG16B" },
{ CpuInfo::kX86FeatureCLFLUSH , "CLFLUSH" },
{ CpuInfo::kX86FeatureCLFLUSH_OPT , "CLFLUSH_OPT" },
{ CpuInfo::kX86FeatureCLWB , "CLWB" },
{ CpuInfo::kX86FeaturePCOMMIT , "PCOMMIT" },
{ CpuInfo::kX86FeaturePREFETCH , "PREFETCH" },
{ CpuInfo::kX86FeaturePREFETCHWT1 , "PREFETCHWT1" },
{ CpuInfo::kX86FeatureLAHF_SAHF , "LAHF/SAHF" },
{ CpuInfo::kX86FeatureFXSR , "FXSR" },
{ CpuInfo::kX86FeatureFXSR_OPT , "FXSR_OPT" },
{ CpuInfo::kX86FeatureMMX , "MMX" },
{ CpuInfo::kX86FeatureMMX2 , "MMX2" },
{ CpuInfo::kX86Feature3DNOW , "3DNOW" },
{ CpuInfo::kX86Feature3DNOW2 , "3DNOW2" },
{ CpuInfo::kX86FeatureSSE , "SSE" },
{ CpuInfo::kX86FeatureSSE2 , "SSE2" },
{ CpuInfo::kX86FeatureSSE3 , "SSE3" },
{ CpuInfo::kX86FeatureSSSE3 , "SSSE3" },
{ CpuInfo::kX86FeatureSSE4A , "SSE4A" },
{ CpuInfo::kX86FeatureSSE4_1 , "SSE4.1" },
{ CpuInfo::kX86FeatureSSE4_2 , "SSE4.2" },
{ CpuInfo::kX86FeatureMSSE , "Misaligned SSE" },
{ CpuInfo::kX86FeatureMONITOR , "MONITOR/MWAIT" },
{ CpuInfo::kX86FeatureMOVBE , "MOVBE" },
{ CpuInfo::kX86FeaturePOPCNT , "POPCNT" },
{ CpuInfo::kX86FeatureLZCNT , "LZCNT" },
{ CpuInfo::kX86FeatureAESNI , "AESNI" },
{ CpuInfo::kX86FeaturePCLMULQDQ , "PCLMULQDQ" },
{ CpuInfo::kX86FeatureRDRAND , "RDRAND" },
{ CpuInfo::kX86FeatureRDSEED , "RDSEED" },
{ CpuInfo::kX86FeatureSMAP , "SMAP" },
{ CpuInfo::kX86FeatureSMEP , "SMEP" },
{ CpuInfo::kX86FeatureSHA , "SHA" },
{ CpuInfo::kX86FeatureXSAVE , "XSAVE" },
{ CpuInfo::kX86FeatureXSAVE_OS , "XSAVE (OS)" },
{ CpuInfo::kX86FeatureAVX , "AVX" },
{ CpuInfo::kX86FeatureAVX2 , "AVX2" },
{ CpuInfo::kX86FeatureF16C , "F16C" },
{ CpuInfo::kX86FeatureFMA3 , "FMA3" },
{ CpuInfo::kX86FeatureFMA4 , "FMA4" },
{ CpuInfo::kX86FeatureXOP , "XOP" },
{ CpuInfo::kX86FeatureBMI , "BMI" },
{ CpuInfo::kX86FeatureBMI2 , "BMI2" },
{ CpuInfo::kX86FeatureADX , "ADX" },
{ CpuInfo::kX86FeatureTBM , "TBM" },
{ CpuInfo::kX86FeatureMPX , "MPX" },
{ CpuInfo::kX86FeatureHLE , "HLE" },
{ CpuInfo::kX86FeatureRTM , "RTM" },
{ CpuInfo::kX86FeatureERMS , "ERMS" },
{ CpuInfo::kX86FeatureFSGSBASE , "FSGSBASE" },
{ CpuInfo::kX86FeatureAVX512_F , "AVX512F" },
{ CpuInfo::kX86FeatureAVX512_CDI , "AVX512CDI" },
{ CpuInfo::kX86FeatureAVX512_PFI , "AVX512PFI" },
{ CpuInfo::kX86FeatureAVX512_ERI , "AVX512ERI" },
{ CpuInfo::kX86FeatureAVX512_DQ , "AVX512DQ" },
{ CpuInfo::kX86FeatureAVX512_BW , "AVX512BW" },
{ CpuInfo::kX86FeatureAVX512_VL , "AVX512VL" },
{ CpuInfo::kX86FeatureAVX512_IFMA , "AVX512IFMA" },
{ CpuInfo::kX86FeatureAVX512_VBMI , "AVX512VBMI" }
{ CpuInfo::kX86FeatureNX , "NX (Non-Execute Bit)" },
{ CpuInfo::kX86FeatureMT , "MT (Multi-Threading)" },
{ CpuInfo::kX86FeatureCMOV , "CMOV" },
{ CpuInfo::kX86FeatureCMPXCHG8B , "CMPXCHG8B" },
{ CpuInfo::kX86FeatureCMPXCHG16B , "CMPXCHG16B" },
{ CpuInfo::kX86FeatureMSR , "MSR" },
{ CpuInfo::kX86FeatureRDTSC , "RDTSC" },
{ CpuInfo::kX86FeatureRDTSCP , "RDTSCP" },
{ CpuInfo::kX86FeatureCLFLUSH , "CLFLUSH" },
{ CpuInfo::kX86FeatureCLFLUSHOPT , "CLFLUSHOPT" },
{ CpuInfo::kX86FeatureCLWB , "CLWB" },
{ CpuInfo::kX86FeatureCLZERO , "CLZERO" },
{ CpuInfo::kX86FeaturePCOMMIT , "PCOMMIT" },
{ CpuInfo::kX86FeaturePREFETCHW , "PREFETCHW" },
{ CpuInfo::kX86FeaturePREFETCHWT1 , "PREFETCHWT1" },
{ CpuInfo::kX86FeatureLAHFSAHF , "LAHF/SAHF" },
{ CpuInfo::kX86FeatureFXSR , "FXSR" },
{ CpuInfo::kX86FeatureFXSROPT , "FXSROPT" },
{ CpuInfo::kX86FeatureMMX , "MMX" },
{ CpuInfo::kX86FeatureMMX2 , "MMX2" },
{ CpuInfo::kX86Feature3DNOW , "3DNOW" },
{ CpuInfo::kX86Feature3DNOW2 , "3DNOW2" },
{ CpuInfo::kX86FeatureSSE , "SSE" },
{ CpuInfo::kX86FeatureSSE2 , "SSE2" },
{ CpuInfo::kX86FeatureSSE3 , "SSE3" },
{ CpuInfo::kX86FeatureSSSE3 , "SSSE3" },
{ CpuInfo::kX86FeatureSSE4A , "SSE4A" },
{ CpuInfo::kX86FeatureSSE4_1 , "SSE4.1" },
{ CpuInfo::kX86FeatureSSE4_2 , "SSE4.2" },
{ CpuInfo::kX86FeatureMSSE , "Misaligned SSE" },
{ CpuInfo::kX86FeatureMONITOR , "MONITOR/MWAIT" },
{ CpuInfo::kX86FeatureMOVBE , "MOVBE" },
{ CpuInfo::kX86FeaturePOPCNT , "POPCNT" },
{ CpuInfo::kX86FeatureLZCNT , "LZCNT" },
{ CpuInfo::kX86FeatureAESNI , "AESNI" },
{ CpuInfo::kX86FeaturePCLMULQDQ , "PCLMULQDQ" },
{ CpuInfo::kX86FeatureRDRAND , "RDRAND" },
{ CpuInfo::kX86FeatureRDSEED , "RDSEED" },
{ CpuInfo::kX86FeatureSMAP , "SMAP" },
{ CpuInfo::kX86FeatureSMEP , "SMEP" },
{ CpuInfo::kX86FeatureSHA , "SHA" },
{ CpuInfo::kX86FeatureXSAVE , "XSAVE" },
{ CpuInfo::kX86FeatureXSAVEOPT , "XSAVEOPT" },
{ CpuInfo::kX86FeatureOSXSAVE , "OSXSAVE" },
{ CpuInfo::kX86FeatureAVX , "AVX" },
{ CpuInfo::kX86FeatureAVX2 , "AVX2" },
{ CpuInfo::kX86FeatureF16C , "F16C" },
{ CpuInfo::kX86FeatureFMA , "FMA" },
{ CpuInfo::kX86FeatureFMA4 , "FMA4" },
{ CpuInfo::kX86FeatureXOP , "XOP" },
{ CpuInfo::kX86FeatureBMI , "BMI" },
{ CpuInfo::kX86FeatureBMI2 , "BMI2" },
{ CpuInfo::kX86FeatureADX , "ADX" },
{ CpuInfo::kX86FeatureTBM , "TBM" },
{ CpuInfo::kX86FeatureMPX , "MPX" },
{ CpuInfo::kX86FeatureHLE , "HLE" },
{ CpuInfo::kX86FeatureRTM , "RTM" },
{ CpuInfo::kX86FeatureERMS , "ERMS" },
{ CpuInfo::kX86FeatureFSGSBASE , "FSGSBASE" },
{ CpuInfo::kX86FeatureAVX512_F , "AVX512-F" },
{ CpuInfo::kX86FeatureAVX512_CDI , "AVX512-CDI" },
{ CpuInfo::kX86FeatureAVX512_PFI , "AVX512-PFI" },
{ CpuInfo::kX86FeatureAVX512_ERI , "AVX512-ERI" },
{ CpuInfo::kX86FeatureAVX512_DQ , "AVX512-DQ" },
{ CpuInfo::kX86FeatureAVX512_BW , "AVX512-BW" },
{ CpuInfo::kX86FeatureAVX512_VL , "AVX512-VL" },
{ CpuInfo::kX86FeatureAVX512_IFMA , "AVX512-IFMA" },
{ CpuInfo::kX86FeatureAVX512_VBMI , "AVX512-VBMI" },
{ CpuInfo::kX86FeatureAVX512_VPOPCNTDQ, "AVX512-VPOPCNTDQ" },
{ CpuInfo::kX86FeatureAVX512_4FMAPS , "AVX512-4FMAPS" },
{ CpuInfo::kX86FeatureAVX512_4VNNIW , "AVX512-4VNNIW" }
};
INFO("X86 Specific:");
@@ -238,6 +244,8 @@ static void dumpSizeOf(void) {
#endif // !ASMJIT_DISABLE_COMPILER
DUMP_TYPE(X86Inst);
DUMP_TYPE(X86Inst::CommonData);
DUMP_TYPE(X86Inst::OperationData);
DUMP_TYPE(X86Inst::SseToAvxData);
DUMP_TYPE(X86Inst::ISignature);
DUMP_TYPE(X86Inst::OSignature);
INFO("");