269
270 // GC Barriers
271
272 // generic interface
273
274 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info);
275 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
276
277 LIR_Opr shenandoah_read_barrier(LIR_Opr obj, CodeEmitInfo* info, bool need_null_check);
278 LIR_Opr shenandoah_write_barrier(LIR_Opr obj, CodeEmitInfo* info, bool need_null_check);
279
280 // specific implementations
281 // pre barriers
282
283 void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
284 bool do_load, bool patch, CodeEmitInfo* info);
285
286 // post barriers
287
288 void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
289 void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
290 #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER
291 void CardTableModRef_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
292 #endif
293
294
295 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
296
297 ciObject* get_jobject_constant(Value value);
298
299 LIRItemList* invoke_visit_arguments(Invoke* x);
300 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
301
302 void trace_block_entry(BlockBegin* block);
303
304 // volatile field operations are never patchable because a klass
305 // must be loaded to know it's volatile which means that the offset
306 // it always known as well.
307 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
308 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
|
269
270 // GC Barriers
271
272 // generic interface
273
274 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info);
275 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
276
277 LIR_Opr shenandoah_read_barrier(LIR_Opr obj, CodeEmitInfo* info, bool need_null_check);
278 LIR_Opr shenandoah_write_barrier(LIR_Opr obj, CodeEmitInfo* info, bool need_null_check);
279
280 // specific implementations
281 // pre barriers
282
283 void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
284 bool do_load, bool patch, CodeEmitInfo* info);
285
286 // post barriers
287
288 void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
289 void Shenandoah_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
290 void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
291 #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER
292 void CardTableModRef_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
293 #endif
294
295
296 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
297
298 ciObject* get_jobject_constant(Value value);
299
300 LIRItemList* invoke_visit_arguments(Invoke* x);
301 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
302
303 void trace_block_entry(BlockBegin* block);
304
305 // volatile field operations are never patchable because a klass
306 // must be loaded to know it's volatile which means that the offset
307 // it always known as well.
308 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
309 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
|