From 3daa6ab259961af9f31fb4270a7f7876afede2b0 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 7 Jan 2015 11:15:00 +0100 Subject: x64Emitter: fix MOVLPD/MOVHPD These instructions were using the wrong prefix which turned MOVLPD(reg, mem) into MOVDDUP(reg, mem) and made the rest of them invalid. --- Source/UnitTests/Common/x64EmitterTest.cpp | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'Source/UnitTests/Common/x64EmitterTest.cpp') diff --git a/Source/UnitTests/Common/x64EmitterTest.cpp b/Source/UnitTests/Common/x64EmitterTest.cpp index 83a3741e7f..a6b6a7e81a 100644 --- a/Source/UnitTests/Common/x64EmitterTest.cpp +++ b/Source/UnitTests/Common/x64EmitterTest.cpp @@ -728,9 +728,42 @@ TWO_OP_SSE_TEST(UCOMISS, "dword") TWO_OP_SSE_TEST(COMISD, "qword") TWO_OP_SSE_TEST(UCOMISD, "qword") +// register-only instructions +#define TWO_OP_SSE_REG_TEST(Name, MemBits) \ + TEST_F(x64EmitterTest, Name) \ + { \ + for (const auto& r1 : xmmnames) \ + { \ + for (const auto& r2 : xmmnames) \ + { \ + emitter->Name(r1.reg, r2.reg); \ + ExpectDisassembly(#Name " " + r1.name + ", " + r2.name); \ + } \ + } \ + } + +TWO_OP_SSE_REG_TEST(MOVHLPS, "qword") +TWO_OP_SSE_REG_TEST(MOVLHPS, "qword") + +// "register + memory"-only instructions +#define TWO_OP_SSE_MEM_TEST(Name, MemBits) \ + TEST_F(x64EmitterTest, Name) \ + { \ + for (const auto& r1 : xmmnames) \ + { \ + emitter->Name(r1.reg, MatR(R12)); \ + ExpectDisassembly(#Name " " + r1.name + ", " MemBits " ptr ds:[r12]"); \ + emitter->Name(MatR(R12), r1.reg); \ + ExpectDisassembly(#Name " " MemBits " ptr ds:[r12], " + r1.name); \ + } \ + } + +TWO_OP_SSE_MEM_TEST(MOVLPD, "qword") +TWO_OP_SSE_MEM_TEST(MOVHPD, "qword") + // TODO: CMPSS/SD // TODO: SHUFPS/PD -// TODO: SSE MOVs +// TODO: more SSE MOVs // TODO: MOVMSK TEST_F(x64EmitterTest, MASKMOVDQU) -- cgit v1.2.3 From 1efa9b8b720445f56db535bd1ab34b99c86ea1ef Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 7 Jan 2015 11:09:51 +0100 Subject: x64Emitter: add MOVLPS/MOVHPS --- Source/UnitTests/Common/x64EmitterTest.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/UnitTests/Common/x64EmitterTest.cpp') diff --git a/Source/UnitTests/Common/x64EmitterTest.cpp b/Source/UnitTests/Common/x64EmitterTest.cpp index a6b6a7e81a..6b875752f8 100644 --- a/Source/UnitTests/Common/x64EmitterTest.cpp +++ b/Source/UnitTests/Common/x64EmitterTest.cpp @@ -758,6 +758,8 @@ TWO_OP_SSE_REG_TEST(MOVLHPS, "qword") } \ } +TWO_OP_SSE_MEM_TEST(MOVLPS, "qword") +TWO_OP_SSE_MEM_TEST(MOVHPS, "qword") TWO_OP_SSE_MEM_TEST(MOVLPD, "qword") TWO_OP_SSE_MEM_TEST(MOVHPD, "qword") -- cgit v1.2.3