Index: test/cctest/test-assembler-x64.cc |
diff --git a/test/cctest/test-assembler-x64.cc b/test/cctest/test-assembler-x64.cc |
index f100b73485be788b4027fd49d1172c6822425e38..61771a1e7bc5ab3bffd2a9df7542c57c87ad3a34 100644 |
--- a/test/cctest/test-assembler-x64.cc |
+++ b/test/cctest/test-assembler-x64.cc |
@@ -48,6 +48,12 @@ using v8::internal::rcx; |
using v8::internal::rdx; |
using v8::internal::rbp; |
using v8::internal::rsp; |
+using v8::internal::r8; |
+using v8::internal::r9; |
+using v8::internal::r12; |
+using v8::internal::r13; |
+using v8::internal::times_1; |
+ |
using v8::internal::FUNCTION_CAST; |
using v8::internal::CodeDesc; |
using v8::internal::less_equal; |
@@ -289,4 +295,47 @@ TEST(AssemblerX64LoopImmediates) { |
CHECK_EQ(1, result); |
} |
+ |
+TEST(OperandRegisterDependency) { |
+ int offsets[4] = {0, 1, 0xfed, 0xbeefcad}; |
+ for (int i = 0; i < 4; i++) { |
+ int offset = offsets[i]; |
+ CHECK(Operand(rax, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rax, offset).depends_on_register(r8)); |
+ CHECK(!Operand(rax, offset).depends_on_register(rcx)); |
+ |
+ CHECK(Operand(rax, rax, times_1, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rax, rax, times_1, offset).depends_on_register(r8)); |
+ CHECK(!Operand(rax, rax, times_1, offset).depends_on_register(rcx)); |
+ |
+ CHECK(Operand(rax, rcx, times_1, offset).depends_on_register(rax)); |
+ CHECK(Operand(rax, rcx, times_1, offset).depends_on_register(rcx)); |
+ CHECK(!Operand(rax, rcx, times_1, offset).depends_on_register(r8)); |
+ CHECK(!Operand(rax, rcx, times_1, offset).depends_on_register(r9)); |
+ CHECK(!Operand(rax, rcx, times_1, offset).depends_on_register(rdx)); |
+ CHECK(!Operand(rax, rcx, times_1, offset).depends_on_register(rsp)); |
+ |
+ CHECK(Operand(rsp, offset).depends_on_register(rsp)); |
+ CHECK(!Operand(rsp, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rsp, offset).depends_on_register(r12)); |
+ |
+ CHECK(Operand(rbp, offset).depends_on_register(rbp)); |
+ CHECK(!Operand(rbp, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rbp, offset).depends_on_register(r13)); |
+ |
+ CHECK(Operand(rbp, rax, times_1, offset).depends_on_register(rbp)); |
+ CHECK(Operand(rbp, rax, times_1, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rbp, rax, times_1, offset).depends_on_register(rcx)); |
+ CHECK(!Operand(rbp, rax, times_1, offset).depends_on_register(r13)); |
+ CHECK(!Operand(rbp, rax, times_1, offset).depends_on_register(r8)); |
+ CHECK(!Operand(rbp, rax, times_1, offset).depends_on_register(rsp)); |
+ |
+ CHECK(Operand(rsp, rbp, times_1, offset).depends_on_register(rsp)); |
+ CHECK(Operand(rsp, rbp, times_1, offset).depends_on_register(rbp)); |
+ CHECK(!Operand(rsp, rbp, times_1, offset).depends_on_register(rax)); |
+ CHECK(!Operand(rsp, rbp, times_1, offset).depends_on_register(r12)); |
+ CHECK(!Operand(rsp, rbp, times_1, offset).depends_on_register(r13)); |
+ } |
+} |
+ |
#undef __ |