summaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/test-macro-assembler-x64.cc
diff options
context:
space:
mode:
authorMichaƫl Zasso <targos@protonmail.com>2018-01-24 20:16:06 +0100
committerMyles Borins <mylesborins@google.com>2018-01-24 15:02:20 -0800
commit4c4af643e5042d615a60c6bbc05aee9d81b903e5 (patch)
tree3fb0a97988fe4439ae3ae06f26915d1dcf8cab92 /deps/v8/test/cctest/test-macro-assembler-x64.cc
parentfa9f31a4fda5a3782c652e56e394465805ebb50f (diff)
downloadnode-new-4c4af643e5042d615a60c6bbc05aee9d81b903e5.tar.gz
deps: update V8 to 6.4.388.40
PR-URL: https://github.com/nodejs/node/pull/17489 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'deps/v8/test/cctest/test-macro-assembler-x64.cc')
-rw-r--r--deps/v8/test/cctest/test-macro-assembler-x64.cc575
1 files changed, 25 insertions, 550 deletions
diff --git a/deps/v8/test/cctest/test-macro-assembler-x64.cc b/deps/v8/test/cctest/test-macro-assembler-x64.cc
index 6da2ee492f..5d94412d9b 100644
--- a/deps/v8/test/cctest/test-macro-assembler-x64.cc
+++ b/deps/v8/test/cctest/test-macro-assembler-x64.cc
@@ -52,7 +52,6 @@ typedef int (*F0)();
#define __ masm->
-
static void EntryCode(MacroAssembler* masm) {
// Smi constant register is callee save.
__ pushq(kRootRegister);
@@ -98,14 +97,11 @@ 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) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler; // Create a pointer for the __ macro.
EntryCode(masm);
@@ -184,14 +180,11 @@ void TestSmiCompare(MacroAssembler* masm, Label* exit, int id, int x, int y) {
// Test that we can compare smis for equality (and more).
TEST(SmiCompare) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 2, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;
@@ -233,14 +226,11 @@ TEST(SmiCompare) {
TEST(Integer32ToSmi) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;
@@ -333,14 +323,11 @@ TEST(Integer32ToSmi) {
}
TEST(SmiCheck) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;
@@ -409,443 +396,6 @@ TEST(SmiCheck) {
CHECK_EQ(0, result);
}
-static void SmiAddTest(MacroAssembler* masm,
- Label* exit,
- int id,
- int first,
- int second) {
- __ movl(rcx, Immediate(first));
- __ Integer32ToSmi(rcx, rcx);
- __ movl(rdx, Immediate(second));
- __ Integer32ToSmi(rdx, rdx);
- __ movl(r8, Immediate(first + second));
- __ Integer32ToSmi(r8, r8);
-
- __ movl(rax, Immediate(id)); // Test number.
- __ SmiAdd(r9, rcx, rdx, exit);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- __ incq(rax);
- __ SmiAdd(rcx, rcx, rdx, exit);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- __ movl(rcx, Immediate(first));
- __ Integer32ToSmi(rcx, rcx);
-
- __ incq(rax);
- __ SmiAddConstant(r9, rcx, Smi::FromInt(second));
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(second));
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- __ movl(rcx, Immediate(first));
- __ Integer32ToSmi(rcx, rcx);
-
- SmiOperationConstraints constraints =
- SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnOverflow;
- __ incq(rax);
- __ SmiAddConstant(r9, rcx, Smi::FromInt(second), constraints, exit);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- __ incq(rax);
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), constraints, exit);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- __ movl(rcx, Immediate(first));
- __ Integer32ToSmi(rcx, rcx);
-
- constraints = SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnNoOverflow;
- Label done;
- __ incq(rax);
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), constraints, &done);
- __ jmp(exit);
- __ bind(&done);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-}
-
-
-static void SmiAddOverflowTest(MacroAssembler* masm,
- Label* exit,
- int id,
- int x) {
- // Adds a Smi to x so that the addition overflows.
- CHECK(x != 0); // Can't overflow by adding a Smi.
- int y_max = (x > 0) ? (Smi::kMaxValue + 0) : (Smi::kMinValue - x - 1);
- int y_min = (x > 0) ? (Smi::kMaxValue - x + 1) : (Smi::kMinValue + 0);
-
- __ movl(rax, Immediate(id));
- __ Move(rcx, Smi::FromInt(x));
- __ movq(r11, rcx); // Store original Smi value of x in r11.
- __ Move(rdx, Smi::FromInt(y_min));
- {
- Label overflow_ok;
- __ SmiAdd(r9, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAdd(rcx, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- SmiOperationConstraints constraints =
- SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnOverflow;
- __ movq(rcx, r11);
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- __ Move(rdx, Smi::FromInt(y_max));
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAdd(r9, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAdd(rcx, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- __ movq(rcx, r11);
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- constraints = SmiOperationConstraint::kBailoutOnOverflow;
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(equal, exit);
- }
-}
-
-
-TEST(SmiAdd) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 3, &actual_size, true));
- CHECK(buffer);
- Isolate* isolate = CcTest::i_isolate();
- HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
- v8::internal::CodeObjectRequired::kYes);
-
- MacroAssembler* masm = &assembler;
- EntryCode(masm);
- Label exit;
-
- // No-overflow tests.
- SmiAddTest(masm, &exit, 0x10, 1, 2);
- SmiAddTest(masm, &exit, 0x20, 1, -2);
- SmiAddTest(masm, &exit, 0x30, -1, 2);
- SmiAddTest(masm, &exit, 0x40, -1, -2);
- SmiAddTest(masm, &exit, 0x50, 0x1000, 0x2000);
- SmiAddTest(masm, &exit, 0x60, Smi::kMinValue, 5);
- SmiAddTest(masm, &exit, 0x70, Smi::kMaxValue, -5);
- SmiAddTest(masm, &exit, 0x80, Smi::kMaxValue, Smi::kMinValue);
-
- SmiAddOverflowTest(masm, &exit, 0x90, -1);
- SmiAddOverflowTest(masm, &exit, 0xA0, 1);
- SmiAddOverflowTest(masm, &exit, 0xB0, 1024);
- SmiAddOverflowTest(masm, &exit, 0xC0, Smi::kMaxValue);
- SmiAddOverflowTest(masm, &exit, 0xD0, -2);
- SmiAddOverflowTest(masm, &exit, 0xE0, -42000);
- SmiAddOverflowTest(masm, &exit, 0xF0, Smi::kMinValue);
-
- __ xorq(rax, rax); // Success.
- __ bind(&exit);
- ExitCode(masm);
- __ ret(0);
-
- CodeDesc desc;
- masm->GetCode(isolate, &desc);
- // Call the function from C++.
- int result = FUNCTION_CAST<F0>(buffer)();
- CHECK_EQ(0, result);
-}
-
-
-static void SmiSubTest(MacroAssembler* masm,
- Label* exit,
- int id,
- int first,
- int second) {
- __ Move(rcx, Smi::FromInt(first));
- __ Move(rdx, Smi::FromInt(second));
- __ Move(r8, Smi::FromInt(first - second));
-
- __ movl(rax, Immediate(id)); // Test 0.
- __ SmiSub(r9, rcx, rdx, exit);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- __ incq(rax); // Test 1.
- __ SmiSub(rcx, rcx, rdx, exit);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- __ Move(rcx, Smi::FromInt(first));
-
- __ incq(rax); // Test 2.
- __ SmiSubConstant(r9, rcx, Smi::FromInt(second));
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- __ incq(rax); // Test 3.
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(second));
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- SmiOperationConstraints constraints =
- SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnOverflow;
- __ Move(rcx, Smi::FromInt(first));
- __ incq(rax); // Test 4.
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), constraints, exit);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-
- __ Move(rcx, Smi::FromInt(first));
- __ incq(rax); // Test 5.
- __ SmiSubConstant(r9, rcx, Smi::FromInt(second), constraints, exit);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
-
- constraints = SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnNoOverflow;
- __ Move(rcx, Smi::FromInt(first));
- Label done;
- __ incq(rax); // Test 6.
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), constraints, &done);
- __ jmp(exit);
- __ bind(&done);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
-}
-
-
-static void SmiSubOverflowTest(MacroAssembler* masm,
- Label* exit,
- int id,
- int x) {
- // Subtracts a Smi from x so that the subtraction overflows.
- CHECK(x != -1); // Can't overflow by subtracting a Smi.
- int y_max = (x < 0) ? (Smi::kMaxValue + 0) : (Smi::kMinValue + 0);
- int y_min = (x < 0) ? (Smi::kMaxValue + x + 2) : (Smi::kMinValue + x);
-
- __ movl(rax, Immediate(id));
- __ Move(rcx, Smi::FromInt(x));
- __ movq(r11, rcx); // Store original Smi value of x in r11.
- __ Move(rdx, Smi::FromInt(y_min));
- {
- Label overflow_ok;
- __ SmiSub(r9, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSub(rcx, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- SmiOperationConstraints constraints =
- SmiOperationConstraint::kPreserveSourceRegister |
- SmiOperationConstraint::kBailoutOnOverflow;
-
- __ movq(rcx, r11);
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- __ Move(rdx, Smi::FromInt(y_max));
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSub(r9, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSub(rcx, rcx, rdx, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- __ movq(rcx, r11);
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(not_equal, exit);
- }
-
- constraints = SmiOperationConstraint::kBailoutOnOverflow;
- __ movq(rcx, r11);
- {
- Label overflow_ok;
- __ incq(rax);
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), constraints, &overflow_ok);
- __ jmp(exit);
- __ bind(&overflow_ok);
- __ incq(rax);
- __ cmpq(rcx, r11);
- __ j(equal, exit);
- }
-}
-
-
-TEST(SmiSub) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 4, &actual_size, true));
- CHECK(buffer);
- Isolate* isolate = CcTest::i_isolate();
- HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
- v8::internal::CodeObjectRequired::kYes);
-
- MacroAssembler* masm = &assembler;
- EntryCode(masm);
- Label exit;
-
- SmiSubTest(masm, &exit, 0x10, 1, 2);
- SmiSubTest(masm, &exit, 0x20, 1, -2);
- SmiSubTest(masm, &exit, 0x30, -1, 2);
- SmiSubTest(masm, &exit, 0x40, -1, -2);
- SmiSubTest(masm, &exit, 0x50, 0x1000, 0x2000);
- SmiSubTest(masm, &exit, 0x60, Smi::kMinValue, -5);
- SmiSubTest(masm, &exit, 0x70, Smi::kMaxValue, 5);
- SmiSubTest(masm, &exit, 0x80, -Smi::kMaxValue, Smi::kMinValue);
- SmiSubTest(masm, &exit, 0x90, 0, Smi::kMaxValue);
-
- SmiSubOverflowTest(masm, &exit, 0xA0, 1);
- SmiSubOverflowTest(masm, &exit, 0xB0, 1024);
- SmiSubOverflowTest(masm, &exit, 0xC0, Smi::kMaxValue);
- SmiSubOverflowTest(masm, &exit, 0xD0, -2);
- SmiSubOverflowTest(masm, &exit, 0xE0, -42000);
- SmiSubOverflowTest(masm, &exit, 0xF0, Smi::kMinValue);
- SmiSubOverflowTest(masm, &exit, 0x100, 0);
-
- __ xorq(rax, rax); // Success.
- __ bind(&exit);
- ExitCode(masm);
- __ ret(0);
-
- CodeDesc desc;
- masm->GetCode(isolate, &desc);
- // Call the function from C++.
- int result = FUNCTION_CAST<F0>(buffer)();
- CHECK_EQ(0, result);
-}
-
void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) {
__ movl(rax, Immediate(id));
@@ -870,14 +420,11 @@ void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) {
}
TEST(SmiIndex) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 5, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;
@@ -902,82 +449,15 @@ TEST(SmiIndex) {
CHECK_EQ(0, result);
}
-void TestPositiveSmiPowerUp(MacroAssembler* masm, Label* exit, int id, int x) {
- CHECK(x >= 0);
- int powers[] = { 0, 1, 2, 3, 8, 16, 24, 31 };
- int power_count = 8;
- __ movl(rax, Immediate(id));
- for (int i = 0; i < power_count; i++) {
- int power = powers[i];
- intptr_t result = static_cast<intptr_t>(x) << power;
- __ Set(r8, result);
- __ Move(rcx, Smi::FromInt(x));
- __ movq(r11, rcx);
- __ PositiveSmiTimesPowerOfTwoToInteger64(rdx, rcx, power);
- __ cmpq(rdx, r8);
- __ j(not_equal, exit);
- __ incq(rax);
- __ cmpq(r11, rcx); // rcx unchanged.
- __ j(not_equal, exit);
- __ incq(rax);
- __ PositiveSmiTimesPowerOfTwoToInteger64(rcx, rcx, power);
- __ cmpq(rdx, r8);
- __ j(not_equal, exit);
- __ incq(rax);
- }
-}
-
-
-TEST(PositiveSmiTimesPowerOfTwoToInteger64) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 4, &actual_size, true));
- CHECK(buffer);
- Isolate* isolate = CcTest::i_isolate();
- HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
- v8::internal::CodeObjectRequired::kYes);
-
- MacroAssembler* masm = &assembler;
- EntryCode(masm);
- Label exit;
-
- TestPositiveSmiPowerUp(masm, &exit, 0x20, 0);
- TestPositiveSmiPowerUp(masm, &exit, 0x40, 1);
- TestPositiveSmiPowerUp(masm, &exit, 0x60, 127);
- TestPositiveSmiPowerUp(masm, &exit, 0x80, 128);
- TestPositiveSmiPowerUp(masm, &exit, 0xA0, 255);
- TestPositiveSmiPowerUp(masm, &exit, 0xC0, 256);
- TestPositiveSmiPowerUp(masm, &exit, 0x100, 65535);
- TestPositiveSmiPowerUp(masm, &exit, 0x120, 65536);
- TestPositiveSmiPowerUp(masm, &exit, 0x140, Smi::kMaxValue);
-
- __ xorq(rax, rax); // Success.
- __ bind(&exit);
- ExitCode(masm);
- __ ret(0);
-
- CodeDesc desc;
- masm->GetCode(isolate, &desc);
- // Call the function from C++.
- int result = FUNCTION_CAST<F0>(buffer)();
- CHECK_EQ(0, result);
-}
-
-
TEST(OperandOffset) {
uint32_t data[256];
for (uint32_t i = 0; i < 256; i++) { data[i] = i * 0x01010101; }
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 2, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;
@@ -1321,15 +801,13 @@ TEST(OperandOffset) {
TEST(LoadAndStoreWithRepresentation) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
+
MacroAssembler* masm = &assembler; // Create a pointer for the __ macro.
EntryCode(masm);
__ subq(rsp, Immediate(1 * kPointerSize));
@@ -1590,14 +1068,11 @@ void TestFloat64x2Neg(MacroAssembler* masm, Label* exit, double x, double y) {
}
TEST(SIMDMacros) {
- // Allocate an executable page of memory.
- size_t actual_size;
- byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
- Assembler::kMinimalBufferSize * 2, &actual_size, true));
- CHECK(buffer);
Isolate* isolate = CcTest::i_isolate();
HandleScope handles(isolate);
- MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
+ size_t allocated;
+ byte* buffer = AllocateAssemblerBuffer(&allocated);
+ MacroAssembler assembler(isolate, buffer, static_cast<int>(allocated),
v8::internal::CodeObjectRequired::kYes);
MacroAssembler* masm = &assembler;