< prev index next > src/hotspot/share/c1/c1_LIR.hpp
Print this page
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
, 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
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
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:
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 >