src/share/vm/runtime/frame.hpp

Print this page
rev 5992 : 8035396: Introduce accessor for tmp_oop in frame.


 297   static  jint  interpreter_frame_expression_stack_direction();
 298 
 299   // The _at version returns a pointer because the address is used for GC.
 300   intptr_t* interpreter_frame_expression_stack_at(jint offset) const;
 301 
 302   // top of expression stack
 303   intptr_t* interpreter_frame_tos_at(jint offset) const;
 304   intptr_t* interpreter_frame_tos_address() const;
 305 
 306 
 307   jint  interpreter_frame_expression_stack_size() const;
 308 
 309   intptr_t* interpreter_frame_sender_sp() const;
 310 
 311 #ifndef CC_INTERP
 312   // template based interpreter deoptimization support
 313   void  set_interpreter_frame_sender_sp(intptr_t* sender_sp);
 314   void interpreter_frame_set_monitor_end(BasicObjectLock* value);
 315 #endif // CC_INTERP
 316 



 317   // BasicObjectLocks:
 318   //
 319   // interpreter_frame_monitor_begin is higher in memory than interpreter_frame_monitor_end
 320   // Interpreter_frame_monitor_begin points to one element beyond the oldest one,
 321   // interpreter_frame_monitor_end   points to the youngest one, or if there are none,
 322   //                                 it points to one beyond where the first element will be.
 323   // interpreter_frame_monitor_size  reports the allocation size of a monitor in the interpreter stack.
 324   //                                 this value is >= BasicObjectLock::size(), and may be rounded up
 325 
 326   BasicObjectLock* interpreter_frame_monitor_begin() const;
 327   BasicObjectLock* interpreter_frame_monitor_end()   const;
 328   BasicObjectLock* next_monitor_in_interpreter_frame(BasicObjectLock* current) const;
 329   BasicObjectLock* previous_monitor_in_interpreter_frame(BasicObjectLock* current) const;
 330   static int interpreter_frame_monitor_size();
 331 
 332   void interpreter_frame_verify_monitor(BasicObjectLock* value) const;
 333 
 334   // Tells whether the current interpreter_frame frame pointer
 335   // corresponds to the old compiled/deoptimized fp
 336   // The receiver used to be a top level frame
 337   bool interpreter_frame_equals_unpacked_fp(intptr_t* fp);
 338 
 339   // Return/result value from this interpreter frame
 340   // If the method return type is T_OBJECT or T_ARRAY populates oop_result
 341   // For other (non-T_VOID) the appropriate field in the jvalue is populated
 342   // with the result value.
 343   // Should only be called when at method exit when the method is not
 344   // exiting due to an exception.
 345   BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result);
 346 
 347  public:
 348   // Method & constant pool cache
 349   Method* interpreter_frame_method() const;
 350   void interpreter_frame_set_method(Method* method);
 351   Method** interpreter_frame_method_addr() const;
 352   ConstantPoolCache** interpreter_frame_cache_addr() const;
 353 #ifdef PPC32
 354   oop* interpreter_frame_mirror_addr() const;
 355 #endif
 356 
 357  public:
 358   // Entry frames
 359   JavaCallWrapper* entry_frame_call_wrapper() const { return *entry_frame_call_wrapper_addr(); }
 360   JavaCallWrapper* entry_frame_call_wrapper_if_safe(JavaThread* thread) const;
 361   JavaCallWrapper** entry_frame_call_wrapper_addr() const;
 362   intptr_t* entry_frame_argument_at(int offset) const;
 363 
 364   // tells whether there is another chunk of Delta stack above
 365   bool entry_frame_is_first() const;
 366 
 367   // Compiled frames:
 368 
 369  public:
 370   // Given the index of a local, and the number of argument words
 371   // in this stack frame, tell which word of the stack frame to find
 372   // the local in.  Arguments are stored above the ofp/rpc pair,
 373   // while other locals are stored below it.
 374   // Since monitors (BasicLock blocks) are also assigned indexes,
 375   // but may have different storage requirements, their presence




 297   static  jint  interpreter_frame_expression_stack_direction();
 298 
 299   // The _at version returns a pointer because the address is used for GC.
 300   intptr_t* interpreter_frame_expression_stack_at(jint offset) const;
 301 
 302   // top of expression stack
 303   intptr_t* interpreter_frame_tos_at(jint offset) const;
 304   intptr_t* interpreter_frame_tos_address() const;
 305 
 306 
 307   jint  interpreter_frame_expression_stack_size() const;
 308 
 309   intptr_t* interpreter_frame_sender_sp() const;
 310 
 311 #ifndef CC_INTERP
 312   // template based interpreter deoptimization support
 313   void  set_interpreter_frame_sender_sp(intptr_t* sender_sp);
 314   void interpreter_frame_set_monitor_end(BasicObjectLock* value);
 315 #endif // CC_INTERP
 316 
 317   // Address of the temp oop in the frame. Needed as GC root.
 318   oop* interpreter_frame_temp_oop_addr() const;
 319 
 320   // BasicObjectLocks:
 321   //
 322   // interpreter_frame_monitor_begin is higher in memory than interpreter_frame_monitor_end
 323   // Interpreter_frame_monitor_begin points to one element beyond the oldest one,
 324   // interpreter_frame_monitor_end   points to the youngest one, or if there are none,
 325   //                                 it points to one beyond where the first element will be.
 326   // interpreter_frame_monitor_size  reports the allocation size of a monitor in the interpreter stack.
 327   //                                 this value is >= BasicObjectLock::size(), and may be rounded up
 328 
 329   BasicObjectLock* interpreter_frame_monitor_begin() const;
 330   BasicObjectLock* interpreter_frame_monitor_end()   const;
 331   BasicObjectLock* next_monitor_in_interpreter_frame(BasicObjectLock* current) const;
 332   BasicObjectLock* previous_monitor_in_interpreter_frame(BasicObjectLock* current) const;
 333   static int interpreter_frame_monitor_size();
 334 
 335   void interpreter_frame_verify_monitor(BasicObjectLock* value) const;
 336 
 337   // Tells whether the current interpreter_frame frame pointer
 338   // corresponds to the old compiled/deoptimized fp
 339   // The receiver used to be a top level frame
 340   bool interpreter_frame_equals_unpacked_fp(intptr_t* fp);
 341 
 342   // Return/result value from this interpreter frame
 343   // If the method return type is T_OBJECT or T_ARRAY populates oop_result
 344   // For other (non-T_VOID) the appropriate field in the jvalue is populated
 345   // with the result value.
 346   // Should only be called when at method exit when the method is not
 347   // exiting due to an exception.
 348   BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result);
 349 
 350  public:
 351   // Method & constant pool cache
 352   Method* interpreter_frame_method() const;
 353   void interpreter_frame_set_method(Method* method);
 354   Method** interpreter_frame_method_addr() const;
 355   ConstantPoolCache** interpreter_frame_cache_addr() const;



 356 
 357  public:
 358   // Entry frames
 359   JavaCallWrapper* entry_frame_call_wrapper() const { return *entry_frame_call_wrapper_addr(); }
 360   JavaCallWrapper* entry_frame_call_wrapper_if_safe(JavaThread* thread) const;
 361   JavaCallWrapper** entry_frame_call_wrapper_addr() const;
 362   intptr_t* entry_frame_argument_at(int offset) const;
 363 
 364   // tells whether there is another chunk of Delta stack above
 365   bool entry_frame_is_first() const;
 366 
 367   // Compiled frames:
 368 
 369  public:
 370   // Given the index of a local, and the number of argument words
 371   // in this stack frame, tell which word of the stack frame to find
 372   // the local in.  Arguments are stored above the ofp/rpc pair,
 373   // while other locals are stored below it.
 374   // Since monitors (BasicLock blocks) are also assigned indexes,
 375   // but may have different storage requirements, their presence