diff -r fd16c54261b3 -r 489c9b5090e2 hotspot/src/share/vm/interpreter/cppInterpreter.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/interpreter/cppInterpreter.hpp Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,83 @@ +/* + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +#ifdef CC_INTERP + +// This file contains the platform-independant parts +// of the c++ interpreter + +class CppInterpreter: public AbstractInterpreter { + friend class VMStructs; + friend class Interpreter; // contains() + friend class InterpreterGenerator; // result handlers + friend class CppInterpreterGenerator; // result handlers + public: + + + protected: + + // tosca result -> stack result + static address _tosca_to_stack[number_of_result_handlers]; // converts tosca to C++ interpreter stack result + // stack result -> stack result + static address _stack_to_stack[number_of_result_handlers]; // pass result between C++ interpreter calls + // stack result -> native abi result + static address _stack_to_native_abi[number_of_result_handlers]; // converts C++ interpreter results to native abi + + // this is to allow frame and only frame to use contains(). + friend class frame; + + public: + // Initialization/debugging + static void initialize(); + // this only returns whether a pc is within generated code for the interpreter. + + // This is a moderately dubious interface for the c++ interpreter. Only + // frame code and debug.cpp should be using it. + static bool contains(address pc); + + public: + + + // No displatch table to switch so no need for these to do anything special + static void notice_safepoints() {} + static void ignore_safepoints() {} + + static address native_result_to_tosca() { return (address)_native_abi_to_tosca; } // aka result handler + static address tosca_result_to_stack() { return (address)_tosca_to_stack; } + static address stack_result_to_stack() { return (address)_stack_to_stack; } + static address stack_result_to_native() { return (address)_stack_to_native_abi; } + + static address native_result_to_tosca(int index) { return _native_abi_to_tosca[index]; } // aka result handler + static address tosca_result_to_stack(int index) { return _tosca_to_stack[index]; } + static address stack_result_to_stack(int index) { return _stack_to_stack[index]; } + static address stack_result_to_native(int index) { return _stack_to_native_abi[index]; } + + static address return_entry (TosState state, int length); + static address deopt_entry (TosState state, int length); + +#include "incls/_cppInterpreter_pd.hpp.incl" + +}; + +#endif // CC_INTERP