258 LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info); 259 LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info); 260 261 // GC Barriers 262 263 // generic interface 264 265 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info); 266 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 267 268 // specific implementations 269 // pre barriers 270 271 void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 272 bool do_load, bool patch, CodeEmitInfo* info); 273 274 // post barriers 275 276 void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 277 void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 278 279 280 static LIR_Opr result_register_for(ValueType* type, bool callee = false); 281 282 ciObject* get_jobject_constant(Value value); 283 284 LIRItemList* invoke_visit_arguments(Invoke* x); 285 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list); 286 287 void trace_block_entry(BlockBegin* block); 288 289 // volatile field operations are never patchable because a klass 290 // must be loaded to know it's volatile which means that the offset 291 // it always known as well. 292 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info); 293 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info); 294 295 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile); 296 void get_Object_unsafe(LIR_Opr dest, LIR_Opr src, LIR_Opr offset, BasicType type, bool is_volatile); 297 528 virtual void do_LookupSwitch (LookupSwitch* x); 529 virtual void do_Return (Return* x); 530 virtual void do_Throw (Throw* x); 531 virtual void do_Base (Base* x); 532 virtual void do_OsrEntry (OsrEntry* x); 533 virtual void do_ExceptionObject(ExceptionObject* x); 534 virtual void do_RoundFP (RoundFP* x); 535 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x); 536 virtual void do_UnsafePutRaw (UnsafePutRaw* x); 537 virtual void do_UnsafeGetObject(UnsafeGetObject* x); 538 virtual void do_UnsafePutObject(UnsafePutObject* x); 539 virtual void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x); 540 virtual void do_ProfileCall (ProfileCall* x); 541 virtual void do_ProfileReturnType (ProfileReturnType* x); 542 virtual void do_ProfileInvoke (ProfileInvoke* x); 543 virtual void do_RuntimeCall (RuntimeCall* x); 544 virtual void do_MemBar (MemBar* x); 545 virtual void do_RangeCheckPredicate(RangeCheckPredicate* x); 546 #ifdef ASSERT 547 virtual void do_Assert (Assert* x); 548 #endif 549 }; 550 551 552 class LIRItem: public CompilationResourceObj { 553 private: 554 Value _value; 555 LIRGenerator* _gen; 556 LIR_Opr _result; 557 bool _destroys_register; 558 LIR_Opr _new_result; 559 560 LIRGenerator* gen() const { return _gen; } 561 562 public: 563 LIRItem(Value value, LIRGenerator* gen) { 564 _destroys_register = false; 565 _gen = gen; 566 set_instruction(value); 567 } | 258 LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info); 259 LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info); 260 261 // GC Barriers 262 263 // generic interface 264 265 void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info); 266 void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 267 268 // specific implementations 269 // pre barriers 270 271 void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, 272 bool do_load, bool patch, CodeEmitInfo* info); 273 274 // post barriers 275 276 void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 277 void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); 278 #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER 279 void CardTableModRef_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base); 280 #endif 281 282 283 static LIR_Opr result_register_for(ValueType* type, bool callee = false); 284 285 ciObject* get_jobject_constant(Value value); 286 287 LIRItemList* invoke_visit_arguments(Invoke* x); 288 void invoke_load_arguments(Invoke* x, LIRItemList* args, const LIR_OprList* arg_list); 289 290 void trace_block_entry(BlockBegin* block); 291 292 // volatile field operations are never patchable because a klass 293 // must be loaded to know it's volatile which means that the offset 294 // it always known as well. 295 void volatile_field_store(LIR_Opr value, LIR_Address* address, CodeEmitInfo* info); 296 void volatile_field_load(LIR_Address* address, LIR_Opr result, CodeEmitInfo* info); 297 298 void put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data, BasicType type, bool is_volatile); 299 void get_Object_unsafe(LIR_Opr dest, LIR_Opr src, LIR_Opr offset, BasicType type, bool is_volatile); 300 531 virtual void do_LookupSwitch (LookupSwitch* x); 532 virtual void do_Return (Return* x); 533 virtual void do_Throw (Throw* x); 534 virtual void do_Base (Base* x); 535 virtual void do_OsrEntry (OsrEntry* x); 536 virtual void do_ExceptionObject(ExceptionObject* x); 537 virtual void do_RoundFP (RoundFP* x); 538 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x); 539 virtual void do_UnsafePutRaw (UnsafePutRaw* x); 540 virtual void do_UnsafeGetObject(UnsafeGetObject* x); 541 virtual void do_UnsafePutObject(UnsafePutObject* x); 542 virtual void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x); 543 virtual void do_ProfileCall (ProfileCall* x); 544 virtual void do_ProfileReturnType (ProfileReturnType* x); 545 virtual void do_ProfileInvoke (ProfileInvoke* x); 546 virtual void do_RuntimeCall (RuntimeCall* x); 547 virtual void do_MemBar (MemBar* x); 548 virtual void do_RangeCheckPredicate(RangeCheckPredicate* x); 549 #ifdef ASSERT 550 virtual void do_Assert (Assert* x); 551 #endif 552 553 #ifdef C1_LIRGENERATOR_MD_HPP 554 #include C1_LIRGENERATOR_MD_HPP 555 #endif 556 }; 557 558 559 class LIRItem: public CompilationResourceObj { 560 private: 561 Value _value; 562 LIRGenerator* _gen; 563 LIR_Opr _result; 564 bool _destroys_register; 565 LIR_Opr _new_result; 566 567 LIRGenerator* gen() const { return _gen; } 568 569 public: 570 LIRItem(Value value, LIRGenerator* gen) { 571 _destroys_register = false; 572 _gen = gen; 573 set_instruction(value); 574 } |