300 LIR_Opr access_atomic_xchg_at(DecoratorSet decorators, BasicType type,
301 LIRItem& base, LIRItem& offset, LIRItem& value);
302
303 LIR_Opr access_atomic_add_at(DecoratorSet decorators, BasicType type,
304 LIRItem& base, LIRItem& offset, LIRItem& value);
305
306 LIR_Opr access_resolve(DecoratorSet decorators, LIR_Opr obj);
307
308 // These need to guarantee JMM volatile semantics are preserved on each platform
309 // and requires one implementation per architecture.
310 LIR_Opr atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value);
311 LIR_Opr atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& new_value);
312 LIR_Opr atomic_add(BasicType type, LIR_Opr addr, LIRItem& new_value);
313
314 #ifdef CARDTABLEBARRIERSET_POST_BARRIER_HELPER
315 virtual void CardTableBarrierSet_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
316 #endif
317
318 // specific implementations
319 void array_store_check(LIR_Opr value, LIR_Opr array, CodeEmitInfo* store_check_info, ciMethod* profiled_method, int profiled_bci);
320
321 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
322
323 ciObject* get_jobject_constant(Value value);
324
325 LIRItemList* invoke_visit_arguments(Invoke* x);
326 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
327
328 void trace_block_entry(BlockBegin* block);
329
330 // volatile field operations are never patchable because a klass
331 // must be loaded to know it's volatile which means that the offset
332 // it always known as well.
333 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
334 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
335
336 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile);
337 void get_Object_unsafe(LIR_Opr dest, LIR_Opr src, LIR_Opr offset, BasicType type, bool is_volatile);
338
339 void arithmetic_call_op (Bytecodes::Code code, LIR_Opr result, LIR_OprList* args);
|
300 LIR_Opr access_atomic_xchg_at(DecoratorSet decorators, BasicType type,
301 LIRItem& base, LIRItem& offset, LIRItem& value);
302
303 LIR_Opr access_atomic_add_at(DecoratorSet decorators, BasicType type,
304 LIRItem& base, LIRItem& offset, LIRItem& value);
305
306 LIR_Opr access_resolve(DecoratorSet decorators, LIR_Opr obj);
307
308 // These need to guarantee JMM volatile semantics are preserved on each platform
309 // and requires one implementation per architecture.
310 LIR_Opr atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value);
311 LIR_Opr atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& new_value);
312 LIR_Opr atomic_add(BasicType type, LIR_Opr addr, LIRItem& new_value);
313
314 #ifdef CARDTABLEBARRIERSET_POST_BARRIER_HELPER
315 virtual void CardTableBarrierSet_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base);
316 #endif
317
318 // specific implementations
319 void array_store_check(LIR_Opr value, LIR_Opr array, CodeEmitInfo* store_check_info, ciMethod* profiled_method, int profiled_bci);
320 void flattened_array_store_check(LIR_Opr value, ciKlass* element_klass, CodeEmitInfo* store_check_info);
321
322 static LIR_Opr result_register_for(ValueType* type, bool callee = false);
323
324 ciObject* get_jobject_constant(Value value);
325
326 LIRItemList* invoke_visit_arguments(Invoke* x);
327 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list);
328
329 void trace_block_entry(BlockBegin* block);
330
331 // volatile field operations are never patchable because a klass
332 // must be loaded to know it's volatile which means that the offset
333 // it always known as well.
334 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info);
335 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info);
336
337 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile);
338 void get_Object_unsafe(LIR_Opr dest, LIR_Opr src, LIR_Opr offset, BasicType type, bool is_volatile);
339
340 void arithmetic_call_op (Bytecodes::Code code, LIR_Opr result, LIR_OprList* args);
|