| Index: test/cctest/test-macro-assembler-x64.cc
|
| diff --git a/test/cctest/test-macro-assembler-x64.cc b/test/cctest/test-macro-assembler-x64.cc
|
| index d9b6e3f081a05ddcc078e05ab16bdff11514d544..7f675a07756d7fe3a301be4a24dc402a6f299e4a 100644
|
| --- a/test/cctest/test-macro-assembler-x64.cc
|
| +++ b/test/cctest/test-macro-assembler-x64.cc
|
| @@ -35,49 +35,51 @@
|
| #include "serialize.h"
|
| #include "cctest.h"
|
|
|
| -using v8::internal::Assembler;
|
| -using v8::internal::CodeDesc;
|
| -using v8::internal::Condition;
|
| -using v8::internal::FUNCTION_CAST;
|
| -using v8::internal::HandleScope;
|
| -using v8::internal::Immediate;
|
| -using v8::internal::Isolate;
|
| -using v8::internal::Label;
|
| -using v8::internal::MacroAssembler;
|
| -using v8::internal::OS;
|
| -using v8::internal::Operand;
|
| -using v8::internal::RelocInfo;
|
| -using v8::internal::Smi;
|
| -using v8::internal::SmiIndex;
|
| -using v8::internal::byte;
|
| -using v8::internal::carry;
|
| -using v8::internal::greater;
|
| -using v8::internal::greater_equal;
|
| -using v8::internal::kIntSize;
|
| -using v8::internal::kPointerSize;
|
| -using v8::internal::kSmiTagMask;
|
| -using v8::internal::kSmiValueSize;
|
| -using v8::internal::less_equal;
|
| -using v8::internal::negative;
|
| -using v8::internal::not_carry;
|
| -using v8::internal::not_equal;
|
| -using v8::internal::not_zero;
|
| -using v8::internal::positive;
|
| -using v8::internal::r11;
|
| -using v8::internal::r13;
|
| -using v8::internal::r14;
|
| -using v8::internal::r15;
|
| -using v8::internal::r8;
|
| -using v8::internal::r9;
|
| -using v8::internal::rax;
|
| -using v8::internal::rbp;
|
| -using v8::internal::rbx;
|
| -using v8::internal::rcx;
|
| -using v8::internal::rdi;
|
| -using v8::internal::rdx;
|
| -using v8::internal::rsi;
|
| -using v8::internal::rsp;
|
| -using v8::internal::times_pointer_size;
|
| +namespace i = v8::internal;
|
| +using i::Assembler;
|
| +using i::CodeDesc;
|
| +using i::Condition;
|
| +using i::FUNCTION_CAST;
|
| +using i::HandleScope;
|
| +using i::Immediate;
|
| +using i::Isolate;
|
| +using i::Label;
|
| +using i::MacroAssembler;
|
| +using i::OS;
|
| +using i::Operand;
|
| +using i::RelocInfo;
|
| +using i::Smi;
|
| +using i::SmiIndex;
|
| +using i::byte;
|
| +using i::carry;
|
| +using i::greater;
|
| +using i::greater_equal;
|
| +using i::kIntSize;
|
| +using i::kPointerSize;
|
| +using i::kSmiTagMask;
|
| +using i::kSmiValueSize;
|
| +using i::less_equal;
|
| +using i::negative;
|
| +using i::not_carry;
|
| +using i::not_equal;
|
| +using i::equal;
|
| +using i::not_zero;
|
| +using i::positive;
|
| +using i::r11;
|
| +using i::r13;
|
| +using i::r14;
|
| +using i::r15;
|
| +using i::r8;
|
| +using i::r9;
|
| +using i::rax;
|
| +using i::rbp;
|
| +using i::rbx;
|
| +using i::rcx;
|
| +using i::rdi;
|
| +using i::rdx;
|
| +using i::rsi;
|
| +using i::rsp;
|
| +using i::times_pointer_size;
|
|
|
| // Test the x64 assembler by compiling some simple functions into
|
| // a buffer and executing them. These tests do not initialize the
|
| @@ -95,8 +97,8 @@ typedef int (*F0)();
|
|
|
| static void EntryCode(MacroAssembler* masm) {
|
| // Smi constant register is callee save.
|
| - __ push(v8::internal::kSmiConstantRegister);
|
| - __ push(v8::internal::kRootRegister);
|
| + __ push(i::kSmiConstantRegister);
|
| + __ push(i::kRootRegister);
|
| __ InitializeSmiConstantRegister();
|
| __ InitializeRootRegister();
|
| }
|
| @@ -105,11 +107,11 @@ static void EntryCode(MacroAssembler* masm) {
|
| static void ExitCode(MacroAssembler* masm) {
|
| // Return -1 if kSmiConstantRegister was clobbered during the test.
|
| __ Move(rdx, Smi::FromInt(1));
|
| - __ cmpq(rdx, v8::internal::kSmiConstantRegister);
|
| + __ cmpq(rdx, i::kSmiConstantRegister);
|
| __ movq(rdx, Immediate(-1));
|
| __ cmovq(not_equal, rax, rdx);
|
| - __ pop(v8::internal::kRootRegister);
|
| - __ pop(v8::internal::kSmiConstantRegister);
|
| + __ pop(i::kRootRegister);
|
| + __ pop(i::kSmiConstantRegister);
|
| }
|
|
|
|
|
| @@ -150,7 +152,7 @@ static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi* value) {
|
|
|
| // Test that we can move a Smi value literally into a register.
|
| TEST(SmiMove) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize,
|
| @@ -238,7 +240,7 @@ void TestSmiCompare(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
| // Test that we can compare smis for equality (and more).
|
| TEST(SmiCompare) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -290,7 +292,7 @@ TEST(SmiCompare) {
|
|
|
|
|
| TEST(Integer32ToSmi) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize,
|
| @@ -419,7 +421,7 @@ void TestI64PlusConstantToSmi(MacroAssembler* masm,
|
|
|
|
|
| TEST(Integer64PlusConstantToSmi) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize,
|
| @@ -464,7 +466,7 @@ TEST(Integer64PlusConstantToSmi) {
|
|
|
|
|
| TEST(SmiCheck) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize,
|
| @@ -712,7 +714,7 @@ void TestSmiNeg(MacroAssembler* masm, Label* exit, int id, int x) {
|
|
|
|
|
| TEST(SmiNeg) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -769,7 +771,7 @@ static void SmiAddTest(MacroAssembler* masm,
|
| __ j(not_equal, exit);
|
|
|
| __ incq(rax);
|
| - __ SmiAdd(rcx, rcx, rdx, exit); \
|
| + __ SmiAdd(rcx, rcx, rdx, exit);
|
| __ cmpq(rcx, r8);
|
| __ j(not_equal, exit);
|
|
|
| @@ -788,13 +790,30 @@ static void SmiAddTest(MacroAssembler* masm,
|
| __ movl(rcx, Immediate(first));
|
| __ Integer32ToSmi(rcx, rcx);
|
|
|
| + i::SmiOperationExecutionMode mode;
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| __ incq(rax);
|
| - __ SmiAddConstant(r9, rcx, Smi::FromInt(second), exit);
|
| + __ SmiAddConstant(r9, rcx, Smi::FromInt(second), mode, exit);
|
| __ cmpq(r9, r8);
|
| __ j(not_equal, exit);
|
|
|
| __ incq(rax);
|
| - __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), exit);
|
| + __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), mode, exit);
|
| + __ cmpq(rcx, r8);
|
| + __ j(not_equal, exit);
|
| +
|
| + __ movl(rcx, Immediate(first));
|
| + __ Integer32ToSmi(rcx, rcx);
|
| +
|
| + mode.RemoveAll();
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_NO_OVERFLOW);
|
| + Label done;
|
| + __ incq(rax);
|
| + __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), mode, &done);
|
| + __ jmp(exit);
|
| + __ bind(&done);
|
| __ cmpq(rcx, r8);
|
| __ j(not_equal, exit);
|
| }
|
| @@ -834,11 +853,14 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
|
| __ j(not_equal, exit);
|
| }
|
|
|
| + i::SmiOperationExecutionMode mode;
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| __ movq(rcx, r11);
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), &overflow_ok);
|
| + __ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -849,7 +871,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), &overflow_ok);
|
| + __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -885,7 +907,7 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), &overflow_ok);
|
| + __ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -893,21 +915,23 @@ static void SmiAddOverflowTest(MacroAssembler* masm,
|
| __ j(not_equal, exit);
|
| }
|
|
|
| + mode.RemoveAll();
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), &overflow_ok);
|
| + __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| __ cmpq(rcx, r11);
|
| - __ j(not_equal, exit);
|
| + __ j(equal, exit);
|
| }
|
| }
|
|
|
|
|
| TEST(SmiAdd) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -986,15 +1010,30 @@ static void SmiSubTest(MacroAssembler* masm,
|
| __ cmpq(rcx, r8);
|
| __ j(not_equal, exit);
|
|
|
| + i::SmiOperationExecutionMode mode;
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| __ Move(rcx, Smi::FromInt(first));
|
| -
|
| __ incq(rax); // Test 4.
|
| - __ SmiSubConstant(r9, rcx, Smi::FromInt(second), exit);
|
| - __ cmpq(r9, r8);
|
| + __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), mode, exit);
|
| + __ cmpq(rcx, r8);
|
| __ j(not_equal, exit);
|
|
|
| + __ Move(rcx, Smi::FromInt(first));
|
| __ incq(rax); // Test 5.
|
| - __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), exit);
|
| + __ SmiSubConstant(r9, rcx, Smi::FromInt(second), mode, exit);
|
| + __ cmpq(r9, r8);
|
| + __ j(not_equal, exit);
|
| +
|
| + mode.RemoveAll();
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_NO_OVERFLOW);
|
| + __ Move(rcx, Smi::FromInt(first));
|
| + Label done;
|
| + __ incq(rax); // Test 6.
|
| + __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), mode, &done);
|
| + __ jmp(exit);
|
| + __ bind(&done);
|
| __ cmpq(rcx, r8);
|
| __ j(not_equal, exit);
|
| }
|
| @@ -1034,11 +1073,15 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
|
| __ j(not_equal, exit);
|
| }
|
|
|
| + i::SmiOperationExecutionMode mode;
|
| + mode.Add(i::PRESERVE_SOURCE_REGISTER);
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| +
|
| __ movq(rcx, r11);
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), &overflow_ok);
|
| + __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -1049,7 +1092,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), &overflow_ok);
|
| + __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -1085,7 +1128,7 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiSubConstant(r9, rcx, Smi::FromInt(y_max), &overflow_ok);
|
| + __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| @@ -1093,21 +1136,24 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
|
| __ j(not_equal, exit);
|
| }
|
|
|
| + mode.RemoveAll();
|
| + mode.Add(i::BAILOUT_ON_OVERFLOW);
|
| + __ movq(rcx, r11);
|
| {
|
| Label overflow_ok;
|
| __ incq(rax);
|
| - __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), &overflow_ok);
|
| + __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), mode, &overflow_ok);
|
| __ jmp(exit);
|
| __ bind(&overflow_ok);
|
| __ incq(rax);
|
| __ cmpq(rcx, r11);
|
| - __ j(not_equal, exit);
|
| + __ j(equal, exit);
|
| }
|
| }
|
|
|
|
|
| TEST(SmiSub) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1199,7 +1245,7 @@ void TestSmiMul(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiMul) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize,
|
| @@ -1305,7 +1351,7 @@ void TestSmiDiv(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiDiv) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1416,7 +1462,7 @@ void TestSmiMod(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiMod) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1514,7 +1560,7 @@ void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) {
|
|
|
|
|
| TEST(SmiIndex) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1584,7 +1630,7 @@ void TestSelectNonSmi(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiSelectNonSmi) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1664,7 +1710,7 @@ void TestSmiAnd(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiAnd) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1746,7 +1792,7 @@ void TestSmiOr(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiOr) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1830,7 +1876,7 @@ void TestSmiXor(MacroAssembler* masm, Label* exit, int id, int x, int y) {
|
|
|
|
|
| TEST(SmiXor) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1898,7 +1944,7 @@ void TestSmiNot(MacroAssembler* masm, Label* exit, int id, int x) {
|
|
|
|
|
| TEST(SmiNot) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -1995,7 +2041,7 @@ void TestSmiShiftLeft(MacroAssembler* masm, Label* exit, int id, int x) {
|
|
|
|
|
| TEST(SmiShiftLeft) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -2102,7 +2148,7 @@ void TestSmiShiftLogicalRight(MacroAssembler* masm,
|
|
|
|
|
| TEST(SmiShiftLogicalRight) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -2172,7 +2218,7 @@ void TestSmiShiftArithmeticRight(MacroAssembler* masm,
|
|
|
|
|
| TEST(SmiShiftArithmeticRight) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -2237,7 +2283,7 @@ void TestPositiveSmiPowerUp(MacroAssembler* masm, Label* exit, int id, int x) {
|
|
|
|
|
| TEST(PositiveSmiTimesPowerOfTwoToInteger64) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| // Allocate an executable page of memory.
|
| size_t actual_size;
|
| byte* buffer =
|
| @@ -2278,7 +2324,7 @@ TEST(PositiveSmiTimesPowerOfTwoToInteger64) {
|
|
|
|
|
| TEST(OperandOffset) {
|
| - v8::internal::V8::Initialize(NULL);
|
| + i::V8::Initialize(NULL);
|
| int data[256];
|
| for (int i = 0; i < 256; i++) { data[i] = i * 0x01010101; }
|
|
|
|
|