| Index: src/compiler/instruction.h
|
| diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
|
| index 4f6649ff738d33c2f139147fce597aee82712b97..b42e17ba72ee28e999a9c25aa7917a9321960743 100644
|
| --- a/src/compiler/instruction.h
|
| +++ b/src/compiler/instruction.h
|
| @@ -14,6 +14,7 @@
|
| #include "src/compiler/frame.h"
|
| #include "src/compiler/instruction-codes.h"
|
| #include "src/compiler/opcodes.h"
|
| +#include "src/compiler/register-configuration.h"
|
| #include "src/compiler/schedule.h"
|
| #include "src/compiler/source-position.h"
|
| #include "src/zone-allocator.h"
|
| @@ -27,18 +28,13 @@ const InstructionCode kGapInstruction = -1;
|
| const InstructionCode kBlockStartInstruction = -2;
|
| const InstructionCode kSourcePositionInstruction = -3;
|
|
|
| -// Platform independent maxes.
|
| -static const int kMaxGeneralRegisters = 32;
|
| -static const int kMaxDoubleRegisters = 32;
|
| -
|
| -
|
| -#define INSTRUCTION_OPERAND_LIST(V) \
|
| - V(Constant, CONSTANT, 0) \
|
| - V(Immediate, IMMEDIATE, 0) \
|
| - V(StackSlot, STACK_SLOT, 128) \
|
| - V(DoubleStackSlot, DOUBLE_STACK_SLOT, 128) \
|
| - V(Register, REGISTER, kMaxGeneralRegisters) \
|
| - V(DoubleRegister, DOUBLE_REGISTER, kMaxDoubleRegisters)
|
| +#define INSTRUCTION_OPERAND_LIST(V) \
|
| + V(Constant, CONSTANT, 0) \
|
| + V(Immediate, IMMEDIATE, 0) \
|
| + V(StackSlot, STACK_SLOT, 128) \
|
| + V(DoubleStackSlot, DOUBLE_STACK_SLOT, 128) \
|
| + V(Register, REGISTER, RegisterConfiguration::kMaxGeneralRegisters) \
|
| + V(DoubleRegister, DOUBLE_REGISTER, RegisterConfiguration::kMaxDoubleRegisters)
|
|
|
| class InstructionOperand : public ZoneObject {
|
| public:
|
| @@ -87,7 +83,13 @@ class InstructionOperand : public ZoneObject {
|
|
|
| typedef ZoneVector<InstructionOperand*> InstructionOperandVector;
|
|
|
| -std::ostream& operator<<(std::ostream& os, const InstructionOperand& op);
|
| +struct PrintableInstructionOperand {
|
| + const RegisterConfiguration* register_configuration_;
|
| + const InstructionOperand* op_;
|
| +};
|
| +
|
| +std::ostream& operator<<(std::ostream& os,
|
| + const PrintableInstructionOperand& op);
|
|
|
| class UnallocatedOperand : public InstructionOperand {
|
| public:
|
| @@ -306,7 +308,15 @@ class MoveOperands FINAL {
|
| InstructionOperand* destination_;
|
| };
|
|
|
| -std::ostream& operator<<(std::ostream& os, const MoveOperands& mo);
|
| +
|
| +struct PrintableMoveOperands {
|
| + const RegisterConfiguration* register_configuration_;
|
| + const MoveOperands* move_operands_;
|
| +};
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, const PrintableMoveOperands& mo);
|
| +
|
|
|
| template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands>
|
| class SubKindOperand FINAL : public InstructionOperand {
|
| @@ -359,7 +369,15 @@ class ParallelMove FINAL : public ZoneObject {
|
| ZoneList<MoveOperands> move_operands_;
|
| };
|
|
|
| -std::ostream& operator<<(std::ostream& os, const ParallelMove& pm);
|
| +
|
| +struct PrintableParallelMove {
|
| + const RegisterConfiguration* register_configuration_;
|
| + const ParallelMove* parallel_move_;
|
| +};
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, const PrintableParallelMove& pm);
|
| +
|
|
|
| class PointerMap FINAL : public ZoneObject {
|
| public:
|
| @@ -534,7 +552,13 @@ class Instruction : public ZoneObject {
|
| InstructionOperand* operands_[1];
|
| };
|
|
|
| -std::ostream& operator<<(std::ostream& os, const Instruction& instr);
|
| +
|
| +struct PrintableInstruction {
|
| + const RegisterConfiguration* register_configuration_;
|
| + const Instruction* instr_;
|
| +};
|
| +std::ostream& operator<<(std::ostream& os, const PrintableInstruction& instr);
|
| +
|
|
|
| // Represents moves inserted before an instruction due to register allocation.
|
| // TODO(titzer): squash GapInstruction back into Instruction, since essentially
|
| @@ -585,7 +609,8 @@ class GapInstruction : public Instruction {
|
| }
|
|
|
| private:
|
| - friend std::ostream& operator<<(std::ostream& os, const Instruction& instr);
|
| + friend std::ostream& operator<<(std::ostream& os,
|
| + const PrintableInstruction& instr);
|
| ParallelMove* parallel_moves_[LAST_INNER_POSITION + 1];
|
| };
|
|
|
| @@ -847,6 +872,9 @@ typedef ZoneDeque<PointerMap*> PointerMapDeque;
|
| typedef ZoneVector<FrameStateDescriptor*> DeoptimizationVector;
|
| typedef ZoneVector<InstructionBlock*> InstructionBlocks;
|
|
|
| +struct PrintableInstructionSequence;
|
| +
|
| +
|
| // Represents architecture-specific generated code before, during, and after
|
| // register allocation.
|
| // TODO(titzer): s/IsDouble/IsFloat64/
|
| @@ -961,7 +989,7 @@ class InstructionSequence FINAL {
|
|
|
| private:
|
| friend std::ostream& operator<<(std::ostream& os,
|
| - const InstructionSequence& code);
|
| + const PrintableInstructionSequence& code);
|
|
|
| typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet;
|
|
|
| @@ -977,7 +1005,15 @@ class InstructionSequence FINAL {
|
| DeoptimizationVector deoptimization_entries_;
|
| };
|
|
|
| -std::ostream& operator<<(std::ostream& os, const InstructionSequence& code);
|
| +
|
| +struct PrintableInstructionSequence {
|
| + const RegisterConfiguration* register_configuration_;
|
| + const InstructionSequence* sequence_;
|
| +};
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os,
|
| + const PrintableInstructionSequence& code);
|
|
|
| } // namespace compiler
|
| } // namespace internal
|
|
|