115 private:
116 intptr_t* _continuation; // what to do when control gets back here
117 oopDesc* _saved_target; // target method handle to invoke on saved_args
118 oopDesc* _saved_args_layout; // caching point for MethodTypeForm.vmlayout cookie
119 intptr_t* _saved_args_base; // base of pushed arguments (slot 0, arg N) (-3)
120 intptr_t _conversion; // misc. information from original AdapterMethodHandle (-2)
121 intptr_t* _exact_sender_sp; // parallel to interpreter_frame_sender_sp (-1)
122 intptr_t* _sender_link; // *must* coincide with frame::link_offset (0)
123 address _sender_pc; // *must* coincide with frame::return_addr_offset (1)
124
125 public:
126 intptr_t* continuation() const { return _continuation; }
127 oop saved_target() const { return _saved_target; }
128 oop saved_args_layout() const { return _saved_args_layout; }
129 intptr_t* saved_args_base() const { return _saved_args_base; }
130 intptr_t conversion() const { return _conversion; }
131 intptr_t* exact_sender_sp() const { return _exact_sender_sp; }
132 intptr_t* sender_link() const { return _sender_link; }
133 address sender_pc() const { return _sender_pc; }
134
135 intptr_t* extended_sender_sp() const { return saved_args_base(); }
136
137 intptr_t return_value_slot_number() const {
138 return adapter_conversion_vminfo(conversion());
139 }
140 BasicType return_value_type() const {
141 return adapter_conversion_dest_type(conversion());
142 }
143 bool has_return_value_slot() const {
144 return return_value_type() != T_VOID;
145 }
146 intptr_t* return_value_slot_addr() const {
147 assert(has_return_value_slot(), "");
148 return saved_arg_slot_addr(return_value_slot_number());
149 }
150 intptr_t* saved_target_slot_addr() const {
151 return saved_arg_slot_addr(saved_args_length());
152 }
153 intptr_t* saved_arg_slot_addr(int slot) const {
154 assert(slot >= 0, "");
155 return (intptr_t*)( (address)saved_args_base() + (slot * Interpreter::stackElementSize) );
|
115 private:
116 intptr_t* _continuation; // what to do when control gets back here
117 oopDesc* _saved_target; // target method handle to invoke on saved_args
118 oopDesc* _saved_args_layout; // caching point for MethodTypeForm.vmlayout cookie
119 intptr_t* _saved_args_base; // base of pushed arguments (slot 0, arg N) (-3)
120 intptr_t _conversion; // misc. information from original AdapterMethodHandle (-2)
121 intptr_t* _exact_sender_sp; // parallel to interpreter_frame_sender_sp (-1)
122 intptr_t* _sender_link; // *must* coincide with frame::link_offset (0)
123 address _sender_pc; // *must* coincide with frame::return_addr_offset (1)
124
125 public:
126 intptr_t* continuation() const { return _continuation; }
127 oop saved_target() const { return _saved_target; }
128 oop saved_args_layout() const { return _saved_args_layout; }
129 intptr_t* saved_args_base() const { return _saved_args_base; }
130 intptr_t conversion() const { return _conversion; }
131 intptr_t* exact_sender_sp() const { return _exact_sender_sp; }
132 intptr_t* sender_link() const { return _sender_link; }
133 address sender_pc() const { return _sender_pc; }
134
135 intptr_t* extended_sender_sp() const {
136 // The extended sender SP is above the current RicochetFrame.
137 return (intptr_t*) (((address) this) + sizeof(RicochetFrame));
138 }
139
140 intptr_t return_value_slot_number() const {
141 return adapter_conversion_vminfo(conversion());
142 }
143 BasicType return_value_type() const {
144 return adapter_conversion_dest_type(conversion());
145 }
146 bool has_return_value_slot() const {
147 return return_value_type() != T_VOID;
148 }
149 intptr_t* return_value_slot_addr() const {
150 assert(has_return_value_slot(), "");
151 return saved_arg_slot_addr(return_value_slot_number());
152 }
153 intptr_t* saved_target_slot_addr() const {
154 return saved_arg_slot_addr(saved_args_length());
155 }
156 intptr_t* saved_arg_slot_addr(int slot) const {
157 assert(slot >= 0, "");
158 return (intptr_t*)( (address)saved_args_base() + (slot * Interpreter::stackElementSize) );
|