| Index: src/x64/lithium-x64.h
 | 
| ===================================================================
 | 
| --- src/x64/lithium-x64.h	(revision 7662)
 | 
| +++ src/x64/lithium-x64.h	(working copy)
 | 
| @@ -39,6 +39,12 @@
 | 
|  // 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)                                       \
 | 
| @@ -165,16 +171,20 @@
 | 
|    V(ValueOf)
 | 
|  
 | 
|  
 | 
| -#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)              \
 | 
| -  virtual Opcode opcode() const { return LInstruction::k##type; } \
 | 
| -  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_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 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()); \
 | 
| @@ -197,21 +207,10 @@
 | 
|    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_PREDICATE(type) \
 | 
| -  bool Is##type() const { return opcode() == k##type; }
 | 
| -  LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE)
 | 
| -#undef DECLARE_PREDICATE
 | 
| +#define DECLARE_DO(type) virtual bool Is##type() const { return false; }
 | 
| +  LITHIUM_ALL_INSTRUCTION_LIST(DECLARE_DO)
 | 
| +#undef DECLARE_DO
 | 
|  
 | 
|    virtual bool IsControl() const { return false; }
 | 
|    virtual void SetBranchTargets(int true_block_id, int false_block_id) { }
 | 
| @@ -457,6 +456,7 @@
 | 
|  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_; }
 | 
| @@ -1092,7 +1092,6 @@
 | 
|  
 | 
|    Token::Value op() const { return op_; }
 | 
|  
 | 
| -  virtual Opcode opcode() const { return LInstruction::kArithmeticD; }
 | 
|    virtual void CompileToNative(LCodeGen* generator);
 | 
|    virtual const char* Mnemonic() const;
 | 
|  
 | 
| @@ -1109,7 +1108,6 @@
 | 
|      inputs_[1] = right;
 | 
|    }
 | 
|  
 | 
| -  virtual Opcode opcode() const { return LInstruction::kArithmeticT; }
 | 
|    virtual void CompileToNative(LCodeGen* generator);
 | 
|    virtual const char* Mnemonic() const;
 | 
|  
 | 
| @@ -2193,6 +2191,7 @@
 | 
|  };
 | 
|  
 | 
|  #undef DECLARE_HYDROGEN_ACCESSOR
 | 
| +#undef DECLARE_INSTRUCTION
 | 
|  #undef DECLARE_CONCRETE_INSTRUCTION
 | 
|  
 | 
|  } }  // namespace v8::int
 | 
| 
 |