1 #ifdef USE_PRAGMA_IDENT_HDR
2 #pragma ident "@(#)interpreterRuntime.hpp 1.143 07/05/05 17:05:38 JVM"
3 #endif
4 /*
5 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7 *
8 * This code is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 only, as
10 * published by the Free Software Foundation.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
24 * have any questions.
25 *
26 */
27
28 // The InterpreterRuntime is called by the interpreter for everything
29 // that cannot/should not be dealt with in assembly and needs C support.
30
31 class InterpreterRuntime: AllStatic {
32 friend class BytecodeClosure; // for method and bcp
33 friend class PrintingClosure; // for method and bcp
34
35 private:
36 // Helper functions to access current interpreter state
37 static frame last_frame(JavaThread *thread) { return thread->last_frame(); }
38 static methodOop method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); }
39 static address bcp(JavaThread *thread) { return last_frame(thread).interpreter_frame_bcp(); }
40 static void set_bcp_and_mdp(address bcp, JavaThread*thread);
41 static Bytecodes::Code code(JavaThread *thread) { return Bytecodes::code_at(bcp(thread)); }
42 static bool already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
43 static int one_byte_index(JavaThread *thread) { return bcp(thread)[1]; }
44 static int two_byte_index(JavaThread *thread) { return Bytes::get_Java_u2(bcp(thread) + 1); }
45 static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; }
46 static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return method(thread)->constants()->cache()->entry_at(Bytes::get_native_u2(bcp(thread) + 1)); }
47 static void note_trap(JavaThread *thread, int reason, TRAPS);
48
49 public:
50 // Constants
51 static void ldc (JavaThread* thread, bool wide);
52
53 // Allocation
54 static void _new (JavaThread* thread, constantPoolOopDesc* pool, int index);
55 static void newarray (JavaThread* thread, BasicType type, jint size);
56 static void anewarray (JavaThread* thread, constantPoolOopDesc* pool, int index, jint size);
57 static void multianewarray(JavaThread* thread, jint* first_size_address);
58 static void register_finalizer(JavaThread* thread, oopDesc* obj);
59
60 // Quicken instance-of and check-cast bytecodes
61 static void quicken_io_cc(JavaThread* thread);
|
1 #ifdef USE_PRAGMA_IDENT_HDR
2 #pragma ident "@(#)interpreterRuntime.hpp 1.143 07/05/05 17:05:38 JVM"
3 #endif
4 /*
5 * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7 *
8 * This code is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 only, as
10 * published by the Free Software Foundation.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
24 * have any questions.
25 *
26 */
27
28 // The InterpreterRuntime is called by the interpreter for everything
29 // that cannot/should not be dealt with in assembly and needs C support.
30
31 class InterpreterRuntime: AllStatic {
32 friend class BytecodeClosure; // for method and bcp
33 friend class PrintingClosure; // for method and bcp
34
35 private:
36 // Helper functions to access current interpreter state
37 static frame last_frame(JavaThread *thread) { return thread->last_frame(); }
38 static methodOop method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); }
39 static address bcp(JavaThread *thread) { return last_frame(thread).interpreter_frame_bcp(); }
40 static void set_bcp_and_mdp(address bcp, JavaThread*thread);
41 static Bytecodes::Code code(JavaThread *thread) {
42 // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272)
43 return Bytecodes::code_at(bcp(thread), method(thread));
44 }
45 static bool already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
46 static int one_byte_index(JavaThread *thread) { return bcp(thread)[1]; }
47 static int two_byte_index(JavaThread *thread) { return Bytes::get_Java_u2(bcp(thread) + 1); }
48 static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; }
49 static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return method(thread)->constants()->cache()->entry_at(Bytes::get_native_u2(bcp(thread) + 1)); }
50 static void note_trap(JavaThread *thread, int reason, TRAPS);
51
52 public:
53 // Constants
54 static void ldc (JavaThread* thread, bool wide);
55
56 // Allocation
57 static void _new (JavaThread* thread, constantPoolOopDesc* pool, int index);
58 static void newarray (JavaThread* thread, BasicType type, jint size);
59 static void anewarray (JavaThread* thread, constantPoolOopDesc* pool, int index, jint size);
60 static void multianewarray(JavaThread* thread, jint* first_size_address);
61 static void register_finalizer(JavaThread* thread, oopDesc* obj);
62
63 // Quicken instance-of and check-cast bytecodes
64 static void quicken_io_cc(JavaThread* thread);
|