134 int _total_frame_sizes; // Total of number*sizes frames |
134 int _total_frame_sizes; // Total of number*sizes frames |
135 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack |
135 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack |
136 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack |
136 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack |
137 intptr_t* _register_block; // Block for storing callee-saved registers. |
137 intptr_t* _register_block; // Block for storing callee-saved registers. |
138 BasicType _return_type; // Tells if we have to restore double or long return value |
138 BasicType _return_type; // Tells if we have to restore double or long return value |
|
139 intptr_t _initial_fp; // FP of the sender frame |
139 // The following fields are used as temps during the unpacking phase |
140 // The following fields are used as temps during the unpacking phase |
140 // (which is tight on registers, especially on x86). They really ought |
141 // (which is tight on registers, especially on x86). They really ought |
141 // to be PD variables but that involves moving this class into its own |
142 // to be PD variables but that involves moving this class into its own |
142 // file to use the pd include mechanism. Maybe in a later cleanup ... |
143 // file to use the pd include mechanism. Maybe in a later cleanup ... |
143 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) |
144 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) |
144 intptr_t _initial_fp; // SHOULD BE PD VARIABLE (x86/c2 initial ebp) |
|
145 intptr_t _unpack_kind; // SHOULD BE PD VARIABLE (x86 unpack kind) |
145 intptr_t _unpack_kind; // SHOULD BE PD VARIABLE (x86 unpack kind) |
146 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) |
146 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) |
147 public: |
147 public: |
148 // Constructor |
148 // Constructor |
149 UnrollBlock(int size_of_deoptimized_frame, |
149 UnrollBlock(int size_of_deoptimized_frame, |
162 int number_of_frames() const { return _number_of_frames; } |
162 int number_of_frames() const { return _number_of_frames; } |
163 address* frame_pcs() const { return _frame_pcs ; } |
163 address* frame_pcs() const { return _frame_pcs ; } |
164 |
164 |
165 // Returns the total size of frames |
165 // Returns the total size of frames |
166 int size_of_frames() const; |
166 int size_of_frames() const; |
|
167 |
|
168 void set_initial_fp(intptr_t fp) { _initial_fp = fp; } |
167 |
169 |
168 // Accessors used by the code generator for the unpack stub. |
170 // Accessors used by the code generator for the unpack stub. |
169 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } |
171 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } |
170 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); } |
172 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); } |
171 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); } |
173 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); } |