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 class LIR_Assembler;
31 class ShenandoahPreBarrierStub;
32 class ShenandoahWriteBarrierStub;
33 class StubAssembler;
34 class StubCodeGenerator;
35 #endif
36
37 class ShenandoahBarrierSetAssembler: public BarrierSetAssembler {
38 private:
39
40 static address _shenandoah_wb;
41 static address _shenandoah_wb_C;
42
43 void satb_write_barrier_pre(MacroAssembler* masm,
44 Register obj,
45 Register pre_val,
46 Register thread,
47 Register tmp,
48 bool tosca_live,
49 bool expand_call);
50
51 void shenandoah_write_barrier_pre(MacroAssembler* masm,
52 Register obj,
53 Register pre_val,
54 Register thread,
55 Register tmp,
56 bool tosca_live,
57 bool expand_call);
58
59 void read_barrier(MacroAssembler* masm, Register dst);
60 void read_barrier_impl(MacroAssembler* masm, Register dst);
61
62 void read_barrier_not_null(MacroAssembler* masm, Register dst);
63 void read_barrier_not_null_impl(MacroAssembler* masm, Register dst);
64
65 void write_barrier(MacroAssembler* masm, Register dst);
66 void write_barrier_impl(MacroAssembler* masm, Register dst);
67
68 void storeval_barrier(MacroAssembler* masm, Register dst, Register tmp);
69 void storeval_barrier_impl(MacroAssembler* masm, Register dst, Register tmp);
70
71 address generate_shenandoah_wb(StubCodeGenerator* cgen, bool c_abi, bool do_cset_test);
72
73 void save_vector_registers(MacroAssembler* masm);
74 void restore_vector_registers(MacroAssembler* masm);
75
76 public:
77 static address shenandoah_wb();
78 static address shenandoah_wb_C();
79
80 static bool is_shenandoah_wb_C_call(address call);
81
82 #ifdef COMPILER1
83 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
84 void gen_write_barrier_stub(LIR_Assembler* ce, ShenandoahWriteBarrierStub* stub);
85 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
86 #endif
87
88 void cmpxchg_oop(MacroAssembler* masm,
89 Register res, Address addr, Register oldval, Register newval,
90 bool exchange, bool encode, Register tmp1, Register tmp2);
91 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
92 Register src, Register dst, Register count);
93 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
94 Register src, Register dst, Register count);
95 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
96 Register dst, Address src, Register tmp1, Register tmp_thread);
97 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
98 Address dst, Register val, Register tmp1, Register tmp2);
99
100 #ifndef _LP64
|
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 class LIR_Assembler;
31 class ShenandoahPreBarrierStub;
32 class ShenandoahWriteBarrierStub;
33 class StubAssembler;
34 class StubCodeGenerator;
35 #endif
36
37 class ShenandoahBarrierSetAssembler: public BarrierSetAssembler {
38 private:
39
40 static address _shenandoah_wb;
41
42 void satb_write_barrier_pre(MacroAssembler* masm,
43 Register obj,
44 Register pre_val,
45 Register thread,
46 Register tmp,
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 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 address generate_shenandoah_wb(StubCodeGenerator* cgen);
71
72 public:
73 static address shenandoah_wb();
74
75 #ifdef COMPILER1
76 void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
77 void gen_write_barrier_stub(LIR_Assembler* ce, ShenandoahWriteBarrierStub* stub);
78 void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
79 #endif
80
81 void cmpxchg_oop(MacroAssembler* masm,
82 Register res, Address addr, Register oldval, Register newval,
83 bool exchange, bool encode, 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,
87 Register src, Register dst, Register count);
88 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
89 Register dst, Address src, Register tmp1, Register tmp_thread);
90 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
91 Address dst, Register val, Register tmp1, Register tmp2);
92
93 #ifndef _LP64
|