Mercurial > hg > truffle
annotate src/share/vm/interpreter/interpreterRuntime.hpp @ 6862:8a5ea0a9ccc4
7127708: G1: change task num types from int to uint in concurrent mark
Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich.
Reviewed-by: johnc
Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author | johnc |
---|---|
date | Sat, 06 Oct 2012 01:17:44 -0700 |
parents | da91efe96a93 |
children | f34d701e952e |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
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 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1059
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1059
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1059
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_INTERPRETER_INTERPRETERRUNTIME_HPP |
26 #define SHARE_VM_INTERPRETER_INTERPRETERRUNTIME_HPP | |
27 | |
28 #include "interpreter/bytecode.hpp" | |
29 #include "interpreter/linkResolver.hpp" | |
30 #include "memory/universe.hpp" | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
31 #include "oops/method.hpp" |
1972 | 32 #include "runtime/frame.inline.hpp" |
33 #include "runtime/signature.hpp" | |
34 #include "utilities/top.hpp" | |
35 #ifdef TARGET_OS_FAMILY_linux | |
36 # include "thread_linux.inline.hpp" | |
37 #endif | |
38 #ifdef TARGET_OS_FAMILY_solaris | |
39 # include "thread_solaris.inline.hpp" | |
40 #endif | |
41 #ifdef TARGET_OS_FAMILY_windows | |
42 # include "thread_windows.inline.hpp" | |
43 #endif | |
3960 | 44 #ifdef TARGET_OS_FAMILY_bsd |
45 # include "thread_bsd.inline.hpp" | |
46 #endif | |
1972 | 47 |
0 | 48 // The InterpreterRuntime is called by the interpreter for everything |
49 // that cannot/should not be dealt with in assembly and needs C support. | |
50 | |
51 class InterpreterRuntime: AllStatic { | |
52 friend class BytecodeClosure; // for method and bcp | |
53 friend class PrintingClosure; // for method and bcp | |
54 | |
55 private: | |
56 // Helper functions to access current interpreter state | |
57 static frame last_frame(JavaThread *thread) { return thread->last_frame(); } | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
58 static Method* method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); } |
0 | 59 static address bcp(JavaThread *thread) { return last_frame(thread).interpreter_frame_bcp(); } |
1602 | 60 static int bci(JavaThread *thread) { return last_frame(thread).interpreter_frame_bci(); } |
0 | 61 static void set_bcp_and_mdp(address bcp, JavaThread*thread); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
62 static Bytecodes::Code code(JavaThread *thread) { |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
63 // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272) |
2142 | 64 return Bytecodes::code_at(method(thread), bcp(thread)); |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
0
diff
changeset
|
65 } |
0 | 66 static bool already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); } |
2142 | 67 static Bytecode bytecode(JavaThread *thread) { return Bytecode(method(thread), bcp(thread)); } |
1565 | 68 static int get_index_u1(JavaThread *thread, Bytecodes::Code bc) |
2142 | 69 { return bytecode(thread).get_index_u1(bc); } |
1565 | 70 static int get_index_u2(JavaThread *thread, Bytecodes::Code bc) |
2142 | 71 { return bytecode(thread).get_index_u2(bc); } |
1565 | 72 static int get_index_u2_cpcache(JavaThread *thread, Bytecodes::Code bc) |
2142 | 73 { return bytecode(thread).get_index_u2_cpcache(bc); } |
6266
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3960
diff
changeset
|
74 static int get_index_u4(JavaThread *thread, Bytecodes::Code bc) |
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3960
diff
changeset
|
75 { return bytecode(thread).get_index_u4(bc); } |
0 | 76 static int number_of_dimensions(JavaThread *thread) { return bcp(thread)[3]; } |
726
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
710
diff
changeset
|
77 |
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
710
diff
changeset
|
78 static ConstantPoolCacheEntry* cache_entry_at(JavaThread *thread, int i) { return method(thread)->constants()->cache()->entry_at(i); } |
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
710
diff
changeset
|
79 static ConstantPoolCacheEntry* cache_entry(JavaThread *thread) { return cache_entry_at(thread, Bytes::get_native_u2(bcp(thread) + 1)); } |
0 | 80 static void note_trap(JavaThread *thread, int reason, TRAPS); |
81 | |
941 | 82 // Inner work method for Interpreter's frequency counter overflow |
83 static nmethod* frequency_counter_overflow_inner(JavaThread* thread, address branch_bcp); | |
84 | |
0 | 85 public: |
86 // Constants | |
87 static void ldc (JavaThread* thread, bool wide); | |
1602 | 88 static void resolve_ldc (JavaThread* thread, Bytecodes::Code bytecode); |
0 | 89 |
90 // Allocation | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
91 static void _new (JavaThread* thread, ConstantPool* pool, int index); |
0 | 92 static void newarray (JavaThread* thread, BasicType type, jint size); |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
93 static void anewarray (JavaThread* thread, ConstantPool* pool, int index, jint size); |
0 | 94 static void multianewarray(JavaThread* thread, jint* first_size_address); |
95 static void register_finalizer(JavaThread* thread, oopDesc* obj); | |
96 | |
97 // Quicken instance-of and check-cast bytecodes | |
98 static void quicken_io_cc(JavaThread* thread); | |
99 | |
100 // Exceptions thrown by the interpreter | |
101 static void throw_AbstractMethodError(JavaThread* thread); | |
102 static void throw_IncompatibleClassChangeError(JavaThread* thread); | |
103 static void throw_StackOverflowError(JavaThread* thread); | |
104 static void throw_ArrayIndexOutOfBoundsException(JavaThread* thread, char* name, jint index); | |
105 static void throw_ClassCastException(JavaThread* thread, oopDesc* obj); | |
106 static void create_exception(JavaThread* thread, char* name, char* message); | |
107 static void create_klass_exception(JavaThread* thread, char* name, oopDesc* obj); | |
108 static address exception_handler_for_exception(JavaThread* thread, oopDesc* exception); | |
109 static void throw_pending_exception(JavaThread* thread); | |
110 | |
111 // Statics & fields | |
112 static void resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode); | |
113 | |
114 // Synchronization | |
115 static void monitorenter(JavaThread* thread, BasicObjectLock* elem); | |
116 static void monitorexit (JavaThread* thread, BasicObjectLock* elem); | |
117 | |
118 static void throw_illegal_monitor_state_exception(JavaThread* thread); | |
119 static void new_illegal_monitor_state_exception(JavaThread* thread); | |
120 | |
121 // Calls | |
726
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
710
diff
changeset
|
122 static void resolve_invoke (JavaThread* thread, Bytecodes::Code bytecode); |
6266
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3960
diff
changeset
|
123 static void resolve_invokehandle (JavaThread* thread); |
726
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
710
diff
changeset
|
124 static void resolve_invokedynamic(JavaThread* thread); |
0 | 125 |
126 // Breakpoints | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
127 static void _breakpoint(JavaThread* thread, Method* method, address bcp); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
128 static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
129 static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code); |
0 | 130 static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(bcp(thread)) == Bytecodes::_breakpoint; } |
131 | |
132 // Safepoints | |
133 static void at_safepoint(JavaThread* thread); | |
134 | |
135 // Debugger support | |
136 static void post_field_access(JavaThread *thread, oopDesc* obj, | |
137 ConstantPoolCacheEntry *cp_entry); | |
138 static void post_field_modification(JavaThread *thread, oopDesc* obj, | |
139 ConstantPoolCacheEntry *cp_entry, jvalue *value); | |
140 static void post_method_entry(JavaThread *thread); | |
141 static void post_method_exit (JavaThread *thread); | |
142 static int interpreter_contains(address pc); | |
143 | |
144 // Native signature handlers | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
145 static void prepare_native_call(JavaThread* thread, Method* method); |
0 | 146 static address slow_signature_handler(JavaThread* thread, |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
147 Method* method, |
0 | 148 intptr_t* from, intptr_t* to); |
149 | |
3911
2fecca53a2c6
7085012: ARM: com/sun/jdi/PopSynchronousTest.java still fails
roland
parents:
3781
diff
changeset
|
150 #if defined(IA32) || defined(AMD64) || defined(ARM) |
2fecca53a2c6
7085012: ARM: com/sun/jdi/PopSynchronousTest.java still fails
roland
parents:
3781
diff
changeset
|
151 // Popframe support (only needed on x86, AMD64 and ARM) |
0 | 152 static void popframe_move_outgoing_args(JavaThread* thread, void* src_address, void* dest_address); |
153 #endif | |
154 | |
155 // Platform dependent stuff | |
1972 | 156 #ifdef TARGET_ARCH_x86 |
157 # include "interpreterRT_x86.hpp" | |
158 #endif | |
159 #ifdef TARGET_ARCH_sparc | |
160 # include "interpreterRT_sparc.hpp" | |
161 #endif | |
162 #ifdef TARGET_ARCH_zero | |
163 # include "interpreterRT_zero.hpp" | |
164 #endif | |
2192
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
165 #ifdef TARGET_ARCH_arm |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
166 # include "interpreterRT_arm.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
167 #endif |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
168 #ifdef TARGET_ARCH_ppc |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
169 # include "interpreterRT_ppc.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2144
diff
changeset
|
170 #endif |
1972 | 171 |
0 | 172 |
173 // Interpreter's frequency counter overflow | |
174 static nmethod* frequency_counter_overflow(JavaThread* thread, address branch_bcp); | |
175 | |
176 // Interpreter profiling support | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
177 static jint bcp_to_di(Method* method, address cur_bcp); |
2118
dd031b2226de
4930919: race condition in MDO creation at back branch locations
iveresov
parents:
1972
diff
changeset
|
178 static void profile_method(JavaThread* thread); |
0 | 179 static void update_mdp_for_ret(JavaThread* thread, int bci); |
180 #ifdef ASSERT | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
181 static void verify_mdp(Method* method, address bcp, address mdp); |
0 | 182 #endif // ASSERT |
183 }; | |
184 | |
185 | |
186 class SignatureHandlerLibrary: public AllStatic { | |
187 public: | |
188 enum { buffer_size = 1*K }; // the size of the temporary code buffer | |
189 enum { blob_size = 32*K }; // the size of a handler code blob. | |
190 | |
191 private: | |
192 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers | |
193 static address _handler; // next available address within _handler_blob; | |
194 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection | |
195 static GrowableArray<address>* _handlers; // the corresponding handlers | |
196 static address _buffer; // the temporary code buffer | |
197 | |
198 static address set_handler_blob(); | |
199 static void initialize(); | |
200 static address set_handler(CodeBuffer* buffer); | |
201 static void pd_set_handler(address handler); | |
202 | |
203 public: | |
204 static void add(methodHandle method); | |
205 }; | |
1972 | 206 |
207 #endif // SHARE_VM_INTERPRETER_INTERPRETERRUNTIME_HPP |