src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8074457 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/frame_x86.hpp

Print this page




  84 //     manager actually installs a dummy pc pointing to RecursiveInterpreterActivation
  85 //     with a fake interpreter_state* parameter to make it easy to debug
  86 //     nested calls.
  87 
  88 // Note that contrary to the layout for the assembly interpreter the
  89 // expression stack allocated for the C++ interpreter is full sized.
  90 // However this is not as bad as it seems as the interpreter frame_manager
  91 // will truncate the unused space on successive method calls.
  92 //
  93 // ------------------------------ C++ interpreter ----------------------------------------
  94 
  95  public:
  96   enum {
  97     pc_return_offset                                 =  0,
  98     // All frames
  99     link_offset                                      =  0,
 100     return_addr_offset                               =  1,
 101     // non-interpreter frames
 102     sender_sp_offset                                 =  2,
 103 
 104 #ifndef CC_INTERP
 105 
 106     // Interpreter frames
 107     interpreter_frame_result_handler_offset          =  3, // for native calls only
 108     interpreter_frame_oop_temp_offset                =  2, // for native calls only
 109 
 110     interpreter_frame_sender_sp_offset               = -1,
 111     // outgoing sp before a call to an invoked method
 112     interpreter_frame_last_sp_offset                 = interpreter_frame_sender_sp_offset - 1,
 113     interpreter_frame_method_offset                  = interpreter_frame_last_sp_offset - 1,
 114     interpreter_frame_mdp_offset                     = interpreter_frame_method_offset - 1,
 115     interpreter_frame_cache_offset                   = interpreter_frame_mdp_offset - 1,
 116     interpreter_frame_locals_offset                  = interpreter_frame_cache_offset - 1,
 117     interpreter_frame_bcp_offset                     = interpreter_frame_locals_offset - 1,
 118     interpreter_frame_initial_sp_offset              = interpreter_frame_bcp_offset - 1,
 119 
 120     interpreter_frame_monitor_block_top_offset       = interpreter_frame_initial_sp_offset,
 121     interpreter_frame_monitor_block_bottom_offset    = interpreter_frame_initial_sp_offset,
 122 
 123 #endif // CC_INTERP
 124 
 125     // Entry frames
 126 #ifdef AMD64
 127 #ifdef _WIN64
 128     entry_frame_after_call_words                     =  60,
 129     entry_frame_call_wrapper_offset                  =  2,
 130 
 131     arg_reg_save_area_bytes                          = 32 // Register argument save area
 132 #else
 133     entry_frame_after_call_words                     = 13,
 134     entry_frame_call_wrapper_offset                  = -6,
 135 
 136     arg_reg_save_area_bytes                          =  0
 137 #endif // _WIN64
 138 #else
 139     entry_frame_call_wrapper_offset                  =  2
 140 #endif // AMD64
 141   };
 142 
 143   intptr_t ptr_at(int offset) const {
 144     return *ptr_at_addr(offset);


 176   frame(intptr_t* sp, intptr_t* fp, address pc);
 177 
 178   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
 179 
 180   frame(intptr_t* sp, intptr_t* fp);
 181 
 182   void init(intptr_t* sp, intptr_t* fp, address pc);
 183 
 184   // accessors for the instance variables
 185   // Note: not necessarily the real 'frame pointer' (see real_fp)
 186   intptr_t*   fp() const { return _fp; }
 187 
 188   inline address* sender_pc_addr() const;
 189 
 190   // expression stack tos if we are nested in a java call
 191   intptr_t* interpreter_frame_last_sp() const;
 192 
 193   // helper to update a map with callee-saved RBP
 194   static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
 195 
 196 #ifndef CC_INTERP
 197   // deoptimization support
 198   void interpreter_frame_set_last_sp(intptr_t* sp);
 199 #endif // CC_INTERP
 200 
 201 #ifdef CC_INTERP
 202   inline interpreterState get_interpreterState() const;
 203 #endif // CC_INTERP
 204 
 205 #endif // CPU_X86_VM_FRAME_X86_HPP


  84 //     manager actually installs a dummy pc pointing to RecursiveInterpreterActivation
  85 //     with a fake interpreter_state* parameter to make it easy to debug
  86 //     nested calls.
  87 
  88 // Note that contrary to the layout for the assembly interpreter the
  89 // expression stack allocated for the C++ interpreter is full sized.
  90 // However this is not as bad as it seems as the interpreter frame_manager
  91 // will truncate the unused space on successive method calls.
  92 //
  93 // ------------------------------ C++ interpreter ----------------------------------------
  94 
  95  public:
  96   enum {
  97     pc_return_offset                                 =  0,
  98     // All frames
  99     link_offset                                      =  0,
 100     return_addr_offset                               =  1,
 101     // non-interpreter frames
 102     sender_sp_offset                                 =  2,
 103 


 104     // Interpreter frames
 105     interpreter_frame_result_handler_offset          =  3, // for native calls only
 106     interpreter_frame_oop_temp_offset                =  2, // for native calls only
 107 
 108     interpreter_frame_sender_sp_offset               = -1,
 109     // outgoing sp before a call to an invoked method
 110     interpreter_frame_last_sp_offset                 = interpreter_frame_sender_sp_offset - 1,
 111     interpreter_frame_method_offset                  = interpreter_frame_last_sp_offset - 1,
 112     interpreter_frame_mdp_offset                     = interpreter_frame_method_offset - 1,
 113     interpreter_frame_cache_offset                   = interpreter_frame_mdp_offset - 1,
 114     interpreter_frame_locals_offset                  = interpreter_frame_cache_offset - 1,
 115     interpreter_frame_bcp_offset                     = interpreter_frame_locals_offset - 1,
 116     interpreter_frame_initial_sp_offset              = interpreter_frame_bcp_offset - 1,
 117 
 118     interpreter_frame_monitor_block_top_offset       = interpreter_frame_initial_sp_offset,
 119     interpreter_frame_monitor_block_bottom_offset    = interpreter_frame_initial_sp_offset,
 120 


 121     // Entry frames
 122 #ifdef AMD64
 123 #ifdef _WIN64
 124     entry_frame_after_call_words                     =  60,
 125     entry_frame_call_wrapper_offset                  =  2,
 126 
 127     arg_reg_save_area_bytes                          = 32 // Register argument save area
 128 #else
 129     entry_frame_after_call_words                     = 13,
 130     entry_frame_call_wrapper_offset                  = -6,
 131 
 132     arg_reg_save_area_bytes                          =  0
 133 #endif // _WIN64
 134 #else
 135     entry_frame_call_wrapper_offset                  =  2
 136 #endif // AMD64
 137   };
 138 
 139   intptr_t ptr_at(int offset) const {
 140     return *ptr_at_addr(offset);


 172   frame(intptr_t* sp, intptr_t* fp, address pc);
 173 
 174   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
 175 
 176   frame(intptr_t* sp, intptr_t* fp);
 177 
 178   void init(intptr_t* sp, intptr_t* fp, address pc);
 179 
 180   // accessors for the instance variables
 181   // Note: not necessarily the real 'frame pointer' (see real_fp)
 182   intptr_t*   fp() const { return _fp; }
 183 
 184   inline address* sender_pc_addr() const;
 185 
 186   // expression stack tos if we are nested in a java call
 187   intptr_t* interpreter_frame_last_sp() const;
 188 
 189   // helper to update a map with callee-saved RBP
 190   static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
 191 

 192   // deoptimization support
 193   void interpreter_frame_set_last_sp(intptr_t* sp);





 194 
 195 #endif // CPU_X86_VM_FRAME_X86_HPP
src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File