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 void save_vector_registers(MacroAssembler* masm);
68 void restore_vector_registers(MacroAssembler* masm);
69
70 public:
71 static address shenandoah_lrb();
72
73 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
74 #ifdef COMPILER1
75 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
76 void gen_load_reference_barrier_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
77 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
78 #endif
79
80 void load_reference_barrier(MacroAssembler* masm, Register dst);
81 void load_reference_barrier_native(MacroAssembler* masm, Register dst);
82
83 void cmpxchg_oop(MacroAssembler* masm,
84 Register res, Address addr, Register oldval, Register newval,
85 bool exchange, Register tmp1, Register tmp2);
86 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
87 Register src, Register dst, Register count);
88 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
89 Register src, Register dst, Register count);
90 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
91 Register dst, Address src, Register tmp1, Register tmp_thread);
92 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
93 Address dst, Register val, Register tmp1, Register tmp2);
94
95 virtual void barrier_stubs_init();
96
97 };
|
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 in cset, branch to in_cset 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& in_cset);
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,
98 Register src, Register dst, Register count);
99 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
100 Register dst, Address src, Register tmp1, Register tmp_thread);
101 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
102 Address dst, Register val, Register tmp1, Register tmp2);
103
104 virtual void barrier_stubs_init();
105
106 };
|