56 Register addr, Register count,
57 Register tmp);
58
59 public:
60
61 void load_reference_barrier(MacroAssembler* masm, Register dst, Address src, DecoratorSet decorators);
62
63 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
64 Register src, Register dst, Register count);
65 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
66 Register src, Register dst, Register count);
67 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
68 Register dst, Address src, Register tmp1);
69 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
70 Address dst, Register val, Register tmp1, Register tmp2, Register tmp3);
71 virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
72 Register obj, Register tmp, Label& slowpath);
73 virtual void try_peek_weak_handle_in_nmethod(MacroAssembler* masm, Register weak_handle, Register obj, Label& slowpath);
74 virtual void check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& L_error);
75
76 #ifdef COMPILER1
77 void keepalive_barrier_c1_stub(LIR_Assembler* ce, ShenandoahKeepaliveBarrierStub* stub);
78 void keepalive_barrier_c1_runtime_stub(StubAssembler* sasm);
79
80 void load_reference_barrier_c1_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
81 void load_reference_barrier_c1_runtime_stub(StubAssembler* sasm, DecoratorSet decorators);
82 #endif
83
84 #ifdef COMPILER2
85 // Entry points from Matcher
86 void load_c2(const MachNode* node, MacroAssembler* masm, Register dst, Address src, bool narrow);
87 void store_c2(const MachNode* node, MacroAssembler* masm,
88 Address dst, bool dst_narrow, Register src, bool src_narrow, Register tmp);
89 void compare_and_set_c2(const MachNode* node, MacroAssembler* masm, Register res, Address addr, Register oldval, Register newval,
90 Register tmp, bool narrow);
91 void get_and_set_c2(const MachNode* node, MacroAssembler* masm, Register newval, Address addr, Register tmp, bool narrow);
92 #endif
93 };
94
95 #endif // CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
|
56 Register addr, Register count,
57 Register tmp);
58
59 public:
60
61 void load_reference_barrier(MacroAssembler* masm, Register dst, Address src, DecoratorSet decorators);
62
63 virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
64 Register src, Register dst, Register count);
65 virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
66 Register src, Register dst, Register count);
67 virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
68 Register dst, Address src, Register tmp1);
69 virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
70 Address dst, Register val, Register tmp1, Register tmp2, Register tmp3);
71 virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
72 Register obj, Register tmp, Label& slowpath);
73 virtual void try_peek_weak_handle_in_nmethod(MacroAssembler* masm, Register weak_handle, Register obj, Label& slowpath);
74 virtual void check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& L_error);
75
76 // Barrier hotpatching
77 static address parse_jump_address(address pc);
78 static void insert_patchable_nop(address pc);
79 static bool is_patchable_nop(address pc);
80 static void insert_patchable_jump(address pc, address target_pc);
81 static bool is_patchable_jump(address pc, address target_pc);
82
83 #ifdef COMPILER1
84 void keepalive_barrier_c1_stub(LIR_Assembler* ce, ShenandoahKeepaliveBarrierStub* stub);
85 void keepalive_barrier_c1_runtime_stub(StubAssembler* sasm);
86
87 void load_reference_barrier_c1_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
88 void load_reference_barrier_c1_runtime_stub(StubAssembler* sasm, DecoratorSet decorators);
89 #endif
90
91 #ifdef COMPILER2
92 // Entry points from Matcher
93 void load_c2(const MachNode* node, MacroAssembler* masm, Register dst, Address src, bool narrow);
94 void store_c2(const MachNode* node, MacroAssembler* masm,
95 Address dst, bool dst_narrow, Register src, bool src_narrow, Register tmp);
96 void compare_and_set_c2(const MachNode* node, MacroAssembler* masm, Register res, Address addr, Register oldval, Register newval,
97 Register tmp, bool narrow);
98 void get_and_set_c2(const MachNode* node, MacroAssembler* masm, Register newval, Address addr, Register tmp, bool narrow);
99 #endif
100 };
101
102 #endif // CPU_X86_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_X86_HPP
|