interpreterFrame_zero.hpp revision 1472:c18cbe5936b8
1/* 2 * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. 3 * Copyright 2008, 2010 Red Hat, Inc. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 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 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26#ifdef CC_INTERP 27// | ... | 28// +--------------------+ ------------------ 29// | stack slot n-1 | low addresses 30// | ... | 31// | stack slot 0 | 32// | monitor 0 (maybe) | 33// | ... | 34// | interpreter state | 35// | ... | 36// | frame_type | 37// | next_frame | high addresses 38// +--------------------+ ------------------ 39// | ... | 40 41class InterpreterFrame : public ZeroFrame { 42 friend class AbstractInterpreter; 43 44 private: 45 InterpreterFrame() : ZeroFrame() { 46 ShouldNotCallThis(); 47 } 48 49 protected: 50 enum Layout { 51 istate_off = jf_header_words + 52 (align_size_up_(sizeof(BytecodeInterpreter), 53 wordSize) >> LogBytesPerWord) - 1, 54 header_words 55 }; 56 57 public: 58 static InterpreterFrame *build(const methodOop method, TRAPS); 59 static InterpreterFrame *build(int size, TRAPS); 60 61 public: 62 interpreterState interpreter_state() const { 63 return (interpreterState) addr_of_word(istate_off); 64 } 65 66 public: 67 void identify_word(int frame_index, 68 int offset, 69 char* fieldbuf, 70 char* valuebuf, 71 int buflen) const; 72}; 73#endif // CC_INTERP 74