< prev index next >

src/hotspot/cpu/x86/frame_x86.hpp

Print this page
*** 114,11 ***
    // we need to know that value. However in order to compute the address
    // of the return address we need the real "raw" sp. By convention we
    // use sp() to mean "raw" sp and unextended_sp() to mean the caller's
    // original sp.
  
!   intptr_t*     _unextended_sp;
    void adjust_unextended_sp() NOT_DEBUG_RETURN;
  
    intptr_t* ptr_at_addr(int offset) const {
      return (intptr_t*) addr_at(offset);
    }
--- 114,12 ---
    // we need to know that value. However in order to compute the address
    // of the return address we need the real "raw" sp. By convention we
    // use sp() to mean "raw" sp and unextended_sp() to mean the caller's
    // original sp.
  
!   intptr_t* _unextended_sp;
+ 
    void adjust_unextended_sp() NOT_DEBUG_RETURN;
  
    intptr_t* ptr_at_addr(int offset) const {
      return (intptr_t*) addr_at(offset);
    }

*** 126,37 ***
  #ifdef ASSERT
    // Used in frame::sender_for_{interpreter,compiled}_frame
    static void verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp);
  #endif
  
   public:
    // Constructors
  
    frame(intptr_t* sp, intptr_t* fp, address pc);
  
    frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
  
    frame(intptr_t* sp, intptr_t* fp);
  
    void init(intptr_t* sp, intptr_t* fp, address pc);
  
    // accessors for the instance variables
    // Note: not necessarily the real 'frame pointer' (see real_fp)
!   intptr_t*   fp() const { return _fp; }
  
    inline address* sender_pc_addr() const;
  
    // expression stack tos if we are nested in a java call
    intptr_t* interpreter_frame_last_sp() const;
  
    // helper to update a map with callee-saved RBP
!   static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
  
    // deoptimization support
    void interpreter_frame_set_last_sp(intptr_t* sp);
  
    static jint interpreter_frame_expression_stack_direction() { return -1; }
  
    // returns the sending frame, without applying any barriers
!   frame sender_raw(RegisterMap* map) const;
  
  #endif // CPU_X86_FRAME_X86_HPP
--- 127,53 ---
  #ifdef ASSERT
    // Used in frame::sender_for_{interpreter,compiled}_frame
    static void verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp);
  #endif
  
+   const ImmutableOopMap* get_oop_map() const;
+ 
   public:
    // Constructors
  
    frame(intptr_t* sp, intptr_t* fp, address pc);
  
    frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
  
+   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
+ 
+   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map);
+ 
+   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool dummy); // used for fast frame construction by continuations
+ 
    frame(intptr_t* sp, intptr_t* fp);
  
    void init(intptr_t* sp, intptr_t* fp, address pc);
+   void setup(address pc);
  
    // accessors for the instance variables
    // Note: not necessarily the real 'frame pointer' (see real_fp)
!   intptr_t* fp() const { return _fp; }
+   void set_fp(intptr_t* newfp) { _fp = newfp; }
+   int offset_fp() const { return (int)(intptr_t)_fp; }
+   void set_offset_fp(int value) { _fp = (intptr_t*)(intptr_t)value; }
  
    inline address* sender_pc_addr() const;
  
    // expression stack tos if we are nested in a java call
+   template <bool relative = false>
    intptr_t* interpreter_frame_last_sp() const;
  
    // helper to update a map with callee-saved RBP
!   template <typename RegisterMapT>
+   static void update_map_with_saved_link(RegisterMapT* map, intptr_t** link_addr);
+   template <typename RegisterMapT>
+   static intptr_t** saved_link_address(const RegisterMapT* map);
  
    // deoptimization support
    void interpreter_frame_set_last_sp(intptr_t* sp);
  
    static jint interpreter_frame_expression_stack_direction() { return -1; }
  
    // returns the sending frame, without applying any barriers
!   inline frame sender_raw(RegisterMap* map) const;
  
  #endif // CPU_X86_FRAME_X86_HPP
< prev index next >