47 bool tosca_live,
48 bool expand_call);
49
50 void shenandoah_write_barrier_pre(MacroAssembler* masm,
51 Register obj,
52 Register pre_val,
53 Register thread,
54 Register tmp,
55 bool tosca_live,
56 bool expand_call);
57
58 void resolve_forward_pointer(MacroAssembler* masm, Register dst, Register tmp = noreg);
59 void resolve_forward_pointer_not_null(MacroAssembler* masm, Register dst, Register tmp = noreg);
60
61 void load_reference_barrier_not_null(MacroAssembler* masm, Register dst);
62
63 void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
64
65 address generate_shenandoah_lrb(StubCodeGenerator* cgen);
66
67 // Generate cset check. If obj is not in cset, branch to done label, otherwise fall through
68 // obj: Register holding the oop, preserved
69 // tmp1, tmp2: temp registers, trashed
70 void gen_cset_check(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& done);
71
72 // Generate check if object is resolved. Branch to resolved label, if not. Otherwise return resolved
73 // object in obj register.
74 // obj: object, resolved object on normal return
75 // tmp: temp register, trashed
76 void gen_resolved_check(MacroAssembler* masm, Register obj, Register tmp, Label& not_resolved);
77
78 public:
79 static address shenandoah_lrb();
80
81 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
82 #ifdef COMPILER1
83 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
84 void gen_load_reference_barrier_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
85 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
86 void generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm);
87 #endif
88
89 void load_reference_barrier(MacroAssembler* masm, Register dst);
90 void load_reference_barrier_native(MacroAssembler* masm, Register dst);
91
92 void cmpxchg_oop(MacroAssembler* masm,
93 Register res, Address addr, Register oldval, Register newval,
94 bool exchange, Register tmp1, Register tmp2);
95 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
96 Register src, Register dst, Register count);
97 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
|
47 bool tosca_live,
48 bool expand_call);
49
50 void shenandoah_write_barrier_pre(MacroAssembler* masm,
51 Register obj,
52 Register pre_val,
53 Register thread,
54 Register tmp,
55 bool tosca_live,
56 bool expand_call);
57
58 void resolve_forward_pointer(MacroAssembler* masm, Register dst, Register tmp = noreg);
59 void resolve_forward_pointer_not_null(MacroAssembler* masm, Register dst, Register tmp = noreg);
60
61 void load_reference_barrier_not_null(MacroAssembler* masm, Register dst);
62
63 void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
64
65 address generate_shenandoah_lrb(StubCodeGenerator* cgen);
66
67 public:
68 static address shenandoah_lrb();
69
70 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
71 #ifdef COMPILER1
72 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
73 void gen_load_reference_barrier_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
74 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
75 void generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm);
76 #endif
77
78 void load_reference_barrier(MacroAssembler* masm, Register dst);
79 void load_reference_barrier_native(MacroAssembler* masm, Register dst);
80
81 void cmpxchg_oop(MacroAssembler* masm,
82 Register res, Address addr, Register oldval, Register newval,
83 bool exchange, Register tmp1, Register tmp2);
84 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
85 Register src, Register dst, Register count);
86 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
|