< prev index next >

src/share/vm/c1/c1_LIR.hpp

Print this page
rev 8961 : [mq]: diff-shenandoah.patch

*** 874,883 **** --- 874,884 ---- class LIR_Op1; class LIR_OpBranch; class LIR_OpConvert; class LIR_OpAllocObj; class LIR_OpRoundFP; + class LIR_OpShenandoahWriteBarrier; class LIR_Op2; class LIR_OpDelay; class LIR_Op3; class LIR_OpAllocArray; class LIR_OpCall;
*** 938,947 **** --- 939,949 ---- , lir_roundfp , lir_safepoint , lir_pack64 , lir_unpack64 , lir_unwind + , lir_shenandoah_wb , end_op1 , begin_op2 , lir_cmp , lir_cmp_l2i , lir_ucmp_fd2i
*** 1152,1161 **** --- 1154,1164 ---- virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; } virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; } virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; } virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; } virtual LIR_OpProfileType* as_OpProfileType() { return NULL; } + virtual LIR_OpShenandoahWriteBarrier* as_OpShenandoahWriteBarrier() { return NULL; } #ifdef ASSERT virtual LIR_OpAssert* as_OpAssert() { return NULL; } #endif virtual void verify() const {}
*** 1466,1475 **** --- 1469,1497 ---- virtual void emit_code(LIR_Assembler* masm); virtual LIR_OpBranch* as_OpBranch() { return this; } virtual void print_instr(outputStream* out) const PRODUCT_RETURN; }; + class LIR_OpShenandoahWriteBarrier : public LIR_Op1 { + friend class LIR_OpVisitState; + + private: + bool _need_null_check; + LIR_Opr _tmp1; + LIR_Opr _tmp2; + + public: + LIR_OpShenandoahWriteBarrier(LIR_Opr obj, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2, CodeEmitInfo* info, bool need_null_check) : LIR_Op1(lir_shenandoah_wb, obj, result, T_OBJECT, lir_patch_none, info), _tmp1(tmp1), _tmp2(tmp2), _need_null_check(need_null_check) { + } + LIR_Opr tmp1_opr() const { return _tmp1; } + LIR_Opr tmp2_opr() const { return _tmp2; } + bool need_null_check() const { return _need_null_check; } + virtual void emit_code(LIR_Assembler* masm); + virtual LIR_OpShenandoahWriteBarrier* as_OpShenandoahWriteBarrier() { return this; } + virtual void print_instr(outputStream* out) const PRODUCT_RETURN; + + }; class ConversionStub; class LIR_OpConvert: public LIR_Op1 { friend class LIR_OpVisitState;
*** 2147,2156 **** --- 2169,2180 ---- #ifdef PPC void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); } #endif void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); } + void shenandoah_wb(LIR_Opr obj, LIR_Opr result, LIR_Opr tmp1, LIR_Opr tmp2, CodeEmitInfo* info, bool need_null_check) { append(new LIR_OpShenandoahWriteBarrier(obj, result, tmp1, tmp2, info, need_null_check)); } + void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and, left, right, dst)); } void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); } void logical_xor (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_xor, left, right, dst)); } void pack64(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_pack64, src, dst, T_LONG, lir_patch_none, NULL)); }
< prev index next >