diff options
Diffstat (limited to 'deps/v8/test/cctest/test-macro-assembler-x64.cc')
-rw-r--r-- | deps/v8/test/cctest/test-macro-assembler-x64.cc | 281 |
1 files changed, 152 insertions, 129 deletions
diff --git a/deps/v8/test/cctest/test-macro-assembler-x64.cc b/deps/v8/test/cctest/test-macro-assembler-x64.cc index 49d57aed21..a110ed76aa 100644 --- a/deps/v8/test/cctest/test-macro-assembler-x64.cc +++ b/deps/v8/test/cctest/test-macro-assembler-x64.cc @@ -33,6 +33,7 @@ #include "src/heap/factory.h" #include "src/macro-assembler.h" #include "src/objects-inl.h" +#include "src/objects/smi.h" #include "src/simulator.h" #include "test/cctest/cctest.h" #include "test/common/assembler-tester.h" @@ -76,9 +77,9 @@ TEST(Smi) { bool is_in_range = number >= Smi::kMinValue && number <= Smi::kMaxValue; CHECK_EQ(is_in_range, is_valid); if (is_valid) { - Smi* smi_from_intptr = Smi::FromIntptr(number); + Smi smi_from_intptr = Smi::FromIntptr(number); if (static_cast<int>(number) == number) { // Is a 32-bit int. - Smi* smi_from_int = Smi::FromInt(static_cast<int32_t>(number)); + Smi smi_from_int = Smi::FromInt(static_cast<int32_t>(number)); CHECK_EQ(smi_from_int, smi_from_intptr); } int64_t smi_value = smi_from_intptr->value(); @@ -87,11 +88,10 @@ TEST(Smi) { } } - -static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi* value) { +static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi value) { __ movl(rax, Immediate(id)); __ Move(rcx, value); - __ Set(rdx, reinterpret_cast<intptr_t>(value)); + __ Set(rdx, static_cast<intptr_t>(value.ptr())); __ cmpq(rcx, rdx); __ j(not_equal, exit); } @@ -101,15 +101,14 @@ static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi* value) { TEST(SmiMove) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. EntryCode(masm); Label exit; - TestMoveSmi(masm, &exit, 1, Smi::kZero); + TestMoveSmi(masm, &exit, 1, Smi::zero()); TestMoveSmi(masm, &exit, 2, Smi::FromInt(127)); TestMoveSmi(masm, &exit, 3, Smi::FromInt(128)); TestMoveSmi(masm, &exit, 4, Smi::FromInt(255)); @@ -129,9 +128,9 @@ TEST(SmiMove) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -186,11 +185,9 @@ void TestSmiCompare(MacroAssembler* masm, Label* exit, int id, int x, int y) { TEST(SmiCompare) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = - AllocateAssemblerBuffer(&allocated, 2 * Assembler::kMinimalBufferSize); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(2 * Assembler::kMinimalBufferSize); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; EntryCode(masm); @@ -223,9 +220,9 @@ TEST(SmiCompare) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -233,10 +230,9 @@ TEST(SmiCompare) { TEST(SmiTag) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; EntryCode(masm); @@ -245,35 +241,35 @@ TEST(SmiTag) { __ movq(rax, Immediate(1)); // Test number. __ movq(rcx, Immediate(0)); __ SmiTag(rcx, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::kZero)); + __ Set(rdx, Smi::kZero.ptr()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(2)); // Test number. __ movq(rcx, Immediate(1024)); __ SmiTag(rcx, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(1024))); + __ Set(rdx, Smi::FromInt(1024).ptr()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(3)); // Test number. __ movq(rcx, Immediate(-1)); __ SmiTag(rcx, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(-1))); + __ Set(rdx, Smi::FromInt(-1).ptr()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(4)); // Test number. __ movq(rcx, Immediate(Smi::kMaxValue)); __ SmiTag(rcx, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMaxValue))); + __ Set(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(5)); // Test number. __ movq(rcx, Immediate(Smi::kMinValue)); __ SmiTag(rcx, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMinValue))); + __ Set(rdx, Smi::FromInt(Smi::kMinValue).ptr()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); @@ -282,35 +278,35 @@ TEST(SmiTag) { __ movq(rax, Immediate(6)); // Test number. __ movq(rcx, Immediate(0)); __ SmiTag(r8, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::kZero)); + __ Set(rdx, Smi::zero().ptr()); __ cmpq(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(7)); // Test number. __ movq(rcx, Immediate(1024)); __ SmiTag(r8, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(1024))); + __ Set(rdx, Smi::FromInt(1024).ptr()); __ cmpq(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(8)); // Test number. __ movq(rcx, Immediate(-1)); __ SmiTag(r8, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(-1))); + __ Set(rdx, Smi::FromInt(-1).ptr()); __ cmpq(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(9)); // Test number. __ movq(rcx, Immediate(Smi::kMaxValue)); __ SmiTag(r8, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMaxValue))); + __ Set(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); __ cmpq(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(10)); // Test number. __ movq(rcx, Immediate(Smi::kMinValue)); __ SmiTag(r8, rcx); - __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMinValue))); + __ Set(rdx, Smi::FromInt(Smi::kMinValue).ptr()); __ cmpq(r8, rdx); __ j(not_equal, &exit); @@ -322,9 +318,9 @@ TEST(SmiTag) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -332,10 +328,9 @@ TEST(SmiTag) { TEST(SmiCheck) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; EntryCode(masm); @@ -398,9 +393,9 @@ TEST(SmiCheck) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -431,10 +426,9 @@ void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) { TEST(SmiIndex) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; EntryCode(masm); @@ -453,9 +447,9 @@ TEST(SmiIndex) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -466,10 +460,9 @@ TEST(OperandOffset) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; Label exit; @@ -494,9 +487,9 @@ TEST(OperandOffset) { // r15 = rsp[3] // rbx = rsp[5] // r13 = rsp[7] - __ leaq(r14, Operand(rsp, 3 * kPointerSize)); - __ leaq(r13, Operand(rbp, -3 * kPointerSize)); - __ leaq(rbx, Operand(rbp, -5 * kPointerSize)); + __ leaq(r14, Operand(rsp, 3 * kSystemPointerSize)); + __ leaq(r13, Operand(rbp, -3 * kSystemPointerSize)); + __ leaq(rbx, Operand(rbp, -5 * kSystemPointerSize)); __ movl(rcx, Immediate(2)); __ Move(r8, reinterpret_cast<Address>(&data[128]), RelocInfo::NONE); __ movl(rax, Immediate(1)); @@ -511,12 +504,12 @@ TEST(OperandOffset) { // Test 2. // Zero to non-zero displacement. - __ movl(rdx, Operand(sp0, 2 * kPointerSize)); + __ movl(rdx, Operand(sp0, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x107)); __ j(not_equal, &exit); __ incq(rax); - Operand sp2 = Operand(rsp, 2 * kPointerSize); + Operand sp2 = Operand(rsp, 2 * kSystemPointerSize); // Test 3. __ movl(rdx, sp2); // Sanity check. @@ -524,18 +517,18 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(sp2, 2 * kPointerSize)); + __ movl(rdx, Operand(sp2, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x105)); __ j(not_equal, &exit); __ incq(rax); // Non-zero to zero displacement. - __ movl(rdx, Operand(sp2, -2 * kPointerSize)); + __ movl(rdx, Operand(sp2, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x109)); __ j(not_equal, &exit); __ incq(rax); - Operand sp2c2 = Operand(rsp, rcx, times_pointer_size, 2 * kPointerSize); + Operand sp2c2 = Operand(rsp, rcx, times_pointer_size, 2 * kSystemPointerSize); // Test 6. __ movl(rdx, sp2c2); // Sanity check. @@ -543,13 +536,13 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(sp2c2, 2 * kPointerSize)); + __ movl(rdx, Operand(sp2c2, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x103)); __ j(not_equal, &exit); __ incq(rax); // Non-zero to zero displacement. - __ movl(rdx, Operand(sp2c2, -2 * kPointerSize)); + __ movl(rdx, Operand(sp2c2, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x107)); __ j(not_equal, &exit); __ incq(rax); @@ -564,12 +557,12 @@ TEST(OperandOffset) { __ incq(rax); // Zero to non-zero displacement. - __ movl(rdx, Operand(bp0, -2 * kPointerSize)); + __ movl(rdx, Operand(bp0, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x102)); __ j(not_equal, &exit); __ incq(rax); - Operand bp2 = Operand(rbp, -2 * kPointerSize); + Operand bp2 = Operand(rbp, -2 * kSystemPointerSize); // Test 11. __ movl(rdx, bp2); // Sanity check. @@ -578,17 +571,18 @@ TEST(OperandOffset) { __ incq(rax); // Non-zero to zero displacement. - __ movl(rdx, Operand(bp2, 2 * kPointerSize)); + __ movl(rdx, Operand(bp2, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x100)); __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bp2, -2 * kPointerSize)); + __ movl(rdx, Operand(bp2, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x104)); __ j(not_equal, &exit); __ incq(rax); - Operand bp2c4 = Operand(rbp, rcx, times_pointer_size, -4 * kPointerSize); + Operand bp2c4 = + Operand(rbp, rcx, times_pointer_size, -4 * kSystemPointerSize); // Test 14: __ movl(rdx, bp2c4); // Sanity check. @@ -596,12 +590,12 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bp2c4, 2 * kPointerSize)); + __ movl(rdx, Operand(bp2c4, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x100)); __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bp2c4, -2 * kPointerSize)); + __ movl(rdx, Operand(bp2c4, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x104)); __ j(not_equal, &exit); __ incq(rax); @@ -614,17 +608,17 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bx0, 5 * kPointerSize)); + __ movl(rdx, Operand(bx0, 5 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x100)); __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bx0, -4 * kPointerSize)); + __ movl(rdx, Operand(bx0, -4 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x109)); __ j(not_equal, &exit); __ incq(rax); - Operand bx2 = Operand(rbx, 2 * kPointerSize); + Operand bx2 = Operand(rbx, 2 * kSystemPointerSize); // Test 20. __ movl(rdx, bx2); // Sanity check. @@ -632,18 +626,19 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bx2, 2 * kPointerSize)); + __ movl(rdx, Operand(bx2, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x101)); __ j(not_equal, &exit); __ incq(rax); // Non-zero to zero displacement. - __ movl(rdx, Operand(bx2, -2 * kPointerSize)); + __ movl(rdx, Operand(bx2, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x105)); __ j(not_equal, &exit); __ incq(rax); - Operand bx2c2 = Operand(rbx, rcx, times_pointer_size, -2 * kPointerSize); + Operand bx2c2 = + Operand(rbx, rcx, times_pointer_size, -2 * kSystemPointerSize); // Test 23. __ movl(rdx, bx2c2); // Sanity check. @@ -651,12 +646,12 @@ TEST(OperandOffset) { __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bx2c2, 2 * kPointerSize)); + __ movl(rdx, Operand(bx2c2, 2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x103)); __ j(not_equal, &exit); __ incq(rax); - __ movl(rdx, Operand(bx2c2, -2 * kPointerSize)); + __ movl(rdx, Operand(bx2c2, -2 * kSystemPointerSize)); __ cmpl(rdx, Immediate(0x107)); __ j(not_equal, &exit); __ incq(rax); @@ -794,7 +789,7 @@ TEST(OperandOffset) { __ movl(rax, Immediate(0)); __ bind(&exit); - __ leaq(rsp, Operand(rbp, kPointerSize)); + __ leaq(rsp, Operand(rbp, kSystemPointerSize)); __ popq(rbp); __ popq(rbx); __ popq(r14); @@ -805,9 +800,9 @@ TEST(OperandOffset) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -816,146 +811,159 @@ TEST(OperandOffset) { TEST(LoadAndStoreWithRepresentation) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. EntryCode(masm); - __ subq(rsp, Immediate(1 * kPointerSize)); + __ subq(rsp, Immediate(1 * kSystemPointerSize)); Label exit; // Test 1. __ movq(rax, Immediate(1)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movq(rcx, Immediate(-1)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::UInteger8()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::UInteger8()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(255)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::UInteger8()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::UInteger8()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 2. __ movq(rax, Immediate(2)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ Set(rcx, V8_2PART_UINT64_C(0xDEADBEAF, 12345678)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Smi()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, Representation::Smi()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ Set(rdx, V8_2PART_UINT64_C(0xDEADBEAF, 12345678)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Smi()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), Representation::Smi()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 3. __ movq(rax, Immediate(3)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movq(rcx, Immediate(-1)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Integer32()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::Integer32()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(-1)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Integer32()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::Integer32()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 4. __ movq(rax, Immediate(4)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movl(rcx, Immediate(0x44332211)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::HeapObject()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::HeapObject()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(0x44332211)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::HeapObject()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::HeapObject()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 5. __ movq(rax, Immediate(5)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ Set(rcx, V8_2PART_UINT64_C(0x12345678, DEADBEAF)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Tagged()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, Representation::Tagged()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ Set(rdx, V8_2PART_UINT64_C(0x12345678, DEADBEAF)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Tagged()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), Representation::Tagged()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 6. __ movq(rax, Immediate(6)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ Set(rcx, V8_2PART_UINT64_C(0x11223344, 55667788)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::External()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::External()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ Set(rdx, V8_2PART_UINT64_C(0x11223344, 55667788)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::External()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::External()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 7. __ movq(rax, Immediate(7)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movq(rcx, Immediate(-1)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Integer8()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::Integer8()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(255)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Integer8()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::Integer8()); __ movq(rcx, Immediate(-1)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 8. __ movq(rax, Immediate(8)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movq(rcx, Immediate(-1)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Integer16()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::Integer16()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(65535)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Integer16()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::Integer16()); __ movq(rcx, Immediate(-1)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); // Test 9. __ movq(rax, Immediate(9)); // Test number. - __ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); + __ movq(Operand(rsp, 0 * kSystemPointerSize), Immediate(0)); __ movq(rcx, Immediate(-1)); - __ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::UInteger16()); - __ movq(rcx, Operand(rsp, 0 * kPointerSize)); + __ Store(Operand(rsp, 0 * kSystemPointerSize), rcx, + Representation::UInteger16()); + __ movq(rcx, Operand(rsp, 0 * kSystemPointerSize)); __ movl(rdx, Immediate(65535)); __ cmpq(rcx, rdx); __ j(not_equal, &exit); - __ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::UInteger16()); + __ Load(rdx, Operand(rsp, 0 * kSystemPointerSize), + Representation::UInteger16()); __ cmpq(rcx, rdx); __ j(not_equal, &exit); __ xorq(rax, rax); // Success. __ bind(&exit); - __ addq(rsp, Immediate(1 * kPointerSize)); + __ addq(rsp, Immediate(1 * kSystemPointerSize)); ExitCode(masm); __ ret(0); CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } @@ -1085,10 +1093,9 @@ void TestFloat64x2Neg(MacroAssembler* masm, Label* exit, double x, double y) { TEST(SIMDMacros) { Isolate* isolate = CcTest::i_isolate(); HandleScope handles(isolate); - size_t allocated; - byte* buffer = AllocateAssemblerBuffer(&allocated); - MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated), - v8::internal::CodeObjectRequired::kYes); + auto buffer = AllocateAssemblerBuffer(); + MacroAssembler assembler(isolate, v8::internal::CodeObjectRequired::kYes, + buffer->CreateView()); MacroAssembler* masm = &assembler; EntryCode(masm); @@ -1107,13 +1114,29 @@ TEST(SIMDMacros) { CodeDesc desc; masm->GetCode(isolate, &desc); - MakeAssemblerBufferExecutable(buffer, allocated); + buffer->MakeExecutable(); // Call the function from C++. - auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer); + auto f = GeneratedCode<F0>::FromBuffer(CcTest::i_isolate(), buffer->start()); int result = f.Call(); CHECK_EQ(0, result); } +TEST(AreAliased) { + DCHECK(!AreAliased(rax)); + DCHECK(!AreAliased(rax, no_reg)); + DCHECK(!AreAliased(no_reg, rax, no_reg)); + + DCHECK(AreAliased(rax, rax)); + DCHECK(!AreAliased(no_reg, no_reg)); + + DCHECK(!AreAliased(rax, rbx, rcx, rdx, no_reg)); + DCHECK(AreAliased(rax, rbx, rcx, rdx, rax, no_reg)); + + // no_regs are allowed in + DCHECK(!AreAliased(rax, no_reg, rbx, no_reg, rcx, no_reg, rdx, no_reg)); + DCHECK(AreAliased(rax, no_reg, rbx, no_reg, rcx, no_reg, rdx, rax, no_reg)); +} + #undef __ } // namespace test_macro_assembler_x64 |