195 Reexecute_True = 1 // true -- reexecute the bytecode |
195 Reexecute_True = 1 // true -- reexecute the bytecode |
196 } ReexecuteState; //Reexecute State |
196 } ReexecuteState; //Reexecute State |
197 |
197 |
198 private: |
198 private: |
199 JVMState* _caller; // List pointer for forming scope chains |
199 JVMState* _caller; // List pointer for forming scope chains |
200 uint _depth; // One mroe than caller depth, or one. |
200 uint _depth; // One more than caller depth, or one. |
201 uint _locoff; // Offset to locals in input edge mapping |
201 uint _locoff; // Offset to locals in input edge mapping |
202 uint _stkoff; // Offset to stack in input edge mapping |
202 uint _stkoff; // Offset to stack in input edge mapping |
203 uint _monoff; // Offset to monitors in input edge mapping |
203 uint _monoff; // Offset to monitors in input edge mapping |
204 uint _scloff; // Offset to fields of scalar objs in input edge mapping |
204 uint _scloff; // Offset to fields of scalar objs in input edge mapping |
205 uint _endoff; // Offset to end of input edge mapping |
205 uint _endoff; // Offset to end of input edge mapping |
221 // Create a new JVMState, ready for abstract interpretation. |
221 // Create a new JVMState, ready for abstract interpretation. |
222 JVMState(ciMethod* method, JVMState* caller); |
222 JVMState(ciMethod* method, JVMState* caller); |
223 JVMState(int stack_size); // root state; has a null method |
223 JVMState(int stack_size); // root state; has a null method |
224 |
224 |
225 // Access functions for the JVM |
225 // Access functions for the JVM |
|
226 // ... --|--- loc ---|--- stk ---|--- arg ---|--- mon ---|--- scl ---| |
|
227 // \ locoff \ stkoff \ argoff \ monoff \ scloff \ endoff |
226 uint locoff() const { return _locoff; } |
228 uint locoff() const { return _locoff; } |
227 uint stkoff() const { return _stkoff; } |
229 uint stkoff() const { return _stkoff; } |
228 uint argoff() const { return _stkoff + _sp; } |
230 uint argoff() const { return _stkoff + _sp; } |
229 uint monoff() const { return _monoff; } |
231 uint monoff() const { return _monoff; } |
230 uint scloff() const { return _scloff; } |
232 uint scloff() const { return _scloff; } |
231 uint endoff() const { return _endoff; } |
233 uint endoff() const { return _endoff; } |
232 uint oopoff() const { return debug_end(); } |
234 uint oopoff() const { return debug_end(); } |
233 |
235 |
234 int loc_size() const { return _stkoff - _locoff; } |
236 int loc_size() const { return stkoff() - locoff(); } |
235 int stk_size() const { return _monoff - _stkoff; } |
237 int stk_size() const { return monoff() - stkoff(); } |
236 int mon_size() const { return _scloff - _monoff; } |
238 int arg_size() const { return monoff() - argoff(); } |
237 int scl_size() const { return _endoff - _scloff; } |
239 int mon_size() const { return scloff() - monoff(); } |
238 |
240 int scl_size() const { return endoff() - scloff(); } |
239 bool is_loc(uint i) const { return i >= _locoff && i < _stkoff; } |
241 |
240 bool is_stk(uint i) const { return i >= _stkoff && i < _monoff; } |
242 bool is_loc(uint i) const { return locoff() <= i && i < stkoff(); } |
241 bool is_mon(uint i) const { return i >= _monoff && i < _scloff; } |
243 bool is_stk(uint i) const { return stkoff() <= i && i < monoff(); } |
242 bool is_scl(uint i) const { return i >= _scloff && i < _endoff; } |
244 bool is_mon(uint i) const { return monoff() <= i && i < scloff(); } |
|
245 bool is_scl(uint i) const { return scloff() <= i && i < endoff(); } |
243 |
246 |
244 uint sp() const { return _sp; } |
247 uint sp() const { return _sp; } |
245 int bci() const { return _bci; } |
248 int bci() const { return _bci; } |
246 bool should_reexecute() const { return _reexecute==Reexecute_True; } |
249 bool should_reexecute() const { return _reexecute==Reexecute_True; } |
247 bool is_reexecute_undefined() const { return _reexecute==Reexecute_Undefined; } |
250 bool is_reexecute_undefined() const { return _reexecute==Reexecute_Undefined; } |