493 OopRecorder* oop_recorder() const { return _oop_recorder; } 494 CodeComments& comments() { return _comments; } 495 496 // Code generation 497 void relocate(address at, RelocationHolder const& rspec, int format = 0) { 498 _insts.relocate(at, rspec, format); 499 } 500 void relocate(address at, relocInfo::relocType rtype, int format = 0) { 501 _insts.relocate(at, rtype, format); 502 } 503 504 // Management of overflow storage for binding of Labels. 505 GrowableArray<int>* create_patch_overflow(); 506 507 // NMethod generation 508 void copy_code_and_locs_to(CodeBlob* blob) { 509 assert(blob != NULL, "sane"); 510 copy_relocations_to(blob); 511 copy_code_to(blob); 512 } 513 void copy_oops_to(CodeBlob* blob) { 514 if (!oop_recorder()->is_unused()) { 515 oop_recorder()->copy_to(blob); 516 } 517 } 518 519 // Transform an address from the code in this code buffer to a specified code buffer 520 address transform_address(const CodeBuffer &cb, address addr) const; 521 522 void block_comment(intptr_t offset, const char * comment) PRODUCT_RETURN; 523 524 #ifndef PRODUCT 525 public: 526 // Printing / Decoding 527 // decodes from decode_begin() to code_end() and sets decode_begin to end 528 void decode(); 529 void decode_all(); // decodes all the code 530 void skip_decode(); // sets decode_begin to code_end(); 531 void print(); 532 #endif 533 534 535 // The following header contains architecture-specific implementations | 493 OopRecorder* oop_recorder() const { return _oop_recorder; } 494 CodeComments& comments() { return _comments; } 495 496 // Code generation 497 void relocate(address at, RelocationHolder const& rspec, int format = 0) { 498 _insts.relocate(at, rspec, format); 499 } 500 void relocate(address at, relocInfo::relocType rtype, int format = 0) { 501 _insts.relocate(at, rtype, format); 502 } 503 504 // Management of overflow storage for binding of Labels. 505 GrowableArray<int>* create_patch_overflow(); 506 507 // NMethod generation 508 void copy_code_and_locs_to(CodeBlob* blob) { 509 assert(blob != NULL, "sane"); 510 copy_relocations_to(blob); 511 copy_code_to(blob); 512 } 513 void copy_oops_to(nmethod* nm) { 514 if (!oop_recorder()->is_unused()) { 515 oop_recorder()->copy_to(nm); 516 } 517 } 518 519 // Transform an address from the code in this code buffer to a specified code buffer 520 address transform_address(const CodeBuffer &cb, address addr) const; 521 522 void block_comment(intptr_t offset, const char * comment) PRODUCT_RETURN; 523 524 #ifndef PRODUCT 525 public: 526 // Printing / Decoding 527 // decodes from decode_begin() to code_end() and sets decode_begin to end 528 void decode(); 529 void decode_all(); // decodes all the code 530 void skip_decode(); // sets decode_begin to code_end(); 531 void print(); 532 #endif 533 534 535 // The following header contains architecture-specific implementations |