< prev index next >

src/hotspot/cpu/ppc/macroAssembler_ppc.hpp

Print this page
@@ -113,11 +113,17 @@
    inline int offset_to_method_toc(const address addr);
  
    // Global TOC.
    void calculate_address_from_global_toc(Register dst, address addr,
                                           bool hi16 = true, bool lo16 = true,
-                                          bool add_relocation = true, bool emit_dummy_addr = false);
+                                          bool add_relocation = true, bool emit_dummy_addr = false,
+                                          bool add_addr_to_reloc = true);
+   void calculate_address_from_global_toc(Register dst, Label& addr,
+                                          bool hi16 = true, bool lo16 = true,
+                                          bool add_relocation = true, bool emit_dummy_addr = false) {
+     calculate_address_from_global_toc(dst, target(addr), hi16, lo16, add_relocation, emit_dummy_addr, false);
+   }
    inline void calculate_address_from_global_toc_hi16only(Register dst, address addr) {
      calculate_address_from_global_toc(dst, addr, true, false);
    };
    inline void calculate_address_from_global_toc_lo16only(Register dst, address addr) {
      calculate_address_from_global_toc(dst, addr, false, true);

@@ -282,11 +288,14 @@
    // some ABI-related functions
  
    // Clobbers all volatile, (non-floating-point) general-purpose registers for debugging purposes.
    // This is especially useful for making calls to the JRT in places in which this hasn't been done before;
    // e.g. with the introduction of LRBs (load reference barriers) for concurrent garbage collection.
-   void clobber_volatile_gprs(Register excluded_register = noreg);
+   void clobber_volatile_gprs(Register excluded_register = noreg) NOT_DEBUG_RETURN;
+   // Load bad values into registers that are nonvolatile according to the ABI except R16_thread and R29_TOC.
+   // This is done after vthread preemption and before vthread resume.
+   void clobber_nonvolatile_registers() NOT_DEBUG_RETURN;
    void clobber_carg_stack_slots(Register tmp);
  
    void save_nonvolatile_gprs(   Register dst_base, int offset);
    void restore_nonvolatile_gprs(Register src_base, int offset);
  

@@ -396,11 +405,12 @@
      // to set up last_Java_frame in stubs; use noreg otherwise
      Register        last_java_sp,
      // the entry point
      address         entry_point,
      // flag which indicates if exception should be checked
-     bool            check_exception = true
+     bool            check_exception = true,
+     Label* last_java_pc = nullptr
    );
  
    // Support for VM calls. This is the base routine called by the
    // different versions of call_VM_leaf. The interpreter may customize
    // this version by overriding it for its purposes (e.g., to

@@ -409,11 +419,11 @@
  
   public:
    // Call into the VM.
    // Passes the thread pointer (in R3_ARG1) as a prepended argument.
    // Makes sure oop return values are visible to the GC.
-   void call_VM(Register oop_result, address entry_point, bool check_exceptions = true);
+   void call_VM(Register oop_result, address entry_point, bool check_exceptions = true, Label* last_java_pc = nullptr);
    void call_VM(Register oop_result, address entry_point, Register arg_1, bool check_exceptions = true);
    void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, bool check_exceptions = true);
    void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg3, bool check_exceptions = true);
    void call_VM_leaf(address entry_point);
    void call_VM_leaf(address entry_point, Register arg_1);

@@ -693,12 +703,12 @@
    // thread-local information).
  
    // Support for last Java frame (but use call_VM instead where possible):
    // access R16_thread->last_Java_sp.
    void set_last_Java_frame(Register last_java_sp, Register last_Java_pc);
-   void reset_last_Java_frame(void);
-   void set_top_ijava_frame_at_SP_as_last_Java_frame(Register sp, Register tmp1);
+   void reset_last_Java_frame(bool check_last_java_sp = true);
+   void set_top_ijava_frame_at_SP_as_last_Java_frame(Register sp, Register tmp1, Label* jpc = nullptr);
  
    // Read vm result from thread: oop_result = R16_thread->result;
    void get_vm_result  (Register oop_result);
    void get_vm_result_2(Register metadata_result);
  

@@ -907,11 +917,11 @@
    void asm_assert_eq(const char* msg) { asm_assert(true, msg); }
    void asm_assert_ne(const char* msg) { asm_assert(false, msg); }
  
   private:
    void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base,
-                             const char* msg);
+                             const char* msg) NOT_DEBUG_RETURN;
  
   public:
  
    void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg) {
      asm_assert_mems_zero(true,  8, mem_offset, mem_base, msg);
< prev index next >