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 |