| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #include "src/code-stub-assembler.h" | 4 #include "src/code-stub-assembler.h" |
| 5 #include "src/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/frames-inl.h" | 6 #include "src/frames-inl.h" |
| 7 #include "src/frames.h" | 7 #include "src/frames.h" |
| 8 #include "src/ic/handler-configuration.h" | 8 #include "src/ic/handler-configuration.h" |
| 9 #include "src/ic/stub-cache.h" | 9 #include "src/ic/stub-cache.h" |
| 10 | 10 |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 BranchIfSmiEqual(value_length, SmiConstant(0), if_false, if_true); | 872 BranchIfSmiEqual(value_length, SmiConstant(0), if_false, if_true); |
| 873 } | 873 } |
| 874 | 874 |
| 875 Bind(&if_valueisheapnumber); | 875 Bind(&if_valueisheapnumber); |
| 876 { | 876 { |
| 877 // Load the floating point value of {value}. | 877 // Load the floating point value of {value}. |
| 878 Node* value_value = LoadObjectField(value, HeapNumber::kValueOffset, | 878 Node* value_value = LoadObjectField(value, HeapNumber::kValueOffset, |
| 879 MachineType::Float64()); | 879 MachineType::Float64()); |
| 880 | 880 |
| 881 // Check if the floating point {value} is neither 0.0, -0.0 nor NaN. | 881 // Check if the floating point {value} is neither 0.0, -0.0 nor NaN. |
| 882 Node* zero = Float64Constant(0.0); | 882 Branch(Float64LessThan(Float64Constant(0.0), Float64Abs(value_value)), |
| 883 GotoIf(Float64LessThan(zero, value_value), if_true); | 883 if_true, if_false); |
| 884 Branch(Float64LessThan(value_value, zero), if_true, if_false); | |
| 885 } | 884 } |
| 886 | 885 |
| 887 Bind(&if_valueisother); | 886 Bind(&if_valueisother); |
| 888 { | 887 { |
| 889 // Load the bit field from the {value}s map. The {value} is now either | 888 // Load the bit field from the {value}s map. The {value} is now either |
| 890 // Null or Undefined, which have the undetectable bit set (so we always | 889 // Null or Undefined, which have the undetectable bit set (so we always |
| 891 // return false for those), or a Symbol or Simd128Value, whose maps never | 890 // return false for those), or a Symbol or Simd128Value, whose maps never |
| 892 // have the undetectable bit set (so we always return true for those), or | 891 // have the undetectable bit set (so we always return true for those), or |
| 893 // a JSReceiver, which may or may not have the undetectable bit set. | 892 // a JSReceiver, which may or may not have the undetectable bit set. |
| 894 Node* value_map_bitfield = LoadMapBitField(value_map); | 893 Node* value_map_bitfield = LoadMapBitField(value_map); |
| (...skipping 7927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8822 } | 8821 } |
| 8823 | 8822 |
| 8824 void CodeStubArguments::PopAndReturn(compiler::Node* value) { | 8823 void CodeStubArguments::PopAndReturn(compiler::Node* value) { |
| 8825 assembler_->PopAndReturn( | 8824 assembler_->PopAndReturn( |
| 8826 assembler_->IntPtrAddFoldConstants(argc_, assembler_->IntPtrConstant(1)), | 8825 assembler_->IntPtrAddFoldConstants(argc_, assembler_->IntPtrConstant(1)), |
| 8827 value); | 8826 value); |
| 8828 } | 8827 } |
| 8829 | 8828 |
| 8830 } // namespace internal | 8829 } // namespace internal |
| 8831 } // namespace v8 | 8830 } // namespace v8 |
| OLD | NEW |