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 abde4c0a4c2013ddba01ea4a380115d3daacdc9b..8262ab6127d32856f2ae02bbf6e4485b11a499b6 100644 |
--- a/test/cctest/test-macro-assembler-x64.cc |
+++ b/test/cctest/test-macro-assembler-x64.cc |
@@ -35,51 +35,53 @@ |
#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::Representation; |
-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; |
-using v8::internal::Address; |
+namespace i = v8::internal; |
+using i::Address; |
+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::Representation; |
+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 |
@@ -97,8 +99,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(); |
} |
@@ -107,11 +109,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); |
} |
@@ -152,7 +154,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, |
@@ -240,7 +242,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 = |
@@ -292,7 +294,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, |
@@ -421,7 +423,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, |
@@ -466,7 +468,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, |
@@ -714,7 +716,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 = |
@@ -771,7 +773,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); |
@@ -790,13 +792,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); |
} |
@@ -836,11 +855,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); |
@@ -851,7 +873,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); |
@@ -887,7 +909,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); |
@@ -895,21 +917,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 = |
@@ -988,15 +1012,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); |
} |
@@ -1036,11 +1075,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); |
@@ -1051,7 +1094,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); |
@@ -1087,7 +1130,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); |
@@ -1095,21 +1138,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 = |
@@ -1201,7 +1247,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, |
@@ -1307,7 +1353,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 = |
@@ -1418,7 +1464,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 = |
@@ -1516,7 +1562,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 = |
@@ -1586,7 +1632,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 = |
@@ -1666,7 +1712,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 = |
@@ -1748,7 +1794,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 = |
@@ -1832,7 +1878,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 = |
@@ -1900,7 +1946,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 = |
@@ -1997,7 +2043,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 = |
@@ -2104,7 +2150,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 = |
@@ -2174,7 +2220,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 = |
@@ -2239,7 +2285,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 = |
@@ -2280,7 +2326,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; } |