summaryrefslogtreecommitdiff
path: root/Source/UnitTests/Common
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2015-01-08 19:04:14 -0600
committerRyan Houdek <Sonicadvance1@gmail.com>2015-01-08 19:04:14 -0600
commit6bc274a9683bbf893ba303744148087dd0c56f2e (patch)
tree4fa31051c48ac1c26ac6a1a76ff932cf736d098e /Source/UnitTests/Common
parentfeba284b6ddb6015dbf308635e8cb81a8dcb1747 (diff)
parent1efa9b8b720445f56db535bd1ab34b99c86ea1ef (diff)
Merge pull request #1844 from Tilka/sse_mov
x64Emitter: fix MOVLPD/MOVHPD
Diffstat (limited to 'Source/UnitTests/Common')
-rw-r--r--Source/UnitTests/Common/x64EmitterTest.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/Source/UnitTests/Common/x64EmitterTest.cpp b/Source/UnitTests/Common/x64EmitterTest.cpp
index 83a3741e7f..6b875752f8 100644
--- a/Source/UnitTests/Common/x64EmitterTest.cpp
+++ b/Source/UnitTests/Common/x64EmitterTest.cpp
@@ -728,9 +728,44 @@ 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(MOVLPS, "qword")
+TWO_OP_SSE_MEM_TEST(MOVHPS, "qword")
+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)