74
75 static void throw_IncompatibleClassChangeError(JavaThread* current);
76 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
77 Klass* resc,
78 Klass* interfaceKlass);
79 static void throw_StackOverflowError(JavaThread* current);
80 static void throw_delayed_StackOverflowError(JavaThread* current);
81 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
82 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
83 static void throw_NullPointerException(JavaThread* current);
84
85 static void create_exception(JavaThread* current, char* name, char* message);
86 static void create_klass_exception(JavaThread* current, char* name, oopDesc* obj);
87 static address exception_handler_for_exception(JavaThread* current, oopDesc* exception);
88 #if INCLUDE_JVMTI
89 static void member_name_arg_or_null(JavaThread* current, address dmh, Method* m, address bcp);
90 #endif
91 static void throw_pending_exception(JavaThread* current);
92
93 static void resolve_from_cache(JavaThread* current, Bytecodes::Code bytecode);
94 private:
95 // Statics & fields
96 static void resolve_get_put(JavaThread* current, Bytecodes::Code bytecode);
97
98 // Calls
99 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
100 static void resolve_invokehandle (JavaThread* current);
101 static void resolve_invokedynamic(JavaThread* current);
102
103 public:
104 // Synchronization
105 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
106 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
107 static void monitorexit (BasicObjectLock* elem);
108
109 static void throw_illegal_monitor_state_exception(JavaThread* current);
110 static void new_illegal_monitor_state_exception(JavaThread* current);
111
112 // Breakpoints
113 static void _breakpoint(JavaThread* current, Method* method, address bcp);
114 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
115 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
116
117 // Safepoints
118 static void at_safepoint(JavaThread* current);
119 static void at_unwind(JavaThread* current);
120
121 // Debugger support
122 static void post_field_access(JavaThread* current, oopDesc* obj,
140
141 // bytecode tracing is only used by the TraceBytecodes
142 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
143
144 // Platform dependent stuff
145 #include CPU_HEADER(interpreterRT)
146
147 // optional normalization of fingerprints to reduce the number of adapters
148 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
149
150 // Interpreter's frequency counter overflow
151 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
152
153 // Interpreter profiling support
154 static jint bcp_to_di(Method* method, address cur_bcp);
155 static void update_mdp_for_ret(JavaThread* current, int bci);
156 #ifdef ASSERT
157 static void verify_mdp(Method* method, address bcp, address mdp);
158 #endif // ASSERT
159 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
160 };
161
162
163 class SignatureHandlerLibrary: public AllStatic {
164 public:
165 enum { buffer_size = 1*K }; // the size of the temporary code buffer
166 enum { blob_size = 32*K }; // the size of a handler code blob.
167
168 private:
169 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
170 static address _handler; // next available address within _handler_blob;
171 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
172 static GrowableArray<address>* _handlers; // the corresponding handlers
173 static address _buffer; // the temporary code buffer
174
175 static address set_handler_blob();
176 static void initialize();
177 static address set_handler(CodeBuffer* buffer);
178 static void pd_set_handler(address handler);
179
|
74
75 static void throw_IncompatibleClassChangeError(JavaThread* current);
76 static void throw_IncompatibleClassChangeErrorVerbose(JavaThread* current,
77 Klass* resc,
78 Klass* interfaceKlass);
79 static void throw_StackOverflowError(JavaThread* current);
80 static void throw_delayed_StackOverflowError(JavaThread* current);
81 static void throw_ArrayIndexOutOfBoundsException(JavaThread* current, arrayOopDesc* a, jint index);
82 static void throw_ClassCastException(JavaThread* current, oopDesc* obj);
83 static void throw_NullPointerException(JavaThread* current);
84
85 static void create_exception(JavaThread* current, char* name, char* message);
86 static void create_klass_exception(JavaThread* current, char* name, oopDesc* obj);
87 static address exception_handler_for_exception(JavaThread* current, oopDesc* exception);
88 #if INCLUDE_JVMTI
89 static void member_name_arg_or_null(JavaThread* current, address dmh, Method* m, address bcp);
90 #endif
91 static void throw_pending_exception(JavaThread* current);
92
93 static void resolve_from_cache(JavaThread* current, Bytecodes::Code bytecode);
94
95 // Used by ClassListParser.
96 static void resolve_get_put(Bytecodes::Code bytecode, int field_index,
97 methodHandle& m, constantPoolHandle& pool, bool initialize_holder, TRAPS);
98 static void cds_resolve_invoke(Bytecodes::Code bytecode, int method_index,
99 methodHandle& m,
100 constantPoolHandle& pool, TRAPS);
101 static void cds_resolve_invokehandle(int raw_index,
102 constantPoolHandle& pool, TRAPS);
103 static void cds_resolve_invokedynamic(int raw_index,
104 constantPoolHandle& pool, TRAPS);
105 private:
106 // Statics & fields
107 static void resolve_getfield(JavaThread* current);
108 static void resolve_putfield(JavaThread* current);
109 static void resolve_getstatic(JavaThread* current);
110 static void resolve_putstatic(JavaThread* current);
111
112 static void resolve_get_put(JavaThread* current, Bytecodes::Code bytecode);
113
114 // Calls
115 static void resolve_invokevirtual(JavaThread* current);
116 static void resolve_invokespecial(JavaThread* current);
117 static void resolve_invokestatic(JavaThread* current);
118 static void resolve_invokeinterface(JavaThread* current);
119
120 static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode);
121 static void resolve_invokehandle (JavaThread* current);
122 static void resolve_invokedynamic(JavaThread* current);
123
124 static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode,
125 methodHandle& resolved_method,
126 constantPoolHandle& pool, int method_index);
127 public:
128 // Synchronization
129 static void monitorenter(JavaThread* current, BasicObjectLock* elem);
130 static void monitorenter_obj(JavaThread* current, oopDesc* obj);
131 static void monitorexit (BasicObjectLock* elem);
132
133 static void throw_illegal_monitor_state_exception(JavaThread* current);
134 static void new_illegal_monitor_state_exception(JavaThread* current);
135
136 // Breakpoints
137 static void _breakpoint(JavaThread* current, Method* method, address bcp);
138 static Bytecodes::Code get_original_bytecode_at(JavaThread* current, Method* method, address bcp);
139 static void set_original_bytecode_at(JavaThread* current, Method* method, address bcp, Bytecodes::Code new_code);
140
141 // Safepoints
142 static void at_safepoint(JavaThread* current);
143 static void at_unwind(JavaThread* current);
144
145 // Debugger support
146 static void post_field_access(JavaThread* current, oopDesc* obj,
164
165 // bytecode tracing is only used by the TraceBytecodes
166 static intptr_t trace_bytecode(JavaThread* current, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2) PRODUCT_RETURN0;
167
168 // Platform dependent stuff
169 #include CPU_HEADER(interpreterRT)
170
171 // optional normalization of fingerprints to reduce the number of adapters
172 static uint64_t normalize_fast_native_fingerprint(uint64_t fingerprint);
173
174 // Interpreter's frequency counter overflow
175 static nmethod* frequency_counter_overflow(JavaThread* current, address branch_bcp);
176
177 // Interpreter profiling support
178 static jint bcp_to_di(Method* method, address cur_bcp);
179 static void update_mdp_for_ret(JavaThread* current, int bci);
180 #ifdef ASSERT
181 static void verify_mdp(Method* method, address bcp, address mdp);
182 #endif // ASSERT
183 static MethodCounters* build_method_counters(JavaThread* current, Method* m);
184
185 static void init_counters();
186 static void print_counters_on(outputStream* st);
187 };
188
189
190 class SignatureHandlerLibrary: public AllStatic {
191 public:
192 enum { buffer_size = 1*K }; // the size of the temporary code buffer
193 enum { blob_size = 32*K }; // the size of a handler code blob.
194
195 private:
196 static BufferBlob* _handler_blob; // the current buffer blob containing the generated handlers
197 static address _handler; // next available address within _handler_blob;
198 static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
199 static GrowableArray<address>* _handlers; // the corresponding handlers
200 static address _buffer; // the temporary code buffer
201
202 static address set_handler_blob();
203 static void initialize();
204 static address set_handler(CodeBuffer* buffer);
205 static void pd_set_handler(address handler);
206
|