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/graph.h" | 7 #include "src/compiler/graph.h" |
8 #include "src/compiler/linkage.h" | 8 #include "src/compiler/linkage.h" |
9 #include "src/compiler/machine-operator.h" | 9 #include "src/compiler/machine-operator.h" |
10 #include "src/compiler/node-properties.h" | 10 #include "src/compiler/node-properties.h" |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 machine()->Word32Or(), | 326 machine()->Word32Or(), |
327 graph()->NewNode(machine()->Word32Xor(), GetReplacementLow(left), | 327 graph()->NewNode(machine()->Word32Xor(), GetReplacementLow(left), |
328 GetReplacementLow(right)), | 328 GetReplacementLow(right)), |
329 graph()->NewNode(machine()->Word32Xor(), GetReplacementHigh(left), | 329 graph()->NewNode(machine()->Word32Xor(), GetReplacementHigh(left), |
330 GetReplacementHigh(right))), | 330 GetReplacementHigh(right))), |
331 graph()->NewNode(common()->Int32Constant(0))); | 331 graph()->NewNode(common()->Int32Constant(0))); |
332 | 332 |
333 ReplaceNode(node, replacement, nullptr); | 333 ReplaceNode(node, replacement, nullptr); |
334 break; | 334 break; |
335 } | 335 } |
336 // kExprI64Ne: | |
337 // kExprI64LtS: | 336 // kExprI64LtS: |
338 case IrOpcode::kInt64LessThan: { | 337 case IrOpcode::kInt64LessThan: { |
339 LowerComparison(node, machine()->Int32LessThan(), | 338 LowerComparison(node, machine()->Int32LessThan(), |
340 machine()->Uint32LessThan()); | 339 machine()->Uint32LessThan()); |
341 break; | 340 break; |
342 } | 341 } |
343 case IrOpcode::kInt64LessThanOrEqual: { | 342 case IrOpcode::kInt64LessThanOrEqual: { |
344 LowerComparison(node, machine()->Int32LessThan(), | 343 LowerComparison(node, machine()->Int32LessThan(), |
345 machine()->Uint32LessThanOrEqual()); | 344 machine()->Uint32LessThanOrEqual()); |
346 break; | 345 break; |
(...skipping 12 matching lines...) Expand all Loading... |
359 // kExprI64SConvertI32: | 358 // kExprI64SConvertI32: |
360 // kExprI64UConvertI32: | 359 // kExprI64UConvertI32: |
361 | 360 |
362 // kExprF64ReinterpretI64: | 361 // kExprF64ReinterpretI64: |
363 // kExprI64ReinterpretF64: | 362 // kExprI64ReinterpretF64: |
364 | 363 |
365 // kExprI64Clz: | 364 // kExprI64Clz: |
366 // kExprI64Ctz: | 365 // kExprI64Ctz: |
367 // kExprI64Popcnt: | 366 // kExprI64Popcnt: |
368 | 367 |
369 // kExprF32SConvertI64: | |
370 // kExprF32UConvertI64: | |
371 // kExprF64SConvertI64: | |
372 // kExprF64UConvertI64: | |
373 // kExprI64SConvertF32: | |
374 // kExprI64SConvertF64: | |
375 // kExprI64UConvertF32: | |
376 // kExprI64UConvertF64: | |
377 default: { DefaultLowering(node); } | 368 default: { DefaultLowering(node); } |
378 } | 369 } |
379 } | 370 } |
380 | 371 |
381 void Int64Lowering::LowerComparison(Node* node, const Operator* high_word_op, | 372 void Int64Lowering::LowerComparison(Node* node, const Operator* high_word_op, |
382 const Operator* low_word_op) { | 373 const Operator* low_word_op) { |
383 DCHECK(node->InputCount() == 2); | 374 DCHECK(node->InputCount() == 2); |
384 Node* left = node->InputAt(0); | 375 Node* left = node->InputAt(0); |
385 Node* right = node->InputAt(1); | 376 Node* right = node->InputAt(1); |
386 Node* replacement = graph()->NewNode( | 377 Node* replacement = graph()->NewNode( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 } | 426 } |
436 | 427 |
437 Node* Int64Lowering::GetReplacementHigh(Node* node) { | 428 Node* Int64Lowering::GetReplacementHigh(Node* node) { |
438 Node* result = replacements_[node->id()].high; | 429 Node* result = replacements_[node->id()].high; |
439 DCHECK(result); | 430 DCHECK(result); |
440 return result; | 431 return result; |
441 } | 432 } |
442 } // namespace compiler | 433 } // namespace compiler |
443 } // namespace internal | 434 } // namespace internal |
444 } // namespace v8 | 435 } // namespace v8 |
OLD | NEW |