Chromium Code Reviews| Index: src/arm/lithium-arm.h |
| =================================================================== |
| --- src/arm/lithium-arm.h (revision 7661) |
| +++ src/arm/lithium-arm.h (working copy) |
| @@ -39,12 +39,6 @@ |
| // Forward declarations. |
| class LCodeGen; |
| -#define LITHIUM_ALL_INSTRUCTION_LIST(V) \ |
| - V(ControlInstruction) \ |
| - V(Call) \ |
| - LITHIUM_CONCRETE_INSTRUCTION_LIST(V) |
| - |
| - |
| #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ |
| V(AccessArgumentsAt) \ |
| V(AddI) \ |
| @@ -171,20 +165,16 @@ |
| V(ValueOf) |
| -#define DECLARE_INSTRUCTION(type) \ |
| - virtual bool Is##type() const { return true; } \ |
| - static L##type* cast(LInstruction* instr) { \ |
| - ASSERT(instr->Is##type()); \ |
| - return reinterpret_cast<L##type*>(instr); \ |
| +#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ |
| + virtual Opcode opcode() const { return LInstruction::k##type; } \ |
|
Kevin Millikin (Chromium)
2011/04/19 12:20:30
Thank you.
|
| + virtual void CompileToNative(LCodeGen* generator); \ |
| + virtual const char* Mnemonic() const { return mnemonic; } \ |
| + static L##type* cast(LInstruction* instr) { \ |
| + ASSERT(instr->Is##type()); \ |
| + return reinterpret_cast<L##type*>(instr); \ |
| } |
| -#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ |
| - virtual void CompileToNative(LCodeGen* generator); \ |
| - virtual const char* Mnemonic() const { return mnemonic; } \ |
| - DECLARE_INSTRUCTION(type) |
| - |
| - |
| #define DECLARE_HYDROGEN_ACCESSOR(type) \ |
| H##type* hydrogen() const { \ |
| return H##type::cast(hydrogen_value()); \ |
| @@ -206,10 +196,21 @@ |
| virtual void PrintDataTo(StringStream* stream) = 0; |
| virtual void PrintOutputOperandTo(StringStream* stream) = 0; |
| + enum Opcode { |
| + // Declare a unique enum value for each instruction. |
| + #define DECLARE_OPCODE(type) k##type, |
| + LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) |
| + kNumberOfInstructions |
| + #undef DECLARE_OPCODE |
| + }; |
| + |
| + virtual Opcode opcode() const = 0; |
| + |
| // Declare virtual type testers. |
| -#define DECLARE_DO(type) virtual bool Is##type() const { return false; } |
| - LITHIUM_ALL_INSTRUCTION_LIST(DECLARE_DO) |
| -#undef DECLARE_DO |
| +#define DECLARE_PREDICATE(type) \ |
| + bool Is##type() const { return opcode() == k##type; } |
| + LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) |
| +#undef DECLARE_PREDICATE |
| virtual bool IsControl() const { return false; } |
| virtual void SetBranchTargets(int true_block_id, int false_block_id) { } |
| @@ -455,7 +456,6 @@ |
| template<int I, int T> |
| class LControlInstruction: public LTemplateInstruction<0, I, T> { |
| public: |
| - DECLARE_INSTRUCTION(ControlInstruction) |
| virtual bool IsControl() const { return true; } |
| int true_block_id() const { return true_block_id_; } |
| @@ -1106,6 +1106,7 @@ |
| Token::Value op() const { return op_; } |
| + virtual Opcode opcode() const { return LInstruction::kArithmeticD; } |
|
Kevin Millikin (Chromium)
2011/04/19 12:20:30
Maybe add a comment here and below that DECLARE_CO
|
| virtual void CompileToNative(LCodeGen* generator); |
| virtual const char* Mnemonic() const; |
| @@ -1122,6 +1123,7 @@ |
| inputs_[1] = right; |
| } |
| + virtual Opcode opcode() const { return LInstruction::kArithmeticT; } |
| virtual void CompileToNative(LCodeGen* generator); |
| virtual const char* Mnemonic() const; |
| @@ -2209,7 +2211,6 @@ |
| }; |
| #undef DECLARE_HYDROGEN_ACCESSOR |
| -#undef DECLARE_INSTRUCTION |
| #undef DECLARE_CONCRETE_INSTRUCTION |
| } } // namespace v8::internal |