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 <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 4932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4943 CHECK_EQ(expected, result); | 4943 CHECK_EQ(expected, result); |
4944 } | 4944 } |
4945 } | 4945 } |
4946 } | 4946 } |
4947 | 4947 |
4948 | 4948 |
4949 TEST(RunFloat32Abs) { | 4949 TEST(RunFloat32Abs) { |
4950 float input = -1.0; | 4950 float input = -1.0; |
4951 float result = 0.0; | 4951 float result = 0.0; |
4952 RawMachineAssemblerTester<int32_t> m; | 4952 RawMachineAssemblerTester<int32_t> m; |
4953 if (!m.machine()->HasFloat32Abs()) return; | |
4954 m.StoreToPointer(&result, kMachFloat32, | 4953 m.StoreToPointer(&result, kMachFloat32, |
4955 m.Float32Abs(m.LoadFromPointer(&input, kMachFloat32))); | 4954 m.Float32Abs(m.LoadFromPointer(&input, kMachFloat32))); |
4956 m.Return(m.Int32Constant(0)); | 4955 m.Return(m.Int32Constant(0)); |
4957 FOR_FLOAT32_INPUTS(i) { | 4956 FOR_FLOAT32_INPUTS(i) { |
4958 input = *i; | 4957 input = *i; |
4959 float expected = std::abs(input); | 4958 float expected = std::abs(input); |
4960 CHECK_EQ(0, m.Call()); | 4959 CHECK_EQ(0, m.Call()); |
4961 CheckFloatEq(expected, result); | 4960 CheckFloatEq(expected, result); |
4962 } | 4961 } |
4963 } | 4962 } |
4964 | 4963 |
4965 | 4964 |
4966 TEST(RunFloat64Abs) { | 4965 TEST(RunFloat64Abs) { |
4967 double input = -1.0; | 4966 double input = -1.0; |
4968 double result = 0.0; | 4967 double result = 0.0; |
4969 RawMachineAssemblerTester<int32_t> m; | 4968 RawMachineAssemblerTester<int32_t> m; |
4970 if (!m.machine()->HasFloat64Abs()) return; | |
4971 m.StoreToPointer(&result, kMachFloat64, | 4969 m.StoreToPointer(&result, kMachFloat64, |
4972 m.Float64Abs(m.LoadFromPointer(&input, kMachFloat64))); | 4970 m.Float64Abs(m.LoadFromPointer(&input, kMachFloat64))); |
4973 m.Return(m.Int32Constant(0)); | 4971 m.Return(m.Int32Constant(0)); |
4974 FOR_FLOAT64_INPUTS(i) { | 4972 FOR_FLOAT64_INPUTS(i) { |
4975 input = *i; | 4973 input = *i; |
4976 double expected = std::abs(input); | 4974 double expected = std::abs(input); |
4977 CHECK_EQ(0, m.Call()); | 4975 CHECK_EQ(0, m.Call()); |
4978 CheckDoubleEq(expected, result); | 4976 CheckDoubleEq(expected, result); |
4979 } | 4977 } |
4980 } | 4978 } |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5144 m.Return(m.Int32Constant(0)); | 5142 m.Return(m.Int32Constant(0)); |
5145 for (size_t i = 0; i < arraysize(kValues); ++i) { | 5143 for (size_t i = 0; i < arraysize(kValues); ++i) { |
5146 input = kValues[i]; | 5144 input = kValues[i]; |
5147 CHECK_EQ(0, m.Call()); | 5145 CHECK_EQ(0, m.Call()); |
5148 double expected = round(kValues[i]); | 5146 double expected = round(kValues[i]); |
5149 CHECK_EQ(expected, result); | 5147 CHECK_EQ(expected, result); |
5150 } | 5148 } |
5151 } | 5149 } |
5152 | 5150 |
5153 #endif // V8_TURBOFAN_TARGET | 5151 #endif // V8_TURBOFAN_TARGET |
OLD | NEW |