| Index: src/compiler/x64/instruction-selector-x64.cc
|
| diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc
|
| index a710d07260c5583d60e27e4d3ab8ebe62fcbcaa4..b1e1548c17e8ab1d86fa3e3fd545f8ecd63bdacc 100644
|
| --- a/src/compiler/x64/instruction-selector-x64.cc
|
| +++ b/src/compiler/x64/instruction-selector-x64.cc
|
| @@ -1233,9 +1233,9 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) {
|
| }
|
|
|
|
|
| -void InstructionSelector::EmitPrepareArguments(NodeVector* arguments,
|
| - const CallDescriptor* descriptor,
|
| - Node* node) {
|
| +void InstructionSelector::EmitPrepareArguments(
|
| + ZoneVector<PushParameter>* arguments, const CallDescriptor* descriptor,
|
| + Node* node) {
|
| X64OperandGenerator g(this);
|
|
|
| // Prepare for C function call.
|
| @@ -1246,26 +1246,27 @@ void InstructionSelector::EmitPrepareArguments(NodeVector* arguments,
|
|
|
| // Poke any stack arguments.
|
| for (size_t n = 0; n < arguments->size(); ++n) {
|
| - if (Node* input = (*arguments)[n]) {
|
| + PushParameter input = (*arguments)[n];
|
| + if (input.node()) {
|
| int slot = static_cast<int>(n);
|
| - InstructionOperand value = g.CanBeImmediate(input)
|
| - ? g.UseImmediate(input)
|
| - : g.UseRegister(input);
|
| + InstructionOperand value = g.CanBeImmediate(input.node())
|
| + ? g.UseImmediate(input.node())
|
| + : g.UseRegister(input.node());
|
| Emit(kX64Poke | MiscField::encode(slot), g.NoOutput(), value);
|
| }
|
| }
|
| } else {
|
| // Push any stack arguments.
|
| - for (Node* input : base::Reversed(*arguments)) {
|
| + for (PushParameter input : base::Reversed(*arguments)) {
|
| // TODO(titzer): X64Push cannot handle stack->stack double moves
|
| // because there is no way to encode fixed double slots.
|
| InstructionOperand value =
|
| - g.CanBeImmediate(input)
|
| - ? g.UseImmediate(input)
|
| + g.CanBeImmediate(input.node())
|
| + ? g.UseImmediate(input.node())
|
| : IsSupported(ATOM) ||
|
| - sequence()->IsFloat(GetVirtualRegister(input))
|
| - ? g.UseRegister(input)
|
| - : g.Use(input);
|
| + sequence()->IsFloat(GetVirtualRegister(input.node()))
|
| + ? g.UseRegister(input.node())
|
| + : g.Use(input.node());
|
| Emit(kX64Push, g.NoOutput(), value);
|
| }
|
| }
|
|
|