summaryrefslogtreecommitdiff
path: root/Source/UnitTests/Common/x64EmitterTest.cpp
diff options
context:
space:
mode:
authorFiora <fioraaeterna@gmail.com>2014-09-13 16:39:34 -0700
committerFiora <fioraaeterna@gmail.com>2014-09-13 16:39:34 -0700
commit1bd8d1ee98631accc2b3e87d77c033f1fdf090b5 (patch)
tree7ce5caf3c1ee06ef4448e7686184eefcdd035519 /Source/UnitTests/Common/x64EmitterTest.cpp
parent18d83a310e4e1d985ea70f0e5848a6ec830d3565 (diff)
Add immediate tests for WriteNormalOp
also fix a bug in Bochs that was preventing adc from passing.
Diffstat (limited to 'Source/UnitTests/Common/x64EmitterTest.cpp')
-rw-r--r--Source/UnitTests/Common/x64EmitterTest.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/Source/UnitTests/Common/x64EmitterTest.cpp b/Source/UnitTests/Common/x64EmitterTest.cpp
index 8051e10b07..8cbfad64fe 100644
--- a/Source/UnitTests/Common/x64EmitterTest.cpp
+++ b/Source/UnitTests/Common/x64EmitterTest.cpp
@@ -471,7 +471,7 @@ SHIFT_TEST(SAR)
}; \
for (const auto& regset : regsets) \
for (const auto& r : regset.regs) \
- { \
+ { \
emitter->Name(regset.bits, R(r.reg), R(RAX)); \
emitter->Name(regset.bits, R(RAX), R(r.reg)); \
emitter->Name(regset.bits, R(r.reg), Imm8(0x42)); \
@@ -480,7 +480,7 @@ SHIFT_TEST(SAR)
#Name " " + regset.out_name + ", " + r.name + " " \
#Name " " + r.name + ", 0x42 " \
#Name " " + regset.size + " ptr ds:[r12], " + r.name); \
- } \
+ } \
}
BT_TEST(BT)
@@ -506,14 +506,14 @@ BT_TEST(BTC)
}; \
for (const auto& regset : regsets) \
for (const auto& r : regset.regs) \
- { \
+ { \
emitter->Name(regset.bits, R(r.reg)); \
emitter->Name(regset.bits, MatR(RAX)); \
emitter->Name(regset.bits, MatR(R12)); \
ExpectDisassembly(#Name " " + r.name + " " \
#Name " " + regset.size + " ptr ds:[rax] " \
#Name " " + regset.size + " ptr ds:[r12]"); \
- } \
+ } \
}
ONE_OP_ARITH_TEST(NOT)
@@ -527,12 +527,14 @@ ONE_OP_ARITH_TEST(NEG)
std::vector<NamedReg> regs; \
std::string size; \
std::string rax_name; \
+ Gen::OpArg imm; \
+ std::string immname; \
} regsets[] = { \
- { 8, reg8names, "byte", "al" }, \
- { 8, reg8hnames, "byte", "al" }, \
- { 16, reg16names, "word", "ax" }, \
- { 32, reg32names, "dword", "eax" }, \
- { 64, reg64names, "qword", "rax" }, \
+ { 8, reg8names, "byte", "al", Imm8(0xEF), "0xef" }, \
+ { 8, reg8hnames, "byte", "al", Imm8(0xEF), "0xef" }, \
+ { 16, reg16names, "word", "ax", Imm16(0xBEEF), "0xbeef" }, \
+ { 32, reg32names, "dword", "eax", Imm32(0xDEADBEEF), "0xdeadbeef" }, \
+ { 64, reg64names, "qword", "rax", Imm32(0xDEADBEEF), "0xffffffffdeadbeef" }, \
}; \
for (const auto& regset : regsets) \
for (const auto& r : regset.regs) \
@@ -541,10 +543,12 @@ ONE_OP_ARITH_TEST(NEG)
emitter->Name(regset.bits, R(RAX), R(r.reg)); \
emitter->Name(regset.bits, R(r.reg), MatR(RAX)); \
emitter->Name(regset.bits, MatR(RAX), R(r.reg)); \
+ emitter->Name(regset.bits, R(r.reg), regset.imm); \
ExpectDisassembly(#Name " " + r.name + ", " + regset.rax_name + " " \
#Name " " + regset.rax_name + ", " + r.name + " " \
#Name " " + r.name + ", " + regset.size + " ptr ds:[rax] " \
- #Name " " + regset.size + " ptr ds:[rax], " + r.name); \
+ #Name " " + regset.size + " ptr ds:[rax], " + r.name + " " \
+ #Name " " + r.name + ", " + regset.immname ); \
} \
}