Chromium Code Reviews| 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/ieee754.h" | 10 #include "src/base/ieee754.h" |
| (...skipping 3772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3783 Float64BinopTester bt(&m); | 3783 Float64BinopTester bt(&m); |
| 3784 bt.AddReturn(m.Float64Min(bt.param0, bt.param1)); | 3784 bt.AddReturn(m.Float64Min(bt.param0, bt.param1)); |
| 3785 | 3785 |
| 3786 FOR_FLOAT64_INPUTS(pl) { | 3786 FOR_FLOAT64_INPUTS(pl) { |
| 3787 FOR_FLOAT64_INPUTS(pr) { | 3787 FOR_FLOAT64_INPUTS(pr) { |
| 3788 CHECK_DOUBLE_EQ(fmin(*pl, *pr), bt.call(*pl, *pr)); | 3788 CHECK_DOUBLE_EQ(fmin(*pl, *pr), bt.call(*pl, *pr)); |
| 3789 } | 3789 } |
| 3790 } | 3790 } |
| 3791 } | 3791 } |
| 3792 | 3792 |
| 3793 namespace { | |
| 3794 | |
| 3795 float fmax(float x, float y) { | |
|
titzer
2016/08/17 11:26:09
Can you move this to a common place so that it can
ahaas
2016/08/18 07:13:20
Done.
| |
| 3796 if (std::isnan(x)) return x; | |
| 3797 if (std::isnan(y)) return y; | |
| 3798 if (std::signbit(x) < std::signbit(y)) return x; | |
| 3799 return std::max(x, y); | |
| 3800 } | |
| 3801 | |
| 3802 float fmin(float x, float y) { | |
| 3803 if (std::isnan(x)) return x; | |
| 3804 if (std::isnan(y)) return y; | |
| 3805 if (std::signbit(x) < std::signbit(y)) return y; | |
| 3806 return std::min(x, y); | |
| 3807 } | |
| 3808 | |
| 3809 } // namespace | |
| 3810 | |
| 3811 TEST(RunFloat32Max) { | |
| 3812 RawMachineAssemblerTester<int32_t> m; | |
| 3813 Float32BinopTester bt(&m); | |
| 3814 bt.AddReturn(m.Float32Max(bt.param0, bt.param1)); | |
| 3815 | |
| 3816 FOR_FLOAT32_INPUTS(pl) { | |
| 3817 FOR_FLOAT32_INPUTS(pr) { | |
| 3818 CHECK_FLOAT_EQ(fmax(*pl, *pr), bt.call(*pl, *pr)); | |
| 3819 } | |
| 3820 } | |
| 3821 } | |
| 3822 | |
| 3823 TEST(RunFloat32Min) { | |
| 3824 RawMachineAssemblerTester<int32_t> m; | |
| 3825 Float32BinopTester bt(&m); | |
| 3826 bt.AddReturn(m.Float32Min(bt.param0, bt.param1)); | |
| 3827 | |
| 3828 FOR_FLOAT32_INPUTS(pl) { | |
| 3829 FOR_FLOAT32_INPUTS(pr) { | |
| 3830 CHECK_FLOAT_EQ(fmin(*pl, *pr), bt.call(*pl, *pr)); | |
| 3831 } | |
| 3832 } | |
| 3833 } | |
| 3793 | 3834 |
| 3794 TEST(RunFloat32SubP) { | 3835 TEST(RunFloat32SubP) { |
| 3795 RawMachineAssemblerTester<int32_t> m; | 3836 RawMachineAssemblerTester<int32_t> m; |
| 3796 Float32BinopTester bt(&m); | 3837 Float32BinopTester bt(&m); |
| 3797 | 3838 |
| 3798 bt.AddReturn(m.Float32Sub(bt.param0, bt.param1)); | 3839 bt.AddReturn(m.Float32Sub(bt.param0, bt.param1)); |
| 3799 | 3840 |
| 3800 FOR_FLOAT32_INPUTS(pl) { | 3841 FOR_FLOAT32_INPUTS(pl) { |
| 3801 FOR_FLOAT32_INPUTS(pr) { CHECK_FLOAT_EQ(*pl - *pr, bt.call(*pl, *pr)); } | 3842 FOR_FLOAT32_INPUTS(pr) { CHECK_FLOAT_EQ(*pl - *pr, bt.call(*pl, *pr)); } |
| 3802 } | 3843 } |
| (...skipping 2762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6565 r.Goto(&merge); | 6606 r.Goto(&merge); |
| 6566 r.Bind(&merge); | 6607 r.Bind(&merge); |
| 6567 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); | 6608 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); |
| 6568 r.Return(phi); | 6609 r.Return(phi); |
| 6569 CHECK_EQ(1, r.Call(1)); | 6610 CHECK_EQ(1, r.Call(1)); |
| 6570 } | 6611 } |
| 6571 | 6612 |
| 6572 } // namespace compiler | 6613 } // namespace compiler |
| 6573 } // namespace internal | 6614 } // namespace internal |
| 6574 } // namespace v8 | 6615 } // namespace v8 |
| OLD | NEW |