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 | 4 |
5 #include "src/builtins/builtins-utils.h" | 5 #include "src/builtins/builtins-utils.h" |
6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 assembler->HeapNumberMapConstant()), | 61 assembler->HeapNumberMapConstant()), |
62 &return_false); | 62 &return_false); |
63 | 63 |
64 // Load the actual value of {number}. | 64 // Load the actual value of {number}. |
65 Node* number_value = assembler->LoadHeapNumberValue(number); | 65 Node* number_value = assembler->LoadHeapNumberValue(number); |
66 | 66 |
67 // Truncate the value of {number} to an integer (or an infinity). | 67 // Truncate the value of {number} to an integer (or an infinity). |
68 Node* integer = assembler->Float64Trunc(number_value); | 68 Node* integer = assembler->Float64Trunc(number_value); |
69 | 69 |
70 // Check if {number}s value matches the integer (ruling out the infinities). | 70 // Check if {number}s value matches the integer (ruling out the infinities). |
71 assembler->BranchIfFloat64Equal(assembler->Float64Sub(number_value, integer), | 71 assembler->Branch( |
72 assembler->Float64Constant(0.0), &return_true, | 72 assembler->Float64Equal(assembler->Float64Sub(number_value, integer), |
73 &return_false); | 73 assembler->Float64Constant(0.0)), |
| 74 &return_true, &return_false); |
74 | 75 |
75 assembler->Bind(&return_true); | 76 assembler->Bind(&return_true); |
76 assembler->Return(assembler->BooleanConstant(true)); | 77 assembler->Return(assembler->BooleanConstant(true)); |
77 | 78 |
78 assembler->Bind(&return_false); | 79 assembler->Bind(&return_false); |
79 assembler->Return(assembler->BooleanConstant(false)); | 80 assembler->Return(assembler->BooleanConstant(false)); |
80 } | 81 } |
81 | 82 |
82 // ES6 section 20.1.2.4 Number.isNaN ( number ) | 83 // ES6 section 20.1.2.4 Number.isNaN ( number ) |
83 void Builtins::Generate_NumberIsNaN(CodeStubAssembler* assembler) { | 84 void Builtins::Generate_NumberIsNaN(CodeStubAssembler* assembler) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 // Truncate the value of {number} to an integer (or an infinity). | 133 // Truncate the value of {number} to an integer (or an infinity). |
133 Node* integer = assembler->Float64Trunc(number_value); | 134 Node* integer = assembler->Float64Trunc(number_value); |
134 | 135 |
135 // Check if {number}s value matches the integer (ruling out the infinities). | 136 // Check if {number}s value matches the integer (ruling out the infinities). |
136 assembler->GotoUnless( | 137 assembler->GotoUnless( |
137 assembler->Float64Equal(assembler->Float64Sub(number_value, integer), | 138 assembler->Float64Equal(assembler->Float64Sub(number_value, integer), |
138 assembler->Float64Constant(0.0)), | 139 assembler->Float64Constant(0.0)), |
139 &return_false); | 140 &return_false); |
140 | 141 |
141 // Check if the {integer} value is in safe integer range. | 142 // Check if the {integer} value is in safe integer range. |
142 assembler->BranchIfFloat64LessThanOrEqual( | 143 assembler->Branch(assembler->Float64LessThanOrEqual( |
143 assembler->Float64Abs(integer), | 144 assembler->Float64Abs(integer), |
144 assembler->Float64Constant(kMaxSafeInteger), &return_true, &return_false); | 145 assembler->Float64Constant(kMaxSafeInteger)), |
| 146 &return_true, &return_false); |
145 | 147 |
146 assembler->Bind(&return_true); | 148 assembler->Bind(&return_true); |
147 assembler->Return(assembler->BooleanConstant(true)); | 149 assembler->Return(assembler->BooleanConstant(true)); |
148 | 150 |
149 assembler->Bind(&return_false); | 151 assembler->Bind(&return_false); |
150 assembler->Return(assembler->BooleanConstant(false)); | 152 assembler->Return(assembler->BooleanConstant(false)); |
151 } | 153 } |
152 | 154 |
153 // ES6 section 20.1.2.12 Number.parseFloat ( string ) | 155 // ES6 section 20.1.2.12 Number.parseFloat ( string ) |
154 void Builtins::Generate_NumberParseFloat(CodeStubAssembler* assembler) { | 156 void Builtins::Generate_NumberParseFloat(CodeStubAssembler* assembler) { |
(...skipping 1555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1710 compiler::Node* lhs = assembler->Parameter(0); | 1712 compiler::Node* lhs = assembler->Parameter(0); |
1711 compiler::Node* rhs = assembler->Parameter(1); | 1713 compiler::Node* rhs = assembler->Parameter(1); |
1712 compiler::Node* context = assembler->Parameter(2); | 1714 compiler::Node* context = assembler->Parameter(2); |
1713 | 1715 |
1714 assembler->Return(assembler->StrictEqual(CodeStubAssembler::kNegateResult, | 1716 assembler->Return(assembler->StrictEqual(CodeStubAssembler::kNegateResult, |
1715 lhs, rhs, context)); | 1717 lhs, rhs, context)); |
1716 } | 1718 } |
1717 | 1719 |
1718 } // namespace internal | 1720 } // namespace internal |
1719 } // namespace v8 | 1721 } // namespace v8 |
OLD | NEW |