Mercurial > hg > truffle
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(); |