diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2014-09-14 09:18:10 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2014-09-14 09:18:10 -0500 |
| commit | 4e16abd7428a020c136b35a96284f1af4b261f6e (patch) | |
| tree | 3772a61967a028e653bba64f199fcbfea50537eb /Source/UnitTests/Common/x64EmitterTest.cpp | |
| parent | 1f7871f9e2a9c560676fcd7a9961104af11b2ad6 (diff) | |
| parent | 40b18f09b2ce03f908b5303643b352d084b0c4b4 (diff) | |
Merge pull request #1083 from FioraAeterna/lzcnt
Add LZCNT support, use in cntlzw
Diffstat (limited to 'Source/UnitTests/Common/x64EmitterTest.cpp')
| -rw-r--r-- | Source/UnitTests/Common/x64EmitterTest.cpp | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/Source/UnitTests/Common/x64EmitterTest.cpp b/Source/UnitTests/Common/x64EmitterTest.cpp index ed2e7bd9ef..2977ad1b92 100644 --- a/Source/UnitTests/Common/x64EmitterTest.cpp +++ b/Source/UnitTests/Common/x64EmitterTest.cpp @@ -318,41 +318,35 @@ TEST_F(x64EmitterTest, CMOVcc_Register) } } -TEST_F(x64EmitterTest, BSF) -{ - emitter->BSF(64, R12, R(RAX)); - emitter->BSF(32, R12, R(RAX)); - emitter->BSF(16, R12, R(RAX)); - - emitter->BSF(64, R12, MatR(RAX)); - emitter->BSF(32, R12, MatR(RAX)); - emitter->BSF(16, R12, MatR(RAX)); - - ExpectDisassembly("bsf r12, rax " - "bsf r12d, eax " - "bsf r12w, ax " - "bsf r12, qword ptr ds:[rax] " - "bsf r12d, dword ptr ds:[rax] " - "bsf r12w, word ptr ds:[rax]"); -} +#define BITSEARCH_TEST(Name) \ + TEST_F(x64EmitterTest, Name) \ + { \ + struct { \ + int bits; \ + std::vector<NamedReg> regs; \ + std::string size; \ + std::string rax_name; \ + } regsets[] = { \ + { 16, reg16names, "word", "ax" }, \ + { 32, reg32names, "dword", "eax" }, \ + { 64, reg64names, "qword", "rax" }, \ + }; \ + for (const auto& regset : regsets) \ + for (const auto& r : regset.regs) \ + { \ + emitter->Name(regset.bits, r.reg, R(RAX)); \ + emitter->Name(regset.bits, RAX, R(r.reg)); \ + emitter->Name(regset.bits, r.reg, MatR(RAX)); \ + ExpectDisassembly(#Name " " + r.name + ", " + regset.rax_name + " " \ + #Name " " + regset.rax_name + ", " + r.name + " " \ + #Name " " + r.name + ", " + regset.size + " ptr ds:[rax] " ); \ + } \ + } -TEST_F(x64EmitterTest, BSR) -{ - emitter->BSR(64, R12, R(RAX)); - emitter->BSR(32, R12, R(RAX)); - emitter->BSR(16, R12, R(RAX)); - - emitter->BSR(64, R12, MatR(RAX)); - emitter->BSR(32, R12, MatR(RAX)); - emitter->BSR(16, R12, MatR(RAX)); - - ExpectDisassembly("bsr r12, rax " - "bsr r12d, eax " - "bsr r12w, ax " - "bsr r12, qword ptr ds:[rax] " - "bsr r12d, dword ptr ds:[rax] " - "bsr r12w, word ptr ds:[rax]"); -} +BITSEARCH_TEST(BSR); +BITSEARCH_TEST(BSF); +BITSEARCH_TEST(LZCNT); +BITSEARCH_TEST(TZCNT); TEST_F(x64EmitterTest, PREFETCH) { |
