< prev index next >

src/hotspot/cpu/s390/macroAssembler_s390.hpp

Print this page




 576  public:
 577   bool           call_far_patchable(address target, int64_t toc_offset);
 578   static bool    is_call_far_patchable_at(address inst_start);             // All supported forms of patchable calls.
 579   static bool    is_call_far_patchable_pcrelative_at(address inst_start);  // Pc-relative call with leading nops.
 580   static bool    is_call_far_pcrelative(address instruction_addr);         // Pure far pc-relative call, with one leading size adjustment nop.
 581   static void    set_dest_of_call_far_patchable_at(address inst_start, address target, int64_t toc_offset);
 582   static address get_dest_of_call_far_patchable_at(address inst_start, address toc_start);
 583 
 584   void align_call_far_patchable(address pc);
 585 
 586   // PCrelative TOC access.
 587 
 588   // This value is independent of code position - constant for the lifetime of the VM.
 589   static int call_far_patchable_size() {
 590     return load_const_from_toc_size() + call_byregister_size();
 591   }
 592 
 593   static int call_far_patchable_ret_addr_offset() { return call_far_patchable_size(); }
 594 
 595   static bool call_far_patchable_requires_alignment_nop(address pc) {
 596     if (!os::is_MP()) return false;
 597     int size = call_far_patchable_size();
 598     return ((intptr_t)(pc + size) & 0x03L) != 0;
 599   }
 600 
 601   // END OF PCrelative TOC access.
 602 
 603   static int jump_byregister_size()          { return 2; }
 604   static int jump_pcrelative_size()          { return 4; }
 605   static int jump_far_pcrelative_size()      { return 6; }
 606   static int call_byregister_size()          { return 2; }
 607   static int call_pcrelative_size()          { return 4; }
 608   static int call_far_pcrelative_size()      { return 2 + 6; } // Prepend each BRASL with a nop.
 609   static int call_far_pcrelative_size_raw()  { return 6; }     // Prepend each BRASL with a nop.
 610 
 611   //
 612   // Java utilities
 613   //
 614 
 615   // These routines should emit JVMTI PopFrame and ForceEarlyReturn handling code.
 616   // The implementation is only non-empty for the InterpreterMacroAssembler,




 576  public:
 577   bool           call_far_patchable(address target, int64_t toc_offset);
 578   static bool    is_call_far_patchable_at(address inst_start);             // All supported forms of patchable calls.
 579   static bool    is_call_far_patchable_pcrelative_at(address inst_start);  // Pc-relative call with leading nops.
 580   static bool    is_call_far_pcrelative(address instruction_addr);         // Pure far pc-relative call, with one leading size adjustment nop.
 581   static void    set_dest_of_call_far_patchable_at(address inst_start, address target, int64_t toc_offset);
 582   static address get_dest_of_call_far_patchable_at(address inst_start, address toc_start);
 583 
 584   void align_call_far_patchable(address pc);
 585 
 586   // PCrelative TOC access.
 587 
 588   // This value is independent of code position - constant for the lifetime of the VM.
 589   static int call_far_patchable_size() {
 590     return load_const_from_toc_size() + call_byregister_size();
 591   }
 592 
 593   static int call_far_patchable_ret_addr_offset() { return call_far_patchable_size(); }
 594 
 595   static bool call_far_patchable_requires_alignment_nop(address pc) {

 596     int size = call_far_patchable_size();
 597     return ((intptr_t)(pc + size) & 0x03L) != 0;
 598   }
 599 
 600   // END OF PCrelative TOC access.
 601 
 602   static int jump_byregister_size()          { return 2; }
 603   static int jump_pcrelative_size()          { return 4; }
 604   static int jump_far_pcrelative_size()      { return 6; }
 605   static int call_byregister_size()          { return 2; }
 606   static int call_pcrelative_size()          { return 4; }
 607   static int call_far_pcrelative_size()      { return 2 + 6; } // Prepend each BRASL with a nop.
 608   static int call_far_pcrelative_size_raw()  { return 6; }     // Prepend each BRASL with a nop.
 609 
 610   //
 611   // Java utilities
 612   //
 613 
 614   // These routines should emit JVMTI PopFrame and ForceEarlyReturn handling code.
 615   // The implementation is only non-empty for the InterpreterMacroAssembler,


< prev index next >