OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/s390/frames-s390.h" | 9 #include "src/s390/frames-s390.h" |
10 | 10 |
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 } else if (cont->IsTrap()) { | 695 } else if (cont->IsTrap()) { |
696 inputs[input_count++] = g.UseImmediate(cont->trap_id()); | 696 inputs[input_count++] = g.UseImmediate(cont->trap_id()); |
697 selector->Emit(opcode, output_count, outputs, input_count, inputs); | 697 selector->Emit(opcode, output_count, outputs, input_count, inputs); |
698 } else { | 698 } else { |
699 selector->Emit(opcode, output_count, outputs, input_count, inputs); | 699 selector->Emit(opcode, output_count, outputs, input_count, inputs); |
700 } | 700 } |
701 } | 701 } |
702 | 702 |
703 } // namespace | 703 } // namespace |
704 | 704 |
| 705 void InstructionSelector::VisitStackSlot(Node* node) { |
| 706 StackSlotRepresentation rep = StackSlotRepresentationOf(node->op()); |
| 707 int slot = frame_->AllocateSpillSlot(rep.size()); |
| 708 OperandGenerator g(this); |
| 709 |
| 710 Emit(kArchStackSlot, g.DefineAsRegister(node), |
| 711 sequence()->AddImmediate(Constant(slot)), 0, nullptr); |
| 712 } |
| 713 |
705 void InstructionSelector::VisitLoad(Node* node) { | 714 void InstructionSelector::VisitLoad(Node* node) { |
706 S390OperandGenerator g(this); | 715 S390OperandGenerator g(this); |
707 ArchOpcode opcode = SelectLoadOpcode(node); | 716 ArchOpcode opcode = SelectLoadOpcode(node); |
708 InstructionOperand outputs[1]; | 717 InstructionOperand outputs[1]; |
709 outputs[0] = g.DefineAsRegister(node); | 718 outputs[0] = g.DefineAsRegister(node); |
710 InstructionOperand inputs[3]; | 719 InstructionOperand inputs[3]; |
711 size_t input_count = 0; | 720 size_t input_count = 0; |
712 AddressingMode mode = | 721 AddressingMode mode = |
713 g.GetEffectiveAddressMemoryOperand(node, inputs, &input_count); | 722 g.GetEffectiveAddressMemoryOperand(node, inputs, &input_count); |
714 InstructionCode code = opcode | AddressingModeField::encode(mode); | 723 InstructionCode code = opcode | AddressingModeField::encode(mode); |
(...skipping 1786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2501 // static | 2510 // static |
2502 MachineOperatorBuilder::AlignmentRequirements | 2511 MachineOperatorBuilder::AlignmentRequirements |
2503 InstructionSelector::AlignmentRequirements() { | 2512 InstructionSelector::AlignmentRequirements() { |
2504 return MachineOperatorBuilder::AlignmentRequirements:: | 2513 return MachineOperatorBuilder::AlignmentRequirements:: |
2505 FullUnalignedAccessSupport(); | 2514 FullUnalignedAccessSupport(); |
2506 } | 2515 } |
2507 | 2516 |
2508 } // namespace compiler | 2517 } // namespace compiler |
2509 } // namespace internal | 2518 } // namespace internal |
2510 } // namespace v8 | 2519 } // namespace v8 |
OLD | NEW |