81 82 inline address* frame::O7_addr() const { return (address*) &younger_sp()[ I7->sp_offset_in_saved_window()]; } 83 inline address* frame::O0_addr() const { return (address*) &younger_sp()[ I0->sp_offset_in_saved_window()]; } 84 85 inline intptr_t* frame::sender_sp() const { return fp(); } 86 87 inline intptr_t* frame::real_fp() const { return fp(); } 88 89 // Used only in frame::oopmapreg_to_location 90 // This return a value in VMRegImpl::slot_size 91 inline int frame::pd_oop_map_offset_adjustment() const { 92 return _sp_adjustment_by_callee * VMRegImpl::slots_per_word; 93 } 94 95 #ifdef CC_INTERP 96 inline intptr_t** frame::interpreter_frame_locals_addr() const { 97 interpreterState istate = get_interpreterState(); 98 return (intptr_t**) &istate->_locals; 99 } 100 101 inline intptr_t* frame::interpreter_frame_bcx_addr() const { 102 interpreterState istate = get_interpreterState(); 103 return (intptr_t*) &istate->_bcp; 104 } 105 106 inline intptr_t* frame::interpreter_frame_mdx_addr() const { 107 interpreterState istate = get_interpreterState(); 108 return (intptr_t*) &istate->_mdx; 109 } 110 111 inline jint frame::interpreter_frame_expression_stack_direction() { return -1; } 112 113 // bottom(base) of the expression stack (highest address) 114 inline intptr_t* frame::interpreter_frame_expression_stack() const { 115 return (intptr_t*)interpreter_frame_monitor_end() - 1; 116 } 117 118 // top of expression stack (lowest address) 119 inline intptr_t* frame::interpreter_frame_tos_address() const { 120 interpreterState istate = get_interpreterState(); 121 return istate->_stack + 1; // Is this off by one? QQQ 122 } 123 124 // monitor elements 125 126 // in keeping with Intel side: end is lower in memory than begin; 148 149 // Constant pool cache 150 151 // where LcpoolCache is saved: 152 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { 153 interpreterState istate = get_interpreterState(); 154 return &istate->_constants; // should really use accessor 155 } 156 157 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { 158 interpreterState istate = get_interpreterState(); 159 return &istate->_constants; 160 } 161 162 #else // !CC_INTERP 163 164 inline intptr_t** frame::interpreter_frame_locals_addr() const { 165 return (intptr_t**) sp_addr_at( Llocals->sp_offset_in_saved_window()); 166 } 167 168 inline intptr_t* frame::interpreter_frame_bcx_addr() const { 169 // %%%%% reinterpreting Lbcp as a bcx 170 return (intptr_t*) sp_addr_at( Lbcp->sp_offset_in_saved_window()); 171 } 172 173 inline intptr_t* frame::interpreter_frame_mdx_addr() const { 174 // %%%%% reinterpreting ImethodDataPtr as a mdx 175 return (intptr_t*) sp_addr_at( ImethodDataPtr->sp_offset_in_saved_window()); 176 } 177 178 inline jint frame::interpreter_frame_expression_stack_direction() { return -1; } 179 180 // bottom(base) of the expression stack (highest address) 181 inline intptr_t* frame::interpreter_frame_expression_stack() const { 182 return (intptr_t*)interpreter_frame_monitors() - 1; 183 } 184 185 // top of expression stack (lowest address) 186 inline intptr_t* frame::interpreter_frame_tos_address() const { 187 return *interpreter_frame_esp_addr() + 1; 188 } 189 190 inline BasicObjectLock** frame::interpreter_frame_monitors_addr() const { 191 return (BasicObjectLock**) sp_addr_at(Lmonitors->sp_offset_in_saved_window()); 192 } 193 inline intptr_t** frame::interpreter_frame_esp_addr() const { | 81 82 inline address* frame::O7_addr() const { return (address*) &younger_sp()[ I7->sp_offset_in_saved_window()]; } 83 inline address* frame::O0_addr() const { return (address*) &younger_sp()[ I0->sp_offset_in_saved_window()]; } 84 85 inline intptr_t* frame::sender_sp() const { return fp(); } 86 87 inline intptr_t* frame::real_fp() const { return fp(); } 88 89 // Used only in frame::oopmapreg_to_location 90 // This return a value in VMRegImpl::slot_size 91 inline int frame::pd_oop_map_offset_adjustment() const { 92 return _sp_adjustment_by_callee * VMRegImpl::slots_per_word; 93 } 94 95 #ifdef CC_INTERP 96 inline intptr_t** frame::interpreter_frame_locals_addr() const { 97 interpreterState istate = get_interpreterState(); 98 return (intptr_t**) &istate->_locals; 99 } 100 101 inline intptr_t* frame::interpreter_frame_bcp_addr() const { 102 interpreterState istate = get_interpreterState(); 103 return (intptr_t*) &istate->_bcp; 104 } 105 106 inline intptr_t* frame::interpreter_frame_mdp_addr() const { 107 interpreterState istate = get_interpreterState(); 108 return (intptr_t*) &istate->_mdx; 109 } 110 111 inline jint frame::interpreter_frame_expression_stack_direction() { return -1; } 112 113 // bottom(base) of the expression stack (highest address) 114 inline intptr_t* frame::interpreter_frame_expression_stack() const { 115 return (intptr_t*)interpreter_frame_monitor_end() - 1; 116 } 117 118 // top of expression stack (lowest address) 119 inline intptr_t* frame::interpreter_frame_tos_address() const { 120 interpreterState istate = get_interpreterState(); 121 return istate->_stack + 1; // Is this off by one? QQQ 122 } 123 124 // monitor elements 125 126 // in keeping with Intel side: end is lower in memory than begin; 148 149 // Constant pool cache 150 151 // where LcpoolCache is saved: 152 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { 153 interpreterState istate = get_interpreterState(); 154 return &istate->_constants; // should really use accessor 155 } 156 157 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { 158 interpreterState istate = get_interpreterState(); 159 return &istate->_constants; 160 } 161 162 #else // !CC_INTERP 163 164 inline intptr_t** frame::interpreter_frame_locals_addr() const { 165 return (intptr_t**) sp_addr_at( Llocals->sp_offset_in_saved_window()); 166 } 167 168 inline intptr_t* frame::interpreter_frame_bcp_addr() const { 169 return (intptr_t*) sp_addr_at( Lbcp->sp_offset_in_saved_window()); 170 } 171 172 inline intptr_t* frame::interpreter_frame_mdp_addr() const { 173 // %%%%% reinterpreting ImethodDataPtr as a mdx 174 return (intptr_t*) sp_addr_at( ImethodDataPtr->sp_offset_in_saved_window()); 175 } 176 177 inline jint frame::interpreter_frame_expression_stack_direction() { return -1; } 178 179 // bottom(base) of the expression stack (highest address) 180 inline intptr_t* frame::interpreter_frame_expression_stack() const { 181 return (intptr_t*)interpreter_frame_monitors() - 1; 182 } 183 184 // top of expression stack (lowest address) 185 inline intptr_t* frame::interpreter_frame_tos_address() const { 186 return *interpreter_frame_esp_addr() + 1; 187 } 188 189 inline BasicObjectLock** frame::interpreter_frame_monitors_addr() const { 190 return (BasicObjectLock**) sp_addr_at(Lmonitors->sp_offset_in_saved_window()); 191 } 192 inline intptr_t** frame::interpreter_frame_esp_addr() const { |