| 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 // TODO(jochen): Remove this after the setting is turned on globally. | 5 // TODO(jochen): Remove this after the setting is turned on globally. |
| 6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
| 7 | 7 |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <functional> | 9 #include <functional> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 5137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5148 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); | 5148 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
| 5149 if (!m.machine()->Float64RoundDown().IsSupported()) return; | 5149 if (!m.machine()->Float64RoundDown().IsSupported()) return; |
| 5150 | 5150 |
| 5151 m.Return(m.Float64RoundDown(m.Parameter(0))); | 5151 m.Return(m.Float64RoundDown(m.Parameter(0))); |
| 5152 | 5152 |
| 5153 FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(std::floor(*i), m.Call(*i)); } | 5153 FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(std::floor(*i), m.Call(*i)); } |
| 5154 } | 5154 } |
| 5155 | 5155 |
| 5156 | 5156 |
| 5157 TEST(RunFloat64RoundDown2) { | 5157 TEST(RunFloat64RoundDown2) { |
| 5158 double input = -1.0; | 5158 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
| 5159 double result = 0.0; | |
| 5160 RawMachineAssemblerTester<int32_t> m; | |
| 5161 if (!m.machine()->Float64RoundDown().IsSupported()) return; | 5159 if (!m.machine()->Float64RoundDown().IsSupported()) return; |
| 5162 m.StoreToPointer(&result, kMachFloat64, | 5160 m.Return(m.Float64Sub(m.Float64Constant(-0.0), |
| 5163 m.Float64Sub(m.Float64Constant(-0.0), | 5161 m.Float64RoundDown(m.Float64Sub(m.Float64Constant(-0.0), |
| 5164 m.Float64RoundDown(m.Float64Sub( | 5162 m.Parameter(0))))); |
| 5165 m.Float64Constant(-0.0), | 5163 |
| 5166 m.LoadFromPointer(&input, kMachFloat64))))); | |
| 5167 m.Return(m.Int32Constant(0)); | |
| 5168 for (size_t i = 0; i < arraysize(kValues); ++i) { | 5164 for (size_t i = 0; i < arraysize(kValues); ++i) { |
| 5169 input = kValues[i]; | 5165 CHECK_EQ(std::ceil(kValues[i]), m.Call(kValues[i])); |
| 5170 CHECK_EQ(0, m.Call()); | |
| 5171 double expected = std::ceil(kValues[i]); | |
| 5172 CHECK_EQ(expected, result); | |
| 5173 } | 5166 } |
| 5174 } | 5167 } |
| 5175 | 5168 |
| 5176 | 5169 |
| 5170 TEST(RunFloat64RoundUp) { |
| 5171 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
| 5172 if (!m.machine()->Float64RoundUp().IsSupported()) return; |
| 5173 m.Return(m.Float64RoundUp(m.Parameter(0))); |
| 5174 |
| 5175 FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(std::ceil(*i), m.Call(*i)); } |
| 5176 } |
| 5177 |
| 5178 |
| 5177 TEST(RunFloat64RoundTruncate) { | 5179 TEST(RunFloat64RoundTruncate) { |
| 5178 double input = -1.0; | 5180 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
| 5179 double result = 0.0; | |
| 5180 RawMachineAssemblerTester<int32_t> m; | |
| 5181 if (!m.machine()->Float64RoundTruncate().IsSupported()) return; | 5181 if (!m.machine()->Float64RoundTruncate().IsSupported()) return; |
| 5182 m.StoreToPointer( | 5182 m.Return(m.Float64RoundTruncate(m.Parameter(0))); |
| 5183 &result, kMachFloat64, | |
| 5184 m.Float64RoundTruncate(m.LoadFromPointer(&input, kMachFloat64))); | |
| 5185 m.Return(m.Int32Constant(0)); | |
| 5186 for (size_t i = 0; i < arraysize(kValues); ++i) { | 5183 for (size_t i = 0; i < arraysize(kValues); ++i) { |
| 5187 input = kValues[i]; | 5184 CHECK_EQ(trunc(kValues[i]), m.Call(kValues[i])); |
| 5188 CHECK_EQ(0, m.Call()); | |
| 5189 double expected = trunc(kValues[i]); | |
| 5190 CHECK_EQ(expected, result); | |
| 5191 } | 5185 } |
| 5192 } | 5186 } |
| 5193 | 5187 |
| 5194 | 5188 |
| 5195 TEST(RunFloat64RoundTiesAway) { | 5189 TEST(RunFloat64RoundTiesAway) { |
| 5196 double input = -1.0; | 5190 BufferedRawMachineAssemblerTester<double> m(kMachFloat64); |
| 5197 double result = 0.0; | |
| 5198 RawMachineAssemblerTester<int32_t> m; | |
| 5199 if (!m.machine()->Float64RoundTiesAway().IsSupported()) return; | 5191 if (!m.machine()->Float64RoundTiesAway().IsSupported()) return; |
| 5200 m.StoreToPointer( | 5192 m.Return(m.Float64RoundTiesAway(m.Parameter(0))); |
| 5201 &result, kMachFloat64, | |
| 5202 m.Float64RoundTiesAway(m.LoadFromPointer(&input, kMachFloat64))); | |
| 5203 m.Return(m.Int32Constant(0)); | |
| 5204 for (size_t i = 0; i < arraysize(kValues); ++i) { | 5193 for (size_t i = 0; i < arraysize(kValues); ++i) { |
| 5205 input = kValues[i]; | 5194 CHECK_EQ(round(kValues[i]), m.Call(kValues[i])); |
| 5206 CHECK_EQ(0, m.Call()); | |
| 5207 double expected = round(kValues[i]); | |
| 5208 CHECK_EQ(expected, result); | |
| 5209 } | 5195 } |
| 5210 } | 5196 } |
| 5211 | 5197 |
| 5212 | 5198 |
| 5213 #if !USE_SIMULATOR | 5199 #if !USE_SIMULATOR |
| 5214 | 5200 |
| 5215 namespace { | 5201 namespace { |
| 5216 | 5202 |
| 5217 int32_t const kMagicFoo0 = 0xdeadbeef; | 5203 int32_t const kMagicFoo0 = 0xdeadbeef; |
| 5218 | 5204 |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5618 Node* call = r.AddNode(r.common()->Call(desc), phi); | 5604 Node* call = r.AddNode(r.common()->Call(desc), phi); |
| 5619 r.Return(call); | 5605 r.Return(call); |
| 5620 | 5606 |
| 5621 CHECK_EQ(33, r.Call(1)); | 5607 CHECK_EQ(33, r.Call(1)); |
| 5622 CHECK_EQ(44, r.Call(0)); | 5608 CHECK_EQ(44, r.Call(0)); |
| 5623 } | 5609 } |
| 5624 | 5610 |
| 5625 } // namespace compiler | 5611 } // namespace compiler |
| 5626 } // namespace internal | 5612 } // namespace internal |
| 5627 } // namespace v8 | 5613 } // namespace v8 |
| OLD | NEW |