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