172 if (_tmp2->is_valid()) state->do_temp(_tmp2);
173 if (_result->is_valid()) state->do_output(_result);
174 }
175
176 virtual void emit_code(LIR_Assembler* masm);
177
178 virtual void print_instr(outputStream* out) const {
179 addr()->print(out); out->print(" ");
180 cmp_value()->print(out); out->print(" ");
181 new_value()->print(out); out->print(" ");
182 tmp1()->print(out); out->print(" ");
183 tmp2()->print(out); out->print(" ");
184 }
185 #ifndef PRODUCT
186 virtual const char* name() const {
187 return "shenandoah_cas_obj";
188 }
189 #endif // PRODUCT
190 };
191
192 class ShenandoahBarrierSetC1 : public BarrierSetC1 {
193 private:
194 CodeBlob* _pre_barrier_c1_runtime_code_blob;
195 CodeBlob* _load_reference_barrier_strong_rt_code_blob;
196 CodeBlob* _load_reference_barrier_strong_native_rt_code_blob;
197 CodeBlob* _load_reference_barrier_weak_rt_code_blob;
198 CodeBlob* _load_reference_barrier_phantom_rt_code_blob;
199
200 void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val);
201
202 LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
203
204 LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
205
206 LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type);
207
208 public:
209 ShenandoahBarrierSetC1();
210
211 CodeBlob* pre_barrier_c1_runtime_code_blob() {
212 assert(_pre_barrier_c1_runtime_code_blob != nullptr, "");
|
172 if (_tmp2->is_valid()) state->do_temp(_tmp2);
173 if (_result->is_valid()) state->do_output(_result);
174 }
175
176 virtual void emit_code(LIR_Assembler* masm);
177
178 virtual void print_instr(outputStream* out) const {
179 addr()->print(out); out->print(" ");
180 cmp_value()->print(out); out->print(" ");
181 new_value()->print(out); out->print(" ");
182 tmp1()->print(out); out->print(" ");
183 tmp2()->print(out); out->print(" ");
184 }
185 #ifndef PRODUCT
186 virtual const char* name() const {
187 return "shenandoah_cas_obj";
188 }
189 #endif // PRODUCT
190 };
191
192 class SCAddressTable;
193
194 class ShenandoahBarrierSetC1 : public BarrierSetC1 {
195 friend class SCAddressTable;
196 private:
197 CodeBlob* _pre_barrier_c1_runtime_code_blob;
198 CodeBlob* _load_reference_barrier_strong_rt_code_blob;
199 CodeBlob* _load_reference_barrier_strong_native_rt_code_blob;
200 CodeBlob* _load_reference_barrier_weak_rt_code_blob;
201 CodeBlob* _load_reference_barrier_phantom_rt_code_blob;
202
203 void pre_barrier(LIRGenerator* gen, CodeEmitInfo* info, DecoratorSet decorators, LIR_Opr addr_opr, LIR_Opr pre_val);
204
205 LIR_Opr load_reference_barrier(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
206
207 LIR_Opr load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr, DecoratorSet decorators);
208
209 LIR_Opr ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type);
210
211 public:
212 ShenandoahBarrierSetC1();
213
214 CodeBlob* pre_barrier_c1_runtime_code_blob() {
215 assert(_pre_barrier_c1_runtime_code_blob != nullptr, "");
|