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 "src/compiler/change-lowering.h" | 5 #include "src/compiler/change-lowering.h" |
6 | 6 |
7 #include "src/address-map.h" | 7 #include "src/address-map.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 Reduction ChangeLowering::ChangeBoolToBit(Node* value) { | 168 Reduction ChangeLowering::ChangeBoolToBit(Node* value) { |
169 return Replace(graph()->NewNode(machine()->WordEqual(), value, | 169 return Replace(graph()->NewNode(machine()->WordEqual(), value, |
170 jsgraph()->TrueConstant())); | 170 jsgraph()->TrueConstant())); |
171 } | 171 } |
172 | 172 |
173 | 173 |
174 Reduction ChangeLowering::ChangeFloat64ToTagged(Node* value, Node* control) { | 174 Reduction ChangeLowering::ChangeFloat64ToTagged(Node* value, Node* control) { |
175 Type* const value_type = NodeProperties::GetType(value); | 175 Type* const value_type = NodeProperties::GetType(value); |
176 Node* const value32 = graph()->NewNode( | 176 Node* const value32 = graph()->NewNode( |
177 machine()->TruncateFloat64ToInt32(TruncationMode::kRoundToZero), value); | 177 machine()->TruncateFloat64ToInt32(TruncationMode::kRoundToZero), value); |
178 if (value_type->Is(Type::Signed32())) { | 178 // TODO(bmeurer): This fast case must be disabled until we kill the asm.js |
179 return ChangeInt32ToTagged(value32, control); | 179 // support in the generic JavaScript pipeline, because LoadBuffer is lying |
180 } | 180 // about its result. |
| 181 // if (value_type->Is(Type::Signed32())) { |
| 182 // return ChangeInt32ToTagged(value32, control); |
| 183 // } |
181 Node* check_same = graph()->NewNode( | 184 Node* check_same = graph()->NewNode( |
182 machine()->Float64Equal(), value, | 185 machine()->Float64Equal(), value, |
183 graph()->NewNode(machine()->ChangeInt32ToFloat64(), value32)); | 186 graph()->NewNode(machine()->ChangeInt32ToFloat64(), value32)); |
184 Node* branch_same = graph()->NewNode(common()->Branch(), check_same, control); | 187 Node* branch_same = graph()->NewNode(common()->Branch(), check_same, control); |
185 | 188 |
186 Node* if_smi = graph()->NewNode(common()->IfTrue(), branch_same); | 189 Node* if_smi = graph()->NewNode(common()->IfTrue(), branch_same); |
187 Node* vsmi; | 190 Node* vsmi; |
188 Node* if_box = graph()->NewNode(common()->IfFalse(), branch_same); | 191 Node* if_box = graph()->NewNode(common()->IfFalse(), branch_same); |
189 Node* vbox; | 192 Node* vbox; |
190 | 193 |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 } | 770 } |
768 | 771 |
769 | 772 |
770 MachineOperatorBuilder* ChangeLowering::machine() const { | 773 MachineOperatorBuilder* ChangeLowering::machine() const { |
771 return jsgraph()->machine(); | 774 return jsgraph()->machine(); |
772 } | 775 } |
773 | 776 |
774 } // namespace compiler | 777 } // namespace compiler |
775 } // namespace internal | 778 } // namespace internal |
776 } // namespace v8 | 779 } // namespace v8 |
OLD | NEW |