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/base/adapters.h" | 5 #include "src/base/adapters.h" |
6 #include "src/compiler/instruction-selector-impl.h" | 6 #include "src/compiler/instruction-selector-impl.h" |
7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" |
8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
9 #include "src/ppc/frames-ppc.h" | 9 #include "src/ppc/frames-ppc.h" |
10 | 10 |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 *me = mask_lsb; | 410 *me = mask_lsb; |
411 return true; | 411 return true; |
412 } | 412 } |
413 #endif | 413 #endif |
414 | 414 |
415 | 415 |
416 // TODO(mbrandy): Absorb rotate-right into rlwinm? | 416 // TODO(mbrandy): Absorb rotate-right into rlwinm? |
417 void InstructionSelector::VisitWord32And(Node* node) { | 417 void InstructionSelector::VisitWord32And(Node* node) { |
418 PPCOperandGenerator g(this); | 418 PPCOperandGenerator g(this); |
419 Int32BinopMatcher m(node); | 419 Int32BinopMatcher m(node); |
420 int mb; | 420 int mb = 0; |
421 int me; | 421 int me = 0; |
422 if (m.right().HasValue() && IsContiguousMask32(m.right().Value(), &mb, &me)) { | 422 if (m.right().HasValue() && IsContiguousMask32(m.right().Value(), &mb, &me)) { |
423 int sh = 0; | 423 int sh = 0; |
424 Node* left = m.left().node(); | 424 Node* left = m.left().node(); |
425 if ((m.left().IsWord32Shr() || m.left().IsWord32Shl()) && | 425 if ((m.left().IsWord32Shr() || m.left().IsWord32Shl()) && |
426 CanCover(node, left)) { | 426 CanCover(node, left)) { |
427 // Try to absorb left/right shift into rlwinm | 427 // Try to absorb left/right shift into rlwinm |
428 Int32BinopMatcher mleft(m.left().node()); | 428 Int32BinopMatcher mleft(m.left().node()); |
429 if (mleft.right().IsInRange(0, 31)) { | 429 if (mleft.right().IsInRange(0, 31)) { |
430 left = mleft.left().node(); | 430 left = mleft.left().node(); |
431 sh = mleft.right().Value(); | 431 sh = mleft.right().Value(); |
(...skipping 17 matching lines...) Expand all Loading... |
449 this, node, &m, kPPC_And, CanCover(node, m.left().node()), | 449 this, node, &m, kPPC_And, CanCover(node, m.left().node()), |
450 CanCover(node, m.right().node()), kInt16Imm_Unsigned); | 450 CanCover(node, m.right().node()), kInt16Imm_Unsigned); |
451 } | 451 } |
452 | 452 |
453 | 453 |
454 #if V8_TARGET_ARCH_PPC64 | 454 #if V8_TARGET_ARCH_PPC64 |
455 // TODO(mbrandy): Absorb rotate-right into rldic? | 455 // TODO(mbrandy): Absorb rotate-right into rldic? |
456 void InstructionSelector::VisitWord64And(Node* node) { | 456 void InstructionSelector::VisitWord64And(Node* node) { |
457 PPCOperandGenerator g(this); | 457 PPCOperandGenerator g(this); |
458 Int64BinopMatcher m(node); | 458 Int64BinopMatcher m(node); |
459 int mb; | 459 int mb = 0; |
460 int me; | 460 int me = 0; |
461 if (m.right().HasValue() && IsContiguousMask64(m.right().Value(), &mb, &me)) { | 461 if (m.right().HasValue() && IsContiguousMask64(m.right().Value(), &mb, &me)) { |
462 int sh = 0; | 462 int sh = 0; |
463 Node* left = m.left().node(); | 463 Node* left = m.left().node(); |
464 if ((m.left().IsWord64Shr() || m.left().IsWord64Shl()) && | 464 if ((m.left().IsWord64Shr() || m.left().IsWord64Shl()) && |
465 CanCover(node, left)) { | 465 CanCover(node, left)) { |
466 // Try to absorb left/right shift into rldic | 466 // Try to absorb left/right shift into rldic |
467 Int64BinopMatcher mleft(m.left().node()); | 467 Int64BinopMatcher mleft(m.left().node()); |
468 if (mleft.right().IsInRange(0, 63)) { | 468 if (mleft.right().IsInRange(0, 63)) { |
469 left = mleft.left().node(); | 469 left = mleft.left().node(); |
470 sh = mleft.right().Value(); | 470 sh = mleft.right().Value(); |
(...skipping 1105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1576 return MachineOperatorBuilder::kFloat64RoundDown | | 1576 return MachineOperatorBuilder::kFloat64RoundDown | |
1577 MachineOperatorBuilder::kFloat64RoundTruncate | | 1577 MachineOperatorBuilder::kFloat64RoundTruncate | |
1578 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1578 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1579 MachineOperatorBuilder::kWord32Popcnt; | 1579 MachineOperatorBuilder::kWord32Popcnt; |
1580 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. | 1580 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. |
1581 } | 1581 } |
1582 | 1582 |
1583 } // namespace compiler | 1583 } // namespace compiler |
1584 } // namespace internal | 1584 } // namespace internal |
1585 } // namespace v8 | 1585 } // namespace v8 |
OLD | NEW |