< prev index next >

src/hotspot/share/c1/c1_LIR.hpp

Print this page
*** 875,10 ***
--- 875,11 ---
  class    LIR_OpArrayCopy;
  class    LIR_OpUpdateCRC32;
  class    LIR_OpLock;
  class    LIR_OpTypeCheck;
  class    LIR_OpCompareAndSwap;
+ class    LIR_OpLoadKlass;
  class    LIR_OpProfileCall;
  class    LIR_OpProfileType;
  #ifdef ASSERT
  class    LIR_OpAssert;
  #endif

*** 920,10 ***
--- 921,11 ---
        , lir_alloc_object
        , lir_monaddr
        , lir_roundfp
        , lir_safepoint
        , lir_unwind
+       , lir_load_klass
    , end_op1
    , begin_op2
        , lir_cmp
        , lir_cmp_l2i
        , lir_ucmp_fd2i

*** 1130,10 ***
--- 1132,11 ---
    virtual LIR_Op3* as_Op3() { return NULL; }
    virtual LIR_OpArrayCopy* as_OpArrayCopy() { return NULL; }
    virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; }
    virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; }
    virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; }
+   virtual LIR_OpLoadKlass* as_OpLoadKlass() { return NULL; }
    virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; }
    virtual LIR_OpProfileType* as_OpProfileType() { return NULL; }
  #ifdef ASSERT
    virtual LIR_OpAssert* as_OpAssert() { return NULL; }
  #endif

*** 1802,10 ***
--- 1805,29 ---
    virtual void emit_code(LIR_Assembler* masm);
    virtual LIR_OpLock* as_OpLock() { return this; }
    void print_instr(outputStream* out) const PRODUCT_RETURN;
  };
  
+ class LIR_OpLoadKlass: public LIR_Op {
+   friend class LIR_OpVisitState;
+ 
+  private:
+   LIR_Opr _obj;
+   CodeStub* _stub;
+  public:
+   LIR_OpLoadKlass(LIR_Opr obj, LIR_Opr result, CodeEmitInfo* info, CodeStub* stub)
+     : LIR_Op(lir_load_klass, result, info)
+     , _obj(obj)
+     , _stub(stub) {}
+ 
+   LIR_Opr obj()    const { return _obj;  }
+   CodeStub* stub() const { return _stub; }
+ 
+   virtual LIR_OpLoadKlass* as_OpLoadKlass() { return this; }
+   virtual void emit_code(LIR_Assembler* masm);
+   void print_instr(outputStream* out) const PRODUCT_RETURN;
+ };
  
  class LIR_OpDelay: public LIR_Op {
   friend class LIR_OpVisitState;
  
   private:

*** 2247,10 ***
--- 2269,13 ---
      append(new LIR_OpProfileType(LIR_OprFact::address(mdp), obj, exact_klass, current_klass, tmp, not_null, no_conflict));
    }
  
    void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); }
    void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); }
+ 
+   void load_klass(LIR_Opr obj, LIR_Opr result, CodeEmitInfo* info, CodeStub* stub) { append(new LIR_OpLoadKlass(obj, result, info, stub)); }
+ 
  #ifdef ASSERT
    void lir_assert(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, const char* msg, bool halt) { append(new LIR_OpAssert(condition, opr1, opr2, msg, halt)); }
  #endif
  };
  
< prev index next >