src/cpu/sparc/vm/frame_sparc.hpp

Print this page




   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 






  25 // A frame represents a physical stack frame (an activation).  Frames can be
  26 // C or Java frames, and the Java frames can be interpreted or compiled.
  27 // In contrast, vframes represent source-level activations, so that one physical frame
  28 // can correspond to multiple source level frames because of inlining.
  29 // A frame is comprised of {pc, sp, younger_sp}
  30 
  31 
  32 // Layout of asm interpreter frame:
  33 //
  34 //  0xfffffff
  35 //  ......
  36 // [last  extra incoming arg,  (local # Nargs > 6 ? Nargs-1 : undef)]
  37 // .. Note: incoming args are copied to local frame area upon entry
  38 // [first extra incoming arg,  (local # Nargs > 6 ? 6       : undef)]
  39 // [6 words for C-arg storage (unused)] Are this and next one really needed?
  40 // [C-aggregate-word (unused)] Yes, if want extra params to be  in same place as C convention
  41 // [16 words for register saving]                                    <--- FP
  42 // [interpreter_frame_vm_locals ] (see below)
  43 
  44 //              Note: Llocals is always double-word aligned


 292     return ((interpreterState)sp_at(interpreter_state_ptr_offset));
 293   }
 294 
 295 
 296 #endif /* CC_INTERP */
 297 
 298 
 299 
 300  // Compiled frames
 301 
 302  public:
 303   // Tells if this register can hold 64 bits on V9 (really, V8+).
 304   static bool holds_a_doubleword(Register reg) {
 305 #ifdef _LP64
 306     //    return true;
 307     return reg->is_out() || reg->is_global();
 308 #else
 309     return reg->is_out() || reg->is_global();
 310 #endif
 311   }




   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef CPU_SPARC_VM_FRAME_SPARC_HPP
  26 #define CPU_SPARC_VM_FRAME_SPARC_HPP
  27 
  28 #include "runtime/synchronizer.hpp"
  29 #include "utilities/top.hpp"
  30 
  31 // A frame represents a physical stack frame (an activation).  Frames can be
  32 // C or Java frames, and the Java frames can be interpreted or compiled.
  33 // In contrast, vframes represent source-level activations, so that one physical frame
  34 // can correspond to multiple source level frames because of inlining.
  35 // A frame is comprised of {pc, sp, younger_sp}
  36 
  37 
  38 // Layout of asm interpreter frame:
  39 //
  40 //  0xfffffff
  41 //  ......
  42 // [last  extra incoming arg,  (local # Nargs > 6 ? Nargs-1 : undef)]
  43 // .. Note: incoming args are copied to local frame area upon entry
  44 // [first extra incoming arg,  (local # Nargs > 6 ? 6       : undef)]
  45 // [6 words for C-arg storage (unused)] Are this and next one really needed?
  46 // [C-aggregate-word (unused)] Yes, if want extra params to be  in same place as C convention
  47 // [16 words for register saving]                                    <--- FP
  48 // [interpreter_frame_vm_locals ] (see below)
  49 
  50 //              Note: Llocals is always double-word aligned


 298     return ((interpreterState)sp_at(interpreter_state_ptr_offset));
 299   }
 300 
 301 
 302 #endif /* CC_INTERP */
 303 
 304 
 305 
 306  // Compiled frames
 307 
 308  public:
 309   // Tells if this register can hold 64 bits on V9 (really, V8+).
 310   static bool holds_a_doubleword(Register reg) {
 311 #ifdef _LP64
 312     //    return true;
 313     return reg->is_out() || reg->is_global();
 314 #else
 315     return reg->is_out() || reg->is_global();
 316 #endif
 317   }
 318 
 319 #endif // CPU_SPARC_VM_FRAME_SPARC_HPP