comparison src/share/vm/runtime/deoptimization.hpp @ 4137:04b9a2566eec

Merge with hsx23/hotspot.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sat, 17 Dec 2011 21:40:27 +0100
parents be4ca325525a f6f3bb0ee072
children 0ebca2e35ca5
comparison
equal deleted inserted replaced
3737:9dc19b7d89a3 4137:04b9a2566eec
32 class vframeArray; 32 class vframeArray;
33 class MonitorValue; 33 class MonitorValue;
34 class ObjectValue; 34 class ObjectValue;
35 35
36 class Deoptimization : AllStatic { 36 class Deoptimization : AllStatic {
37 friend class VMStructs;
38
37 public: 39 public:
38 // What condition caused the deoptimization? 40 // What condition caused the deoptimization?
39 enum DeoptReason { 41 enum DeoptReason {
40 Reason_many = -1, // indicates presence of several reasons 42 Reason_many = -1, // indicates presence of several reasons
41 Reason_none = 0, // indicates absence of a relevant deopt. 43 Reason_none = 0, // indicates absence of a relevant deopt.
135 int _total_frame_sizes; // Total of number*sizes frames 137 int _total_frame_sizes; // Total of number*sizes frames
136 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack 138 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack
137 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack 139 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack
138 intptr_t* _register_block; // Block for storing callee-saved registers. 140 intptr_t* _register_block; // Block for storing callee-saved registers.
139 BasicType _return_type; // Tells if we have to restore double or long return value 141 BasicType _return_type; // Tells if we have to restore double or long return value
140 intptr_t _initial_fp; // FP of the sender frame 142 intptr_t _initial_info; // Platform dependent data for the sender frame (was FP on x86)
141 int _caller_actual_parameters; // The number of actual arguments at the 143 int _caller_actual_parameters; // The number of actual arguments at the
142 // interpreted caller of the deoptimized frame 144 // interpreted caller of the deoptimized frame
143 145
144 // The following fields are used as temps during the unpacking phase 146 // The following fields are used as temps during the unpacking phase
145 // (which is tight on registers, especially on x86). They really ought 147 // (which is tight on registers, especially on x86). They really ought
168 address* frame_pcs() const { return _frame_pcs ; } 170 address* frame_pcs() const { return _frame_pcs ; }
169 171
170 // Returns the total size of frames 172 // Returns the total size of frames
171 int size_of_frames() const; 173 int size_of_frames() const;
172 174
173 void set_initial_fp(intptr_t fp) { _initial_fp = fp; } 175 void set_initial_info(intptr_t info) { _initial_info = info; }
174 176
175 int caller_actual_parameters() const { return _caller_actual_parameters; } 177 int caller_actual_parameters() const { return _caller_actual_parameters; }
176 178
177 // Accessors used by the code generator for the unpack stub. 179 // Accessors used by the code generator for the unpack stub.
178 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } 180 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); }
182 static int total_frame_sizes_offset_in_bytes() { return offset_of(UnrollBlock, _total_frame_sizes); } 184 static int total_frame_sizes_offset_in_bytes() { return offset_of(UnrollBlock, _total_frame_sizes); }
183 static int frame_pcs_offset_in_bytes() { return offset_of(UnrollBlock, _frame_pcs); } 185 static int frame_pcs_offset_in_bytes() { return offset_of(UnrollBlock, _frame_pcs); }
184 static int register_block_offset_in_bytes() { return offset_of(UnrollBlock, _register_block); } 186 static int register_block_offset_in_bytes() { return offset_of(UnrollBlock, _register_block); }
185 static int return_type_offset_in_bytes() { return offset_of(UnrollBlock, _return_type); } 187 static int return_type_offset_in_bytes() { return offset_of(UnrollBlock, _return_type); }
186 static int counter_temp_offset_in_bytes() { return offset_of(UnrollBlock, _counter_temp); } 188 static int counter_temp_offset_in_bytes() { return offset_of(UnrollBlock, _counter_temp); }
187 static int initial_fp_offset_in_bytes() { return offset_of(UnrollBlock, _initial_fp); } 189 static int initial_info_offset_in_bytes() { return offset_of(UnrollBlock, _initial_info); }
188 static int unpack_kind_offset_in_bytes() { return offset_of(UnrollBlock, _unpack_kind); } 190 static int unpack_kind_offset_in_bytes() { return offset_of(UnrollBlock, _unpack_kind); }
189 static int sender_sp_temp_offset_in_bytes() { return offset_of(UnrollBlock, _sender_sp_temp); } 191 static int sender_sp_temp_offset_in_bytes() { return offset_of(UnrollBlock, _sender_sp_temp); }
190 192
191 BasicType return_type() const { return _return_type; } 193 BasicType return_type() const { return _return_type; }
192 void print(); 194 void print();