Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(443)

Side by Side Diff: src/compiler/ppc/instruction-selector-ppc.cc

Issue 1534593004: [turbofan] Pass type information of arguments to EmitPrepareArguments. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Handle float32 and float64 differently. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1593 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 VisitFloat64Compare(this, node, &cont); 1604 VisitFloat64Compare(this, node, &cont);
1605 } 1605 }
1606 1606
1607 1607
1608 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { 1608 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) {
1609 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); 1609 FlagsContinuation cont(kUnsignedLessThanOrEqual, node);
1610 VisitFloat64Compare(this, node, &cont); 1610 VisitFloat64Compare(this, node, &cont);
1611 } 1611 }
1612 1612
1613 1613
1614 void InstructionSelector::EmitPrepareArguments(NodeVector* arguments, 1614 void InstructionSelector::EmitPrepareArguments(
1615 const CallDescriptor* descriptor, 1615 ZoneVector<PushParameter>* arguments, const CallDescriptor* descriptor,
1616 Node* node) { 1616 Node* node) {
1617 PPCOperandGenerator g(this); 1617 PPCOperandGenerator g(this);
1618 1618
1619 // Prepare for C function call. 1619 // Prepare for C function call.
1620 if (descriptor->IsCFunctionCall()) { 1620 if (descriptor->IsCFunctionCall()) {
1621 Emit(kArchPrepareCallCFunction | 1621 Emit(kArchPrepareCallCFunction |
1622 MiscField::encode(static_cast<int>(descriptor->CParameterCount())), 1622 MiscField::encode(static_cast<int>(descriptor->CParameterCount())),
1623 0, nullptr, 0, nullptr); 1623 0, nullptr, 0, nullptr);
1624 1624
1625 // Poke any stack arguments. 1625 // Poke any stack arguments.
1626 int slot = kStackFrameExtraParamSlot; 1626 int slot = kStackFrameExtraParamSlot;
1627 for (Node* node : (*arguments)) { 1627 for (PushParameter input : (*arguments)) {
1628 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(node), 1628 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(input.node()),
1629 g.TempImmediate(slot)); 1629 g.TempImmediate(slot));
1630 ++slot; 1630 ++slot;
1631 } 1631 }
1632 } else { 1632 } else {
1633 // Push any stack arguments. 1633 // Push any stack arguments.
1634 int num_slots = static_cast<int>(descriptor->StackParameterCount()); 1634 int num_slots = static_cast<int>(descriptor->StackParameterCount());
1635 int slot = 0; 1635 int slot = 0;
1636 for (Node* input : (*arguments)) { 1636 for (PushParameter input : (*arguments)) {
1637 if (slot == 0) { 1637 if (slot == 0) {
1638 DCHECK(input); 1638 DCHECK(input.node());
1639 Emit(kPPC_PushFrame, g.NoOutput(), g.UseRegister(input), 1639 Emit(kPPC_PushFrame, g.NoOutput(), g.UseRegister(input.node()),
1640 g.TempImmediate(num_slots)); 1640 g.TempImmediate(num_slots));
1641 } else { 1641 } else {
1642 // Skip any alignment holes in pushed nodes. 1642 // Skip any alignment holes in pushed nodes.
1643 if (input) { 1643 if (input.node()) {
1644 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(input), 1644 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(input.node()),
1645 g.TempImmediate(slot)); 1645 g.TempImmediate(slot));
1646 } 1646 }
1647 } 1647 }
1648 ++slot; 1648 ++slot;
1649 } 1649 }
1650 } 1650 }
1651 } 1651 }
1652 1652
1653 1653
1654 bool InstructionSelector::IsTailCallAddressImmediate() { return false; } 1654 bool InstructionSelector::IsTailCallAddressImmediate() { return false; }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 MachineOperatorBuilder::kFloat64RoundTruncate | 1711 MachineOperatorBuilder::kFloat64RoundTruncate |
1712 MachineOperatorBuilder::kFloat64RoundTiesAway | 1712 MachineOperatorBuilder::kFloat64RoundTiesAway |
1713 MachineOperatorBuilder::kWord32Popcnt | 1713 MachineOperatorBuilder::kWord32Popcnt |
1714 MachineOperatorBuilder::kWord64Popcnt; 1714 MachineOperatorBuilder::kWord64Popcnt;
1715 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. 1715 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f.
1716 } 1716 }
1717 1717
1718 } // namespace compiler 1718 } // namespace compiler
1719 } // namespace internal 1719 } // namespace internal
1720 } // namespace v8 1720 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/mips64/instruction-selector-mips64.cc ('k') | src/compiler/x64/instruction-selector-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698