155 Register _obj;
156 Address const _addr;
157 Register const _tmp1;
158 Register const _tmp2;
159 const bool _do_load;
160 const bool _narrow;
161 const bool _needs_load_ref_barrier;
162 const bool _needs_load_ref_weak_barrier;
163 const bool _needs_keep_alive_barrier;
164 bool _needs_far_jump;
165
166 static void register_stub(ShenandoahBarrierStubC2* stub);
167
168 int available_gp_registers();
169 bool is_live_register(Register reg);
170 bool is_special_register(Register reg);
171 Register select_temp_register(bool& selected_live, Register skip_reg1 = noreg, Register skip_reg2 = noreg);
172
173 void maybe_far_jump_if_zero(MacroAssembler& masm, Register reg);
174
175 void enter_if_gc_state(MacroAssembler& masm, const char test_state, Register tmp);
176
177 void keepalive(MacroAssembler& masm, Label* L_done);
178 void lrb(MacroAssembler& masm);
179
180 static void cardtable(MacroAssembler& masm, Address addr, Register tmp1, Register tmp2);
181
182 address keepalive_runtime_entry_addr();
183 address lrb_runtime_entry_addr();
184
185 static ShenandoahBarrierStubC2* create(const MachNode* node, Register obj, Address addr, Register tmp1, Register tmp2, bool narrow, bool do_load);
186 void post_init();
187
188 ShenandoahBarrierStubC2(const MachNode* node, Register obj, Address addr, Register tmp1, Register tmp2, bool narrow, bool do_load) :
189 BarrierStubC2(node),
190 _obj(obj),
191 _addr(addr),
192 _tmp1(tmp1),
193 _tmp2(tmp2),
194 _do_load(do_load),
195 _narrow(narrow),
|
155 Register _obj;
156 Address const _addr;
157 Register const _tmp1;
158 Register const _tmp2;
159 const bool _do_load;
160 const bool _narrow;
161 const bool _needs_load_ref_barrier;
162 const bool _needs_load_ref_weak_barrier;
163 const bool _needs_keep_alive_barrier;
164 bool _needs_far_jump;
165
166 static void register_stub(ShenandoahBarrierStubC2* stub);
167
168 int available_gp_registers();
169 bool is_live_register(Register reg);
170 bool is_special_register(Register reg);
171 Register select_temp_register(bool& selected_live, Register skip_reg1 = noreg, Register skip_reg2 = noreg);
172
173 void maybe_far_jump_if_zero(MacroAssembler& masm, Register reg);
174
175 void patchable_jump(MacroAssembler& masm, const char gc_state, bool jump_when_state, Label* L_target);
176
177 void patchable_jump_if_gc_state(MacroAssembler& masm, const char gc_state, Label* L_target) {
178 patchable_jump(masm, gc_state, true, L_target);
179 }
180 void patchable_jump_if_not_gc_state(MacroAssembler& masm, const char gc_state, Label* L_target) {
181 patchable_jump(masm, gc_state, false, L_target);
182 }
183
184 void enter_if_gc_state(MacroAssembler& masm, const char test_state);
185
186 void keepalive(MacroAssembler& masm, Label* L_done);
187 void lrb(MacroAssembler& masm);
188
189 static void cardtable(MacroAssembler& masm, Address addr, Register tmp1, Register tmp2);
190
191 address keepalive_runtime_entry_addr();
192 address lrb_runtime_entry_addr();
193
194 static ShenandoahBarrierStubC2* create(const MachNode* node, Register obj, Address addr, Register tmp1, Register tmp2, bool narrow, bool do_load);
195 void post_init();
196
197 ShenandoahBarrierStubC2(const MachNode* node, Register obj, Address addr, Register tmp1, Register tmp2, bool narrow, bool do_load) :
198 BarrierStubC2(node),
199 _obj(obj),
200 _addr(addr),
201 _tmp1(tmp1),
202 _tmp2(tmp2),
203 _do_load(do_load),
204 _narrow(narrow),
|