| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <limits> | 5 #include <limits> |
| 6 #include "src/v8.h" | 6 #include "src/v8.h" |
| 7 | 7 |
| 8 #include "test/cctest/cctest.h" | 8 #include "test/cctest/cctest.h" |
| 9 #include "test/cctest/compiler/codegen-tester.h" | 9 #include "test/cctest/compiler/codegen-tester.h" |
| 10 #include "test/cctest/compiler/value-helper.h" | 10 #include "test/cctest/compiler/value-helper.h" |
| (...skipping 2482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2493 | 2493 |
| 2494 | 2494 |
| 2495 template <typename CType> | 2495 template <typename CType> |
| 2496 static void RunLoadImmIndex(MachineRepresentation rep) { | 2496 static void RunLoadImmIndex(MachineRepresentation rep) { |
| 2497 const int kNumElems = 3; | 2497 const int kNumElems = 3; |
| 2498 CType buffer[kNumElems]; | 2498 CType buffer[kNumElems]; |
| 2499 | 2499 |
| 2500 // initialize the buffer with raw data. | 2500 // initialize the buffer with raw data. |
| 2501 byte* raw = reinterpret_cast<byte*>(buffer); | 2501 byte* raw = reinterpret_cast<byte*>(buffer); |
| 2502 for (size_t i = 0; i < sizeof(buffer); i++) { | 2502 for (size_t i = 0; i < sizeof(buffer); i++) { |
| 2503 raw[i] = (i + sizeof(buffer)) ^ 0xAA; | 2503 raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA); |
| 2504 } | 2504 } |
| 2505 | 2505 |
| 2506 // Test with various large and small offsets. | 2506 // Test with various large and small offsets. |
| 2507 for (int offset = -1; offset <= 200000; offset *= -5) { | 2507 for (int offset = -1; offset <= 200000; offset *= -5) { |
| 2508 for (int i = 0; i < kNumElems; i++) { | 2508 for (int i = 0; i < kNumElems; i++) { |
| 2509 RawMachineAssemblerTester<CType> m; | 2509 RawMachineAssemblerTester<CType> m; |
| 2510 Node* base = m.PointerConstant(buffer - offset); | 2510 Node* base = m.PointerConstant(buffer - offset); |
| 2511 Node* index = m.Int32Constant((offset + i) * sizeof(buffer[0])); | 2511 Node* index = m.Int32Constant((offset + i) * sizeof(buffer[0])); |
| 2512 m.Return(m.Load(rep, base, index)); | 2512 m.Return(m.Load(rep, base, index)); |
| 2513 | 2513 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2532 template <typename CType> | 2532 template <typename CType> |
| 2533 static void RunLoadStore(MachineRepresentation rep) { | 2533 static void RunLoadStore(MachineRepresentation rep) { |
| 2534 const int kNumElems = 4; | 2534 const int kNumElems = 4; |
| 2535 CType buffer[kNumElems]; | 2535 CType buffer[kNumElems]; |
| 2536 | 2536 |
| 2537 for (int32_t x = 0; x < kNumElems; x++) { | 2537 for (int32_t x = 0; x < kNumElems; x++) { |
| 2538 int32_t y = kNumElems - x - 1; | 2538 int32_t y = kNumElems - x - 1; |
| 2539 // initialize the buffer with raw data. | 2539 // initialize the buffer with raw data. |
| 2540 byte* raw = reinterpret_cast<byte*>(buffer); | 2540 byte* raw = reinterpret_cast<byte*>(buffer); |
| 2541 for (size_t i = 0; i < sizeof(buffer); i++) { | 2541 for (size_t i = 0; i < sizeof(buffer); i++) { |
| 2542 raw[i] = (i + sizeof(buffer)) ^ 0xAA; | 2542 raw[i] = static_cast<byte>((i + sizeof(buffer)) ^ 0xAA); |
| 2543 } | 2543 } |
| 2544 | 2544 |
| 2545 RawMachineAssemblerTester<int32_t> m; | 2545 RawMachineAssemblerTester<int32_t> m; |
| 2546 int32_t OK = 0x29000 + x; | 2546 int32_t OK = 0x29000 + x; |
| 2547 Node* base = m.PointerConstant(buffer); | 2547 Node* base = m.PointerConstant(buffer); |
| 2548 Node* index0 = m.Int32Constant(x * sizeof(buffer[0])); | 2548 Node* index0 = m.Int32Constant(x * sizeof(buffer[0])); |
| 2549 Node* load = m.Load(rep, base, index0); | 2549 Node* load = m.Load(rep, base, index0); |
| 2550 Node* index1 = m.Int32Constant(y * sizeof(buffer[0])); | 2550 Node* index1 = m.Int32Constant(y * sizeof(buffer[0])); |
| 2551 m.Store(rep, base, index1, load); | 2551 m.Store(rep, base, index1, load); |
| 2552 m.Return(m.Int32Constant(OK)); | 2552 m.Return(m.Int32Constant(OK)); |
| (...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3696 } | 3696 } |
| 3697 m.Return(one); | 3697 m.Return(one); |
| 3698 m.Call(); | 3698 m.Call(); |
| 3699 for (int i = 0; i < kInputSize; i++) { | 3699 for (int i = 0; i < kInputSize; i++) { |
| 3700 CHECK_EQ(outputs[i], i + 2); | 3700 CHECK_EQ(outputs[i], i + 2); |
| 3701 } | 3701 } |
| 3702 } | 3702 } |
| 3703 | 3703 |
| 3704 | 3704 |
| 3705 TEST(RunSpillConstantsAndParameters) { | 3705 TEST(RunSpillConstantsAndParameters) { |
| 3706 static const size_t kInputSize = 1000; | 3706 static const int kInputSize = 1000; |
| 3707 static const int32_t kBase = 987; | 3707 static const int32_t kBase = 987; |
| 3708 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32); | 3708 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32); |
| 3709 int32_t outputs[kInputSize]; | 3709 int32_t outputs[kInputSize]; |
| 3710 Node* csts[kInputSize]; | 3710 Node* csts[kInputSize]; |
| 3711 Node* accs[kInputSize]; | 3711 Node* accs[kInputSize]; |
| 3712 Node* acc = m.Int32Constant(0); | 3712 Node* acc = m.Int32Constant(0); |
| 3713 for (size_t i = 0; i < kInputSize; i++) { | 3713 for (int i = 0; i < kInputSize; i++) { |
| 3714 csts[i] = m.Int32Constant(static_cast<int32_t>(kBase + i)); | 3714 csts[i] = m.Int32Constant(static_cast<int32_t>(kBase + i)); |
| 3715 } | 3715 } |
| 3716 for (size_t i = 0; i < kInputSize; i++) { | 3716 for (int i = 0; i < kInputSize; i++) { |
| 3717 acc = m.Int32Add(acc, csts[i]); | 3717 acc = m.Int32Add(acc, csts[i]); |
| 3718 accs[i] = acc; | 3718 accs[i] = acc; |
| 3719 } | 3719 } |
| 3720 for (size_t i = 0; i < kInputSize; i++) { | 3720 for (int i = 0; i < kInputSize; i++) { |
| 3721 m.StoreToPointer(&outputs[i], kMachineWord32, accs[i]); | 3721 m.StoreToPointer(&outputs[i], kMachineWord32, accs[i]); |
| 3722 } | 3722 } |
| 3723 m.Return(m.Int32Add(acc, m.Int32Add(m.Parameter(0), m.Parameter(1)))); | 3723 m.Return(m.Int32Add(acc, m.Int32Add(m.Parameter(0), m.Parameter(1)))); |
| 3724 FOR_INT32_INPUTS(i) { | 3724 FOR_INT32_INPUTS(i) { |
| 3725 FOR_INT32_INPUTS(j) { | 3725 FOR_INT32_INPUTS(j) { |
| 3726 int32_t expected = *i + *j; | 3726 int32_t expected = *i + *j; |
| 3727 for (size_t k = 0; k < kInputSize; k++) { | 3727 for (int k = 0; k < kInputSize; k++) { |
| 3728 expected += kBase + k; | 3728 expected += kBase + k; |
| 3729 } | 3729 } |
| 3730 CHECK_EQ(expected, m.Call(*i, *j)); | 3730 CHECK_EQ(expected, m.Call(*i, *j)); |
| 3731 expected = 0; | 3731 expected = 0; |
| 3732 for (size_t k = 0; k < kInputSize; k++) { | 3732 for (int k = 0; k < kInputSize; k++) { |
| 3733 expected += kBase + k; | 3733 expected += kBase + k; |
| 3734 CHECK_EQ(expected, outputs[k]); | 3734 CHECK_EQ(expected, outputs[k]); |
| 3735 } | 3735 } |
| 3736 } | 3736 } |
| 3737 } | 3737 } |
| 3738 } | 3738 } |
| 3739 | 3739 |
| 3740 | 3740 |
| 3741 TEST(RunNewSpaceConstantsInPhi) { | 3741 TEST(RunNewSpaceConstantsInPhi) { |
| 3742 RawMachineAssemblerTester<Object*> m(kMachineWord32); | 3742 RawMachineAssemblerTester<Object*> m(kMachineWord32); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3789 m.Return(one); | 3789 m.Return(one); |
| 3790 m.Call(); | 3790 m.Call(); |
| 3791 for (int i = 0; i < kInputSize; i++) { | 3791 for (int i = 0; i < kInputSize; i++) { |
| 3792 CHECK_EQ(outputs[i], i + 2); | 3792 CHECK_EQ(outputs[i], i + 2); |
| 3793 } | 3793 } |
| 3794 } | 3794 } |
| 3795 | 3795 |
| 3796 #endif // MACHINE_ASSEMBLER_SUPPORTS_CALL_C | 3796 #endif // MACHINE_ASSEMBLER_SUPPORTS_CALL_C |
| 3797 | 3797 |
| 3798 #endif | 3798 #endif |
| OLD | NEW |