257 void do_update_CRC32C(Intrinsic* x);
258 void do_vectorizedMismatch(Intrinsic* x);
259
260 LIR_Opr call_runtime(BasicTypeArray* signature, LIRItemList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
261 LIR_Opr call_runtime(BasicTypeArray* signature, LIR_OprList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
262
263 // convenience functions
264 LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info);
265 LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info);
266
267 // GC Barriers
268
269 // generic interface
270
271 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info);
272 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
273
274 // specific implementations
275 // pre barriers
276
277 void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
278 bool do_load, bool patch, CodeEmitInfo* info);
279
280 // post barriers
281
282 void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
283 void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
284 #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER
285 void CardTableModRef_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
286 #endif
287
288
289 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
290
291 ciObject* get_jobject_constant(Value value);
292
293 LIRItemList* invoke_visit_arguments(Invoke* x);
294 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
295
296 void trace_block_entry(BlockBegin* block);
297
298 // volatile field operations are never patchable because a klass
299 // must be loaded to know it's volatile which means that the offset
300 // it always known as well.
301 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
302 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
303
304 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile);
|
257 void do_update_CRC32C(Intrinsic* x);
258 void do_vectorizedMismatch(Intrinsic* x);
259
260 LIR_Opr call_runtime(BasicTypeArray* signature, LIRItemList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
261 LIR_Opr call_runtime(BasicTypeArray* signature, LIR_OprList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
262
263 // convenience functions
264 LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info);
265 LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info);
266
267 // GC Barriers
268
269 // generic interface
270
271 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info);
272 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
273
274 // specific implementations
275 // pre barriers
276
277 void G1BarrierSet_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val,
278 bool do_load, bool patch, CodeEmitInfo* info);
279
280 // post barriers
281
282 void G1BarrierSet_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
283 void CardTableBarrierSet_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val);
284 #ifdef CARDTABLEBARRIERSET_POST_BARRIER_HELPER
285 void CardTableBarrierSet_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
286 #endif
287
288
289 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
290
291 ciObject* get_jobject_constant(Value value);
292
293 LIRItemList* invoke_visit_arguments(Invoke* x);
294 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
295
296 void trace_block_entry(BlockBegin* block);
297
298 // volatile field operations are never patchable because a klass
299 // must be loaded to know it's volatile which means that the offset
300 // it always known as well.
301 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
302 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
303
304 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile);
|