hotspot/src/cpu/ppc/vm/frame_ppc.inline.hpp
changeset 23221 b70675ece1ce
parent 22861 f5c393d456fc
child 24349 d8f40e5b392d
equal deleted inserted replaced
23220:fc827339dc37 23221:b70675ece1ce
     1 /*
     1 /*
     2  * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * Copyright 2012, 2013 SAP AG. All rights reserved.
     3  * Copyright 2012, 2014 SAP AG. All rights reserved.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5  *
     5  *
     6  * This code is free software; you can redistribute it and/or modify it
     6  * This code is free software; you can redistribute it and/or modify it
     7  * under the terms of the GNU General Public License version 2 only, as
     7  * under the terms of the GNU General Public License version 2 only, as
     8  * published by the Free Software Foundation.
     8  * published by the Free Software Foundation.
    23  *
    23  *
    24  */
    24  */
    25 
    25 
    26 #ifndef CPU_PPC_VM_FRAME_PPC_INLINE_HPP
    26 #ifndef CPU_PPC_VM_FRAME_PPC_INLINE_HPP
    27 #define CPU_PPC_VM_FRAME_PPC_INLINE_HPP
    27 #define CPU_PPC_VM_FRAME_PPC_INLINE_HPP
    28 
       
    29 #ifndef CC_INTERP
       
    30 #error "CC_INTERP must be defined on PPC64"
       
    31 #endif
       
    32 
    28 
    33 // Inline functions for ppc64 frames:
    29 // Inline functions for ppc64 frames:
    34 
    30 
    35 // Find codeblob and set deopt_state.
    31 // Find codeblob and set deopt_state.
    36 inline void frame::find_codeblob_and_set_pc_and_deopt_state(address pc) {
    32 inline void frame::find_codeblob_and_set_pc_and_deopt_state(address pc) {
   197 
   193 
   198 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
   194 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
   199   interpreterState istate = get_interpreterState();
   195   interpreterState istate = get_interpreterState();
   200   return &istate->_constants;
   196   return &istate->_constants;
   201 }
   197 }
       
   198 
       
   199 #else // !CC_INTERP
       
   200 
       
   201 // Template Interpreter frame value accessors.
       
   202 
       
   203 inline frame::ijava_state* frame::get_ijava_state() const {
       
   204   return (ijava_state*) ((uintptr_t)fp() - ijava_state_size);
       
   205 }
       
   206 
       
   207 inline intptr_t** frame::interpreter_frame_locals_addr() const {
       
   208   return (intptr_t**) &(get_ijava_state()->locals);
       
   209 }
       
   210 inline intptr_t* frame::interpreter_frame_bcx_addr() const {
       
   211   return (intptr_t*) &(get_ijava_state()->bcp);
       
   212 }
       
   213 inline intptr_t* frame::interpreter_frame_mdx_addr() const {
       
   214   return (intptr_t*) &(get_ijava_state()->mdx);
       
   215 }
       
   216 // Pointer beyond the "oldest/deepest" BasicObjectLock on stack.
       
   217 inline BasicObjectLock* frame::interpreter_frame_monitor_end() const {
       
   218   return (BasicObjectLock *) get_ijava_state()->monitors;
       
   219 }
       
   220 
       
   221 inline BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
       
   222   return (BasicObjectLock *) get_ijava_state();
       
   223 }
       
   224 
       
   225 // SAPJVM ASc 2012-11-21. Return register stack slot addr at which currently interpreted method is found
       
   226 inline Method** frame::interpreter_frame_method_addr() const {
       
   227   return (Method**) &(get_ijava_state()->method);
       
   228 }
       
   229 inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const {
       
   230   return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
       
   231 }
       
   232 inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const {
       
   233   return (ConstantPoolCache**) &(get_ijava_state()->cpoolCache);
       
   234 }
       
   235 
       
   236 inline oop* frame::interpreter_frame_temp_oop_addr() const {
       
   237   return (oop *) &(get_ijava_state()->oop_tmp);
       
   238 }
       
   239 inline intptr_t* frame::interpreter_frame_esp() const {
       
   240   return (intptr_t*) get_ijava_state()->esp;
       
   241 }
       
   242 
       
   243 // Convenient setters
       
   244 inline void frame::interpreter_frame_set_monitor_end(BasicObjectLock* end)    { get_ijava_state()->monitors = (intptr_t) end;}
       
   245 inline void frame::interpreter_frame_set_cpcache(ConstantPoolCache* cp)       { *frame::interpreter_frame_cpoolcache_addr() = cp; }
       
   246 inline void frame::interpreter_frame_set_esp(intptr_t* esp)                   { get_ijava_state()->esp = (intptr_t) esp; }
       
   247 inline void frame::interpreter_frame_set_top_frame_sp(intptr_t* top_frame_sp) { get_ijava_state()->top_frame_sp = (intptr_t) top_frame_sp; }
       
   248 inline void frame::interpreter_frame_set_sender_sp(intptr_t* sender_sp)       { get_ijava_state()->sender_sp = (intptr_t) sender_sp; }
       
   249 
       
   250 inline intptr_t* frame::interpreter_frame_expression_stack() const {
       
   251   return (intptr_t*)interpreter_frame_monitor_end() - 1;
       
   252 }
       
   253 
       
   254 inline jint frame::interpreter_frame_expression_stack_direction() {
       
   255   return -1;
       
   256 }
       
   257 
       
   258 // top of expression stack
       
   259 inline intptr_t* frame::interpreter_frame_tos_address() const {
       
   260   return ((intptr_t*) get_ijava_state()->esp) + Interpreter::stackElementWords;
       
   261 }
       
   262 
       
   263 inline intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
       
   264   return &interpreter_frame_tos_address()[offset];
       
   265 }
       
   266 
   202 #endif // CC_INTERP
   267 #endif // CC_INTERP
   203 
   268 
   204 inline int frame::interpreter_frame_monitor_size() {
   269 inline int frame::interpreter_frame_monitor_size() {
   205   // Number of stack slots for a monitor.
   270   // Number of stack slots for a monitor.
   206   return round_to(BasicObjectLock::size(),  // number of stack slots
   271   return round_to(BasicObjectLock::size(),  // number of stack slots