OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this | 1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #include <cmath> | 5 #include <cmath> |
6 #include <functional> | 6 #include <functional> |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/utils/random-number-generator.h" | 10 #include "src/base/utils/random-number-generator.h" |
(...skipping 5635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5646 MachineType::Int32(), MachineType::Int32(), MachineType::Int32(), | 5646 MachineType::Int32(), MachineType::Int32(), MachineType::Int32(), |
5647 MachineType::Int32(), MachineType::Int32(), MachineType::Int32(), | 5647 MachineType::Int32(), MachineType::Int32(), MachineType::Int32(), |
5648 function, param, param, param, param, param, param, param, param)); | 5648 function, param, param, param, param, param, param, param, param)); |
5649 FOR_INT32_INPUTS(i) { | 5649 FOR_INT32_INPUTS(i) { |
5650 int32_t const x = *i; | 5650 int32_t const x = *i; |
5651 CHECK_EQ(x * 8, m.Call(x)); | 5651 CHECK_EQ(x * 8, m.Call(x)); |
5652 } | 5652 } |
5653 } | 5653 } |
5654 #endif // USE_SIMULATOR | 5654 #endif // USE_SIMULATOR |
5655 | 5655 |
5656 template <typename T> | |
5657 void TestExternalReferenceFunction( | |
5658 BufferedRawMachineAssemblerTester<int32_t>* m, ExternalReference ref, | |
5659 T (*comparison)(T)) { | |
5660 T parameter; | |
5661 | |
5662 Node* function = m->ExternalConstant(ref); | |
5663 m->CallCFunction1(MachineType::Pointer(), MachineType::Pointer(), function, | |
5664 m->PointerConstant(¶meter)); | |
5665 m->Return(m->Int32Constant(4356)); | |
5666 FOR_FLOAT64_INPUTS(i) { | |
5667 parameter = *i; | |
5668 m->Call(); | |
5669 CheckDoubleEq(comparison(*i), parameter); | |
5670 } | |
5671 } | |
5672 | |
5673 TEST(RunCallExternalReferenceF32Trunc) { | |
5674 BufferedRawMachineAssemblerTester<int32_t> m; | |
5675 ExternalReference ref = | |
5676 ExternalReference::f32_trunc_wrapper_function(m.isolate()); | |
5677 TestExternalReferenceFunction<float>(&m, ref, truncf); | |
5678 } | |
5679 | |
5680 TEST(RunCallExternalReferenceF32Floor) { | |
5681 BufferedRawMachineAssemblerTester<int32_t> m; | |
5682 ExternalReference ref = | |
5683 ExternalReference::f32_floor_wrapper_function(m.isolate()); | |
5684 TestExternalReferenceFunction<float>(&m, ref, floorf); | |
5685 } | |
5686 | |
5687 TEST(RunCallExternalReferenceF32Ceil) { | |
5688 BufferedRawMachineAssemblerTester<int32_t> m; | |
5689 ExternalReference ref = | |
5690 ExternalReference::f32_ceil_wrapper_function(m.isolate()); | |
5691 TestExternalReferenceFunction<float>(&m, ref, ceilf); | |
5692 } | |
5693 | |
5694 TEST(RunCallExternalReferenceF32RoundTiesEven) { | |
5695 BufferedRawMachineAssemblerTester<int32_t> m; | |
5696 ExternalReference ref = | |
5697 ExternalReference::f32_nearest_int_wrapper_function(m.isolate()); | |
5698 TestExternalReferenceFunction<float>(&m, ref, nearbyintf); | |
5699 } | |
5700 | |
5701 TEST(RunCallExternalReferenceF64Trunc) { | |
5702 BufferedRawMachineAssemblerTester<int32_t> m; | |
5703 ExternalReference ref = | |
5704 ExternalReference::f64_trunc_wrapper_function(m.isolate()); | |
5705 TestExternalReferenceFunction<double>(&m, ref, trunc); | |
5706 } | |
5707 | |
5708 TEST(RunCallExternalReferenceF64Floor) { | |
5709 BufferedRawMachineAssemblerTester<int32_t> m; | |
5710 ExternalReference ref = | |
5711 ExternalReference::f64_floor_wrapper_function(m.isolate()); | |
5712 TestExternalReferenceFunction<double>(&m, ref, floor); | |
5713 } | |
5714 | |
5715 TEST(RunCallExternalReferenceF64Ceil) { | |
5716 BufferedRawMachineAssemblerTester<int32_t> m; | |
5717 ExternalReference ref = | |
5718 ExternalReference::f64_ceil_wrapper_function(m.isolate()); | |
5719 TestExternalReferenceFunction<double>(&m, ref, ceil); | |
5720 } | |
5721 | |
5722 TEST(RunCallExternalReferenceF64RoundTiesEven) { | |
5723 BufferedRawMachineAssemblerTester<int32_t> m; | |
5724 ExternalReference ref = | |
5725 ExternalReference::f64_nearest_int_wrapper_function(m.isolate()); | |
5726 TestExternalReferenceFunction<double>(&m, ref, nearbyint); | |
5727 } | |
5728 | |
5729 #if V8_TARGET_ARCH_64_BIT | 5656 #if V8_TARGET_ARCH_64_BIT |
5730 // TODO(titzer): run int64 tests on all platforms when supported. | 5657 // TODO(titzer): run int64 tests on all platforms when supported. |
5731 TEST(RunCheckedLoadInt64) { | 5658 TEST(RunCheckedLoadInt64) { |
5732 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL}; | 5659 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL}; |
5733 RawMachineAssemblerTester<int64_t> m(MachineType::Int32()); | 5660 RawMachineAssemblerTester<int64_t> m(MachineType::Int32()); |
5734 Node* base = m.PointerConstant(buffer); | 5661 Node* base = m.PointerConstant(buffer); |
5735 Node* index = m.Parameter(0); | 5662 Node* index = m.Parameter(0); |
5736 Node* length = m.Int32Constant(16); | 5663 Node* length = m.Int32Constant(16); |
5737 Node* load = m.AddNode(m.machine()->CheckedLoad(MachineType::Int64()), base, | 5664 Node* load = m.AddNode(m.machine()->CheckedLoad(MachineType::Int64()), base, |
5738 index, length); | 5665 index, length); |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6254 r.Goto(&merge); | 6181 r.Goto(&merge); |
6255 r.Bind(&merge); | 6182 r.Bind(&merge); |
6256 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); | 6183 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); |
6257 r.Return(phi); | 6184 r.Return(phi); |
6258 CHECK_EQ(1, r.Call(1)); | 6185 CHECK_EQ(1, r.Call(1)); |
6259 } | 6186 } |
6260 | 6187 |
6261 } // namespace compiler | 6188 } // namespace compiler |
6262 } // namespace internal | 6189 } // namespace internal |
6263 } // namespace v8 | 6190 } // namespace v8 |
OLD | NEW |