< prev index next >

src/share/vm/c1/c1_CodeStubs.hpp

Print this page
rev 8802 : G1 performance improvements: card batching, joining, sorting, prefetching and write barrier fence elision and simplification based on a global syncrhonization using handshakes piggybacking on thread-local safepoints.


 518   ArrayCopyStub(LIR_OpArrayCopy* op): _op(op) { }
 519 
 520   LIR_Opr src() const                         { return _op->src(); }
 521   LIR_Opr src_pos() const                     { return _op->src_pos(); }
 522   LIR_Opr dst() const                         { return _op->dst(); }
 523   LIR_Opr dst_pos() const                     { return _op->dst_pos(); }
 524   LIR_Opr length() const                      { return _op->length(); }
 525   LIR_Opr tmp() const                         { return _op->tmp(); }
 526 
 527   virtual void emit_code(LIR_Assembler* e);
 528   virtual CodeEmitInfo* info() const          { return _op->info(); }
 529   virtual void visit(LIR_OpVisitState* visitor) {
 530     // don't pass in the code emit info since it's processed in the fast path
 531     visitor->do_slow_case();
 532   }
 533 #ifndef PRODUCT
 534   virtual void print_name(outputStream* out) const { out->print("ArrayCopyStub"); }
 535 #endif // PRODUCT
 536 };
 537 























 538 //////////////////////////////////////////////////////////////////////////////////////////
 539 #if INCLUDE_ALL_GCS
 540 
 541 // Code stubs for Garbage-First barriers.
 542 class G1PreBarrierStub: public CodeStub {
 543  private:
 544   bool _do_load;
 545   LIR_Opr _addr;
 546   LIR_Opr _pre_val;
 547   LIR_PatchCode _patch_code;
 548   CodeEmitInfo* _info;
 549 
 550  public:
 551   // Version that _does_ generate a load of the previous value from addr.
 552   // addr (the address of the field to be read) must be a LIR_Address
 553   // pre_val (a temporary register) must be a register;
 554   G1PreBarrierStub(LIR_Opr addr, LIR_Opr pre_val, LIR_PatchCode patch_code, CodeEmitInfo* info) :
 555     _addr(addr), _pre_val(pre_val), _do_load(true),
 556     _patch_code(patch_code), _info(info)
 557   {




 518   ArrayCopyStub(LIR_OpArrayCopy* op): _op(op) { }
 519 
 520   LIR_Opr src() const                         { return _op->src(); }
 521   LIR_Opr src_pos() const                     { return _op->src_pos(); }
 522   LIR_Opr dst() const                         { return _op->dst(); }
 523   LIR_Opr dst_pos() const                     { return _op->dst_pos(); }
 524   LIR_Opr length() const                      { return _op->length(); }
 525   LIR_Opr tmp() const                         { return _op->tmp(); }
 526 
 527   virtual void emit_code(LIR_Assembler* e);
 528   virtual CodeEmitInfo* info() const          { return _op->info(); }
 529   virtual void visit(LIR_OpVisitState* visitor) {
 530     // don't pass in the code emit info since it's processed in the fast path
 531     visitor->do_slow_case();
 532   }
 533 #ifndef PRODUCT
 534   virtual void print_name(outputStream* out) const { out->print("ArrayCopyStub"); }
 535 #endif // PRODUCT
 536 };
 537 
 538 class C1ThreadLocalSafepoint: public CodeStub {
 539  private:
 540   address _safepoint_pc;
 541   bool _is_return;
 542 
 543  public:
 544   C1ThreadLocalSafepoint(bool is_return) : _is_return(is_return) { }
 545 
 546   bool is_return() { return _is_return; }
 547 
 548   address safepoint_pc() { return _safepoint_pc; }
 549   void set_safepoint_pc(address pc) { _safepoint_pc = pc; }
 550 
 551   virtual void emit_code(LIR_Assembler* e);
 552   virtual void visit(LIR_OpVisitState* visitor) {
 553     // don't pass in the code emit info since it's processed in the fast path
 554     visitor->do_slow_case();
 555   }
 556 #ifndef PRODUCT
 557   virtual void print_name(outputStream* out) const { out->print("C1ThreadLocalSafepoint"); }
 558 #endif // PRODUCT
 559 };
 560 
 561 //////////////////////////////////////////////////////////////////////////////////////////
 562 #if INCLUDE_ALL_GCS
 563 
 564 // Code stubs for Garbage-First barriers.
 565 class G1PreBarrierStub: public CodeStub {
 566  private:
 567   bool _do_load;
 568   LIR_Opr _addr;
 569   LIR_Opr _pre_val;
 570   LIR_PatchCode _patch_code;
 571   CodeEmitInfo* _info;
 572 
 573  public:
 574   // Version that _does_ generate a load of the previous value from addr.
 575   // addr (the address of the field to be read) must be a LIR_Address
 576   // pre_val (a temporary register) must be a register;
 577   G1PreBarrierStub(LIR_Opr addr, LIR_Opr pre_val, LIR_PatchCode patch_code, CodeEmitInfo* info) :
 578     _addr(addr), _pre_val(pre_val), _do_load(true),
 579     _patch_code(patch_code), _info(info)
 580   {


< prev index next >