16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
25 #define CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
26
27 #include "asm/macroAssembler.hpp"
28 #include "gc/shared/barrierSetAssembler.hpp"
29 #ifdef COMPILER1
30 #include "c1/c1_LIRAssembler.hpp"
31 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
32 #endif
33
34 class ShenandoahBarrierSetAssembler: public BarrierSetAssembler {
35 private:
36 void satb_write_barrier_pre(MacroAssembler* masm,
37 Register obj,
38 Register pre_val,
39 Register thread,
40 Register tmp,
41 bool tosca_live,
42 bool expand_call);
43
44 void shenandoah_write_barrier_pre(MacroAssembler* masm,
45 Register obj,
46 Register pre_val,
47 Register thread,
48 Register tmp,
49 bool tosca_live,
50 bool expand_call);
51 void shenandoah_write_barrier_post(MacroAssembler* masm,
52 Register store_addr,
53 Register new_val,
54 Register thread,
55 Register tmp,
56 Register tmp2);
57
58 void read_barrier(MacroAssembler* masm, Register dst);
59 void read_barrier_impl(MacroAssembler* masm, Register dst);
60
61 void read_barrier_not_null(MacroAssembler* masm, Register dst);
62 void read_barrier_not_null_impl(MacroAssembler* masm, Register dst);
63
64 void write_barrier(MacroAssembler* masm, Register dst);
65 void write_barrier_impl(MacroAssembler* masm, Register dst);
66
67 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
68 void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
69
70 public:
71 #ifdef COMPILER1
72 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
73 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
74 #endif
75
76 virtual void cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
77 Register res, Address addr, Register oldval, Register newval,
78 bool exchange, bool encode, Register tmp1, Register tmp2);
79 virtual void xchg_oop(MacroAssembler* masm, DecoratorSet decorators,
80 Register obj, Address addr, Register tmp);
81
82 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
83 Register src, Register dst, Register count);
84 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
85 Register src, Register dst, Register count);
86 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
87 Register dst, Address src, Register tmp1, Register tmp_thread);
88 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
89 Address dst, Register val, Register tmp1, Register tmp2);
90
91 virtual void obj_equals(MacroAssembler* masm, DecoratorSet decorators, Register src1, Register src2);
92 virtual void obj_equals_addr(MacroAssembler* masm, DecoratorSet decorators, Register src1, Address src2);
93
94 virtual void resolve_for_read(MacroAssembler* masm, DecoratorSet decorators, Register obj);
95 virtual void resolve_for_write(MacroAssembler* masm, DecoratorSet decorators, Register obj);
96
97 };
98
99 #endif // CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
|
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
25 #define CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
26
27 #include "asm/macroAssembler.hpp"
28 #include "gc/shared/barrierSetAssembler.hpp"
29 #ifdef COMPILER1
30 #include "c1/c1_LIRAssembler.hpp"
31 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
32 #endif
33
34 class ShenandoahBarrierSetAssembler: public BarrierSetAssembler {
35 private:
36
37 static address _shenandoah_wb;
38 static address _shenandoah_wb_C;
39
40 void satb_write_barrier_pre(MacroAssembler* masm,
41 Register obj,
42 Register pre_val,
43 Register thread,
44 Register tmp,
45 bool tosca_live,
46 bool expand_call);
47
48 void shenandoah_write_barrier_pre(MacroAssembler* masm,
49 Register obj,
50 Register pre_val,
51 Register thread,
52 Register tmp,
53 bool tosca_live,
54 bool expand_call);
55 void shenandoah_write_barrier_post(MacroAssembler* masm,
56 Register store_addr,
57 Register new_val,
58 Register thread,
59 Register tmp,
60 Register tmp2);
61
62 void read_barrier(MacroAssembler* masm, Register dst);
63 void read_barrier_impl(MacroAssembler* masm, Register dst);
64
65 void read_barrier_not_null(MacroAssembler* masm, Register dst);
66 void read_barrier_not_null_impl(MacroAssembler* masm, Register dst);
67
68 void write_barrier(MacroAssembler* masm, Register dst);
69 void write_barrier_impl(MacroAssembler* masm, Register dst);
70
71 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
72 void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
73
74 address generate_shenandoah_wb(StubCodeGenerator* cgen, bool c_abi, bool do_cset_test);
75
76 public:
77 static address shenandoah_wb();
78 static address shenandoah_wb_C();
79
80
81 #ifdef COMPILER1
82 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
83 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
84 #endif
85
86 virtual void cmpxchg_oop(MacroAssembler* masm, DecoratorSet decorators,
87 Register res, Address addr, Register oldval, Register newval,
88 bool exchange, bool encode, Register tmp1, Register tmp2);
89 virtual void xchg_oop(MacroAssembler* masm, DecoratorSet decorators,
90 Register obj, Address addr, Register tmp);
91
92 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
93 Register src, Register dst, Register count);
94 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
95 Register src, Register dst, Register count);
96 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
97 Register dst, Address src, Register tmp1, Register tmp_thread);
98 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
99 Address dst, Register val, Register tmp1, Register tmp2);
100
101 virtual void obj_equals(MacroAssembler* masm, DecoratorSet decorators, Register src1, Register src2);
102 virtual void obj_equals_addr(MacroAssembler* masm, DecoratorSet decorators, Register src1, Address src2);
103
104 virtual void resolve_for_read(MacroAssembler* masm, DecoratorSet decorators, Register obj);
105 virtual void resolve_for_write(MacroAssembler* masm, DecoratorSet decorators, Register obj);
106
107 virtual void barrier_stubs_init();
108
109 };
110
111 #endif // CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
|