From 11c09b8b598211681aa2fa0161ed03ba2cb055e0 Mon Sep 17 00:00:00 2001 From: kobalicek Date: Wed, 25 Feb 2015 09:49:59 +0100 Subject: [PATCH] Added IDIV test. --- src/app/test/asmjit_test_x86.cpp | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/app/test/asmjit_test_x86.cpp b/src/app/test/asmjit_test_x86.cpp index 2109e7c..24d7970 100644 --- a/src/app/test/asmjit_test_x86.cpp +++ b/src/app/test/asmjit_test_x86.cpp @@ -748,6 +748,51 @@ struct X86Test_AllocImul2 : public X86Test { } }; +// ============================================================================ +// [X86Test_AllocIdiv1] +// ============================================================================ + +struct X86Test_AllocIdiv1 : public X86Test { + X86Test_AllocIdiv1() : X86Test("[Alloc] Idiv #1") {} + + static void add(PodVector& tests) { + tests.append(new X86Test_AllocIdiv1()); + } + + virtual void compile(X86Compiler& c) { + c.addFunc(kFuncConvHost, FuncBuilder2()); + + X86GpVar a(c, kVarTypeIntPtr, "a"); + X86GpVar b(c, kVarTypeIntPtr, "b"); + X86GpVar dummy(c, kVarTypeInt32, "dummy"); + + c.setArg(0, a); + c.setArg(1, b); + + c.xor_(dummy, dummy); + c.idiv(dummy, a, b); + + c.ret(a); + c.endFunc(); + } + + virtual bool run(void* _func, StringBuilder& result, StringBuilder& expect) { + typedef int (*Func)(int, int); + Func func = asmjit_cast(_func); + + int v0 = 2999; + int v1 = 245; + + int resultRet = func(v0, v1); + int expectRet = 2999 / 245; + + result.setFormat("result=%d", resultRet); + expect.setFormat("result=%d", expectRet); + + return resultRet == expectRet; + } +}; + // ============================================================================ // [X86Test_AllocSetz] // ============================================================================ @@ -2650,6 +2695,7 @@ X86TestSuite::X86TestSuite() : ADD_TEST(X86Test_AllocMany2); ADD_TEST(X86Test_AllocImul1); ADD_TEST(X86Test_AllocImul2); + ADD_TEST(X86Test_AllocIdiv1); ADD_TEST(X86Test_AllocSetz); ADD_TEST(X86Test_AllocShlRor); ADD_TEST(X86Test_AllocGpLo);