diff --git a/native b/native index 1150598ce4..2b6ed975e2 160000 --- a/native +++ b/native @@ -1 +1 @@ -Subproject commit 1150598ce463c99fbb08ba4177a7937692fe9bc0 +Subproject commit 2b6ed975e28de79d7dc34f225238eae631199afc diff --git a/unittest/TestX64Emitter.cpp b/unittest/TestX64Emitter.cpp new file mode 100644 index 0000000000..dd8fb3a54d --- /dev/null +++ b/unittest/TestX64Emitter.cpp @@ -0,0 +1,43 @@ +#include "Common/X64Emitter.h" +#include "Core/MIPS/x86/RegCacheFPU.h" +#include "Core/MIPS/x86/Jit.h" +#include "Core/MIPS/JitCommon/JitState.h" +#include "Core/MIPS/JitCommon/JitCommon.h" +#include "Core/MIPS/MIPSVFPUUtils.h" +#include "ext/disarm.h" + +#include "UnitTest.h" + +static const u8 *prevStart = NULL; + +bool CheckLast(Gen::XEmitter &emit, const char *comp) { + auto vec = DisassembleX86(prevStart, emit.GetCodePtr() - prevStart); + EXPECT_EQ_STR(vec[0], std::string(comp)); + return true; +} + +void PrintLast(Gen::XEmitter &emit) { + for (const u8 *p = prevStart; p < emit.GetCodePtr(); p++) { + printf("%02x ", *p); + } + printf("\n"); +} + +bool TestX64Emitter() { + using namespace Gen; + + u32 code[512]; + XEmitter emitter((u8 *)code); + + prevStart = emitter.GetCodePtr(); + emitter.VADDSD(XMM0, XMM1, R(XMM7)); + RET(CheckLast(emitter, "vaddsd xmm0, xmm1, xmm7")); + + prevStart = emitter.GetCodePtr(); + emitter.VMULSD(XMM0, XMM1, R(XMM7)); + RET(CheckLast(emitter, "vmulsd xmm0, xmm1, xmm7")); + + // Just for checking. + PrintLast(emitter); + return true; +} diff --git a/unittest/UnitTest.cpp b/unittest/UnitTest.cpp index 7dfb2d17a8..77b1d60b3d 100644 --- a/unittest/UnitTest.cpp +++ b/unittest/UnitTest.cpp @@ -344,11 +344,14 @@ struct TestItem { #define TEST_ITEM(name) { #name, &Test ##name, } bool TestArmEmitter(); +bool TestX64Emitter(); + TestItem availableTests[] = { TEST_ITEM(Asin), TEST_ITEM(SinCos), TEST_ITEM(ArmEmitter), + TEST_ITEM(X64Emitter), TEST_ITEM(VFPUSinCos), TEST_ITEM(MathUtil), TEST_ITEM(Parsers), diff --git a/unittest/UnitTests.vcxproj b/unittest/UnitTests.vcxproj index 0d1d2ab6b2..3ab743c220 100644 --- a/unittest/UnitTests.vcxproj +++ b/unittest/UnitTests.vcxproj @@ -177,6 +177,7 @@ + diff --git a/unittest/UnitTests.vcxproj.filters b/unittest/UnitTests.vcxproj.filters index 2da1297b3c..6ab9eba1d2 100644 --- a/unittest/UnitTests.vcxproj.filters +++ b/unittest/UnitTests.vcxproj.filters @@ -5,6 +5,7 @@ +