106 *ptr_at_addr(offset) = value; 107 } 108 109 private: 110 // an additional field beyond _sp and _pc: 111 intptr_t* _fp; // frame pointer 112 // The interpreter and adapters will extend the frame of the caller. 113 // Since oopMaps are based on the sp of the caller before extension 114 // we need to know that value. However in order to compute the address 115 // of the return address we need the real "raw" sp. Since sparc already 116 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's 117 // original sp we use that convention. 118 119 intptr_t* _unextended_sp; 120 void adjust_unextended_sp() NOT_DEBUG_RETURN; 121 122 intptr_t* ptr_at_addr(int offset) const { 123 return (intptr_t*) addr_at(offset); 124 } 125 126 #ifdef ASSERT 127 // Used in frame::sender_for_{interpreter,compiled}_frame 128 static void verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp); 129 #endif 130 131 public: 132 // Constructors 133 134 frame(intptr_t* sp, intptr_t* fp, address pc); 135 136 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc); 137 138 frame(intptr_t* sp, intptr_t* fp); 139 140 void init(intptr_t* sp, intptr_t* fp, address pc); 141 142 // accessors for the instance variables 143 // Note: not necessarily the real 'frame pointer' (see real_fp) 144 intptr_t* fp() const { return _fp; } 145 | 106 *ptr_at_addr(offset) = value; 107 } 108 109 private: 110 // an additional field beyond _sp and _pc: 111 intptr_t* _fp; // frame pointer 112 // The interpreter and adapters will extend the frame of the caller. 113 // Since oopMaps are based on the sp of the caller before extension 114 // we need to know that value. However in order to compute the address 115 // of the return address we need the real "raw" sp. Since sparc already 116 // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's 117 // original sp we use that convention. 118 119 intptr_t* _unextended_sp; 120 void adjust_unextended_sp() NOT_DEBUG_RETURN; 121 122 intptr_t* ptr_at_addr(int offset) const { 123 return (intptr_t*) addr_at(offset); 124 } 125 126 // Support for scalarized value type calling convention 127 intptr_t* repair_sender_sp(intptr_t* sender_sp, intptr_t** saved_fp_addr) const; 128 129 #ifdef ASSERT 130 // Used in frame::sender_for_{interpreter,compiled}_frame 131 static void verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp); 132 #endif 133 134 public: 135 // Constructors 136 137 frame(intptr_t* sp, intptr_t* fp, address pc); 138 139 frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc); 140 141 frame(intptr_t* sp, intptr_t* fp); 142 143 void init(intptr_t* sp, intptr_t* fp, address pc); 144 145 // accessors for the instance variables 146 // Note: not necessarily the real 'frame pointer' (see real_fp) 147 intptr_t* fp() const { return _fp; } 148 |