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/int64-lowering.h" | 5 #include "src/compiler/int64-lowering.h" |
6 #include "src/compiler/common-operator.h" | 6 #include "src/compiler/common-operator.h" |
7 #include "src/compiler/diamond.h" | 7 #include "src/compiler/diamond.h" |
8 #include "src/compiler/graph.h" | 8 #include "src/compiler/graph.h" |
9 #include "src/compiler/linkage.h" | 9 #include "src/compiler/linkage.h" |
10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 // outputs of the Int32PairAdd will be accessed through projections. | 190 // outputs of the Int32PairAdd will be accessed through projections. |
191 PrepareProjectionReplacements(node); | 191 PrepareProjectionReplacements(node); |
192 break; | 192 break; |
193 } | 193 } |
194 case IrOpcode::kInt64Sub: { | 194 case IrOpcode::kInt64Sub: { |
195 // An Int64Sub node is changed into a Int32PairSub node. The two | 195 // An Int64Sub node is changed into a Int32PairSub node. The two |
196 // outputs of the Int32PairSub will be accessed through projections. | 196 // outputs of the Int32PairSub will be accessed through projections. |
197 PrepareProjectionReplacements(node); | 197 PrepareProjectionReplacements(node); |
198 break; | 198 break; |
199 } | 199 } |
| 200 case IrOpcode::kInt64Mul: { |
| 201 // An Int64Sub node is changed into a Int32PairSub node. The two |
| 202 // outputs of the Int32PairSub will be accessed through projections. |
| 203 PrepareProjectionReplacements(node); |
| 204 break; |
| 205 } |
200 case IrOpcode::kWord64Or: { | 206 case IrOpcode::kWord64Or: { |
201 Node* low_node = | 207 Node* low_node = |
202 graph()->NewNode(machine()->Word32Or(), placeholder_, placeholder_); | 208 graph()->NewNode(machine()->Word32Or(), placeholder_, placeholder_); |
203 Node* high_node = | 209 Node* high_node = |
204 graph()->NewNode(machine()->Word32Or(), placeholder_, placeholder_); | 210 graph()->NewNode(machine()->Word32Or(), placeholder_, placeholder_); |
205 ReplaceNode(node, low_node, high_node); | 211 ReplaceNode(node, low_node, high_node); |
206 break; | 212 break; |
207 } | 213 } |
208 case IrOpcode::kWord64Xor: { | 214 case IrOpcode::kWord64Xor: { |
209 Node* low_node = | 215 Node* low_node = |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 node->ReplaceInput(1, GetReplacementLow(right)); | 490 node->ReplaceInput(1, GetReplacementLow(right)); |
485 node->AppendInput(zone(), GetReplacementHigh(right)); | 491 node->AppendInput(zone(), GetReplacementHigh(right)); |
486 | 492 |
487 Node* left = node->InputAt(0); | 493 Node* left = node->InputAt(0); |
488 node->ReplaceInput(0, GetReplacementLow(left)); | 494 node->ReplaceInput(0, GetReplacementLow(left)); |
489 node->InsertInput(zone(), 1, GetReplacementHigh(left)); | 495 node->InsertInput(zone(), 1, GetReplacementHigh(left)); |
490 | 496 |
491 NodeProperties::ChangeOp(node, machine()->Int32PairSub()); | 497 NodeProperties::ChangeOp(node, machine()->Int32PairSub()); |
492 break; | 498 break; |
493 } | 499 } |
| 500 case IrOpcode::kInt64Mul: { |
| 501 DCHECK(node->InputCount() == 2); |
| 502 |
| 503 Node* right = node->InputAt(1); |
| 504 node->ReplaceInput(1, GetReplacementLow(right)); |
| 505 node->AppendInput(zone(), GetReplacementHigh(right)); |
| 506 |
| 507 Node* left = node->InputAt(0); |
| 508 node->ReplaceInput(0, GetReplacementLow(left)); |
| 509 node->InsertInput(zone(), 1, GetReplacementHigh(left)); |
| 510 |
| 511 NodeProperties::ChangeOp(node, machine()->Int32PairMul()); |
| 512 break; |
| 513 } |
494 case IrOpcode::kWord64Or: { | 514 case IrOpcode::kWord64Or: { |
495 DCHECK(node->InputCount() == 2); | 515 DCHECK(node->InputCount() == 2); |
496 Node* left = node->InputAt(0); | 516 Node* left = node->InputAt(0); |
497 Node* right = node->InputAt(1); | 517 Node* right = node->InputAt(1); |
498 | 518 |
499 Node* low_node = GetReplacementLow(node); | 519 Node* low_node = GetReplacementLow(node); |
500 low_node->ReplaceInput(0, GetReplacementLow(left)); | 520 low_node->ReplaceInput(0, GetReplacementLow(left)); |
501 low_node->ReplaceInput(1, GetReplacementLow(right)); | 521 low_node->ReplaceInput(1, GetReplacementLow(right)); |
502 | 522 |
503 Node* high_node = GetReplacementHigh(node); | 523 Node* high_node = GetReplacementHigh(node); |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 } | 874 } |
855 | 875 |
856 Node* Int64Lowering::GetReplacementHigh(Node* node) { | 876 Node* Int64Lowering::GetReplacementHigh(Node* node) { |
857 Node* result = replacements_[node->id()].high; | 877 Node* result = replacements_[node->id()].high; |
858 DCHECK(result); | 878 DCHECK(result); |
859 return result; | 879 return result; |
860 } | 880 } |
861 } // namespace compiler | 881 } // namespace compiler |
862 } // namespace internal | 882 } // namespace internal |
863 } // namespace v8 | 883 } // namespace v8 |
OLD | NEW |