Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/asmjit/asmjit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorkobalicek <kobalicek.petr@gmail.com>2017-02-25 21:26:08 +0300
committerkobalicek <kobalicek.petr@gmail.com>2017-02-25 21:36:28 +0300
commitf589e7165a0f107e24df5366826207a4211e7e60 (patch)
tree55599b4d6203b105f5a8afdf2658f5e135ecfdb9 /test
parentaa154e3590b76f7d20fbcba8ab36b4d747e5a129 (diff)
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'
Diffstat (limited to 'test')
-rw-r--r--test/asmjit_test_opcode.h2
-rw-r--r--test/asmjit_test_unit.cpp138
-rw-r--r--test/asmjit_test_x86_cc.cpp72
3 files changed, 142 insertions, 70 deletions
diff --git a/test/asmjit_test_opcode.h b/test/asmjit_test_opcode.h
index 696bd07..1d4f419 100644
--- a/test/asmjit_test_opcode.h
+++ b/test/asmjit_test_opcode.h
@@ -2899,7 +2899,7 @@ static void generateOpcodes(asmjit::X86Assembler& a, bool useRex1 = false, bool
a.vpxor(ymmA, ymmB, anyptr_gpC);
a.vpxor(ymmA, ymmB, ymmC);
- // FMA3.
+ // FMA.
a.nop();
a.vfmadd132pd(xmmA, xmmB, anyptr_gpC);
diff --git a/test/asmjit_test_unit.cpp b/test/asmjit_test_unit.cpp
index 3860f5d..c2d01c6 100644
--- a/test/asmjit_test_unit.cpp
+++ b/test/asmjit_test_unit.cpp
@@ -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("");
diff --git a/test/asmjit_test_x86_cc.cpp b/test/asmjit_test_x86_cc.cpp
index 973af47..48d2264 100644
--- a/test/asmjit_test_x86_cc.cpp
+++ b/test/asmjit_test_x86_cc.cpp
@@ -1270,7 +1270,7 @@ public:
result.setFormat("ret=\"%s\"", dst);
expect.setFormat("ret=\"%s\"", src);
- return ::memcmp(dst, src, strlen(src) + 1) == 0;
+ return result == expect;
}
};
@@ -1608,7 +1608,7 @@ public:
expectBuf[4], expectBuf[5], expectBuf[6], expectBuf[7],
expectBuf[8]);
- return ::memcmp(resultBuf, expectBuf, 9) == 0;
+ return result == expect;
}
};
@@ -2034,7 +2034,7 @@ public:
result.appendString("}");
expect.appendString("}");
- return ::memcmp(dstBuffer, srcBuffer, kCount * sizeof(uint32_t)) == 0;
+ return result == expect;
}
};
@@ -2113,7 +2113,7 @@ public:
result.appendString("}");
expect.appendString("}");
- return ::memcmp(expBuffer, dstBuffer, kCount * sizeof(uint32_t)) == 0;
+ return result == expect;
}
};
@@ -3422,6 +3422,67 @@ public:
};
// ============================================================================
+// [X86Test_Bug100]
+// ============================================================================
+
+class X86Test_Bug100 : public X86Test {
+public:
+ X86Test_Bug100() : X86Test("[Alloc] Bug#100") {}
+
+ static void add(X86TestManager& mgr) {
+ mgr.add(new X86Test_Bug100());
+ }
+
+ virtual void compile(X86Compiler& cc) {
+ cc.addFunc(FuncSignature4<void, void*, uint32_t, uint32_t, uint32_t>(CallConv::kIdHost));
+
+ Label L2 = cc.newLabel();
+ Label L3 = cc.newLabel();
+ Label L4 = cc.newLabel();
+
+ X86Gp dst = cc.newIntPtr("dst");
+ X86Gp v0 = cc.newU32("v0");
+ X86Gp v1 = cc.newU32("v1");
+ X86Gp v2 = cc.newU32("v2");
+
+ cc.setArg(0, dst);
+ cc.setArg(1, v0);
+ cc.setArg(2, v1);
+ cc.setArg(3, v2);
+
+ cc.cmp(v0, 65535);
+ cc.jne(L2);
+
+ cc.cmp(v0, v1);
+ cc.je(L3);
+
+ cc.mov(v0, v2);
+ cc.jmp(cc.getFunc()->getExitLabel());
+
+ cc.bind(L3);
+ cc.bind(L4);
+
+ cc.mov(v2, v1);
+ cc.cmp(v1, 65535);
+ cc.jne(L2);
+
+ cc.mov(v0, 128);
+
+ cc.bind(L2);
+ cc.mov(x86::ptr(dst), v0);
+
+ cc.endFunc();
+ }
+
+ virtual bool run(void* _func, StringBuilder& result, StringBuilder& expect) {
+ // TODO: This test is not complete.
+ // typedef void (*Func)(void*, const void*, size_t);
+ // Func func = ptr_as_func<Func>(_func);
+ return result == expect;
+ }
+};
+
+// ============================================================================
// [CmdLine]
// ============================================================================
@@ -3524,5 +3585,8 @@ int main(int argc, char* argv[]) {
ADD_TEST(X86Test_MiscFastEval);
ADD_TEST(X86Test_MiscUnfollow);
+ // Bugs.
+ ADD_TEST(X86Test_Bug100);
+
return testMgr.run();
}