118 // define stubs
119 static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char* name, int is_fancy_jump, bool pass_tls, bool return_pc);
120
121 // References to generated stubs
122 static address _new_instance_Java;
123 static address _new_array_Java;
124 static address _new_array_nozero_Java;
125 static address _multianewarray2_Java;
126 static address _multianewarray3_Java;
127 static address _multianewarray4_Java;
128 static address _multianewarray5_Java;
129 static address _multianewarrayN_Java;
130 static address _vtable_must_compile_Java;
131 static address _complete_monitor_locking_Java;
132 static address _rethrow_Java;
133 static address _monitor_notify_Java;
134 static address _monitor_notifyAll_Java;
135
136 static address _slow_arraycopy_Java;
137 static address _register_finalizer_Java;
138 #if INCLUDE_JVMTI
139 static address _notify_jvmti_vthread_start;
140 static address _notify_jvmti_vthread_end;
141 static address _notify_jvmti_vthread_mount;
142 static address _notify_jvmti_vthread_unmount;
143 #endif
144
145 //
146 // Implementation of runtime methods
147 // =================================
148
149 // Allocate storage for a Java instance.
150 static void new_instance_C(Klass* instance_klass, JavaThread* current);
151
152 // Allocate storage for a objArray or typeArray
153 static void new_array_C(Klass* array_klass, int len, JavaThread* current);
154 static void new_array_nozero_C(Klass* array_klass, int len, JavaThread* current);
155
156 // Allocate storage for a multi-dimensional arrays
157 // Note: needs to be fixed for arbitrary number of dimensions
158 static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread* current);
159 static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread* current);
160 static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread* current);
161 static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread* current);
162 static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread* current);
163
164 public:
165 static void monitor_notify_C(oopDesc* obj, JavaThread* current);
166 static void monitor_notifyAll_C(oopDesc* obj, JavaThread* current);
167
168 private:
169
170 // Implicit exception support
197
198 // Returns the name of a stub
199 static const char* stub_name(address entry);
200
201 // access to runtime stubs entry points for java code
202 static address new_instance_Java() { return _new_instance_Java; }
203 static address new_array_Java() { return _new_array_Java; }
204 static address new_array_nozero_Java() { return _new_array_nozero_Java; }
205 static address multianewarray2_Java() { return _multianewarray2_Java; }
206 static address multianewarray3_Java() { return _multianewarray3_Java; }
207 static address multianewarray4_Java() { return _multianewarray4_Java; }
208 static address multianewarray5_Java() { return _multianewarray5_Java; }
209 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
210 static address vtable_must_compile_stub() { return _vtable_must_compile_Java; }
211 static address complete_monitor_locking_Java() { return _complete_monitor_locking_Java; }
212 static address monitor_notify_Java() { return _monitor_notify_Java; }
213 static address monitor_notifyAll_Java() { return _monitor_notifyAll_Java; }
214
215 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
216 static address register_finalizer_Java() { return _register_finalizer_Java; }
217 #if INCLUDE_JVMTI
218 static address notify_jvmti_vthread_start() { return _notify_jvmti_vthread_start; }
219 static address notify_jvmti_vthread_end() { return _notify_jvmti_vthread_end; }
220 static address notify_jvmti_vthread_mount() { return _notify_jvmti_vthread_mount; }
221 static address notify_jvmti_vthread_unmount() { return _notify_jvmti_vthread_unmount; }
222 #endif
223
224 static ExceptionBlob* exception_blob() { return _exception_blob; }
225
226 // Implicit exception support
227 static void throw_div0_exception_C (JavaThread* thread);
228 static void throw_stack_overflow_error_C(JavaThread* thread);
229
230 // Exception handling
231 static address rethrow_stub() { return _rethrow_Java; }
232
233
234 // Type functions
235 // ======================================================
236
299
300 static const TypeFunc* updateBytesCRC32_Type();
301 static const TypeFunc* updateBytesCRC32C_Type();
302
303 static const TypeFunc* updateBytesAdler32_Type();
304
305 // leaf on stack replacement interpreter accessor types
306 static const TypeFunc* osr_end_Type();
307
308 static const TypeFunc* register_finalizer_Type();
309
310 JFR_ONLY(static const TypeFunc* class_id_load_barrier_Type();)
311 #if INCLUDE_JVMTI
312 static const TypeFunc* notify_jvmti_vthread_Type();
313 #endif
314
315 // Dtrace support
316 static const TypeFunc* dtrace_method_entry_exit_Type();
317 static const TypeFunc* dtrace_object_alloc_Type();
318
319 private:
320 static NamedCounter * volatile _named_counters;
321
322 public:
323 // helper function which creates a named counter labeled with the
324 // if they are available
325 static NamedCounter* new_named_counter(JVMState* jvms, NamedCounter::CounterTag tag);
326
327 // dumps all the named counters
328 static void print_named_counters();
329
330 };
331
332 #endif // SHARE_OPTO_RUNTIME_HPP
|
118 // define stubs
119 static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char* name, int is_fancy_jump, bool pass_tls, bool return_pc);
120
121 // References to generated stubs
122 static address _new_instance_Java;
123 static address _new_array_Java;
124 static address _new_array_nozero_Java;
125 static address _multianewarray2_Java;
126 static address _multianewarray3_Java;
127 static address _multianewarray4_Java;
128 static address _multianewarray5_Java;
129 static address _multianewarrayN_Java;
130 static address _vtable_must_compile_Java;
131 static address _complete_monitor_locking_Java;
132 static address _rethrow_Java;
133 static address _monitor_notify_Java;
134 static address _monitor_notifyAll_Java;
135
136 static address _slow_arraycopy_Java;
137 static address _register_finalizer_Java;
138 static address _load_unknown_inline;
139 #if INCLUDE_JVMTI
140 static address _notify_jvmti_vthread_start;
141 static address _notify_jvmti_vthread_end;
142 static address _notify_jvmti_vthread_mount;
143 static address _notify_jvmti_vthread_unmount;
144 #endif
145
146 //
147 // Implementation of runtime methods
148 // =================================
149
150 // Allocate storage for a Java instance.
151 static void new_instance_C(Klass* instance_klass, bool is_larval, JavaThread* current);
152
153 // Allocate storage for a objArray or typeArray
154 static void new_array_C(Klass* array_klass, int len, JavaThread* current);
155 static void new_array_nozero_C(Klass* array_klass, int len, JavaThread* current);
156
157 // Allocate storage for a multi-dimensional arrays
158 // Note: needs to be fixed for arbitrary number of dimensions
159 static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread* current);
160 static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread* current);
161 static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread* current);
162 static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread* current);
163 static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread* current);
164
165 public:
166 static void monitor_notify_C(oopDesc* obj, JavaThread* current);
167 static void monitor_notifyAll_C(oopDesc* obj, JavaThread* current);
168
169 private:
170
171 // Implicit exception support
198
199 // Returns the name of a stub
200 static const char* stub_name(address entry);
201
202 // access to runtime stubs entry points for java code
203 static address new_instance_Java() { return _new_instance_Java; }
204 static address new_array_Java() { return _new_array_Java; }
205 static address new_array_nozero_Java() { return _new_array_nozero_Java; }
206 static address multianewarray2_Java() { return _multianewarray2_Java; }
207 static address multianewarray3_Java() { return _multianewarray3_Java; }
208 static address multianewarray4_Java() { return _multianewarray4_Java; }
209 static address multianewarray5_Java() { return _multianewarray5_Java; }
210 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
211 static address vtable_must_compile_stub() { return _vtable_must_compile_Java; }
212 static address complete_monitor_locking_Java() { return _complete_monitor_locking_Java; }
213 static address monitor_notify_Java() { return _monitor_notify_Java; }
214 static address monitor_notifyAll_Java() { return _monitor_notifyAll_Java; }
215
216 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
217 static address register_finalizer_Java() { return _register_finalizer_Java; }
218 static address load_unknown_inline_Java() { return _load_unknown_inline; }
219 #if INCLUDE_JVMTI
220 static address notify_jvmti_vthread_start() { return _notify_jvmti_vthread_start; }
221 static address notify_jvmti_vthread_end() { return _notify_jvmti_vthread_end; }
222 static address notify_jvmti_vthread_mount() { return _notify_jvmti_vthread_mount; }
223 static address notify_jvmti_vthread_unmount() { return _notify_jvmti_vthread_unmount; }
224 #endif
225
226 static ExceptionBlob* exception_blob() { return _exception_blob; }
227
228 // Implicit exception support
229 static void throw_div0_exception_C (JavaThread* thread);
230 static void throw_stack_overflow_error_C(JavaThread* thread);
231
232 // Exception handling
233 static address rethrow_stub() { return _rethrow_Java; }
234
235
236 // Type functions
237 // ======================================================
238
301
302 static const TypeFunc* updateBytesCRC32_Type();
303 static const TypeFunc* updateBytesCRC32C_Type();
304
305 static const TypeFunc* updateBytesAdler32_Type();
306
307 // leaf on stack replacement interpreter accessor types
308 static const TypeFunc* osr_end_Type();
309
310 static const TypeFunc* register_finalizer_Type();
311
312 JFR_ONLY(static const TypeFunc* class_id_load_barrier_Type();)
313 #if INCLUDE_JVMTI
314 static const TypeFunc* notify_jvmti_vthread_Type();
315 #endif
316
317 // Dtrace support
318 static const TypeFunc* dtrace_method_entry_exit_Type();
319 static const TypeFunc* dtrace_object_alloc_Type();
320
321 static const TypeFunc* store_inline_type_fields_Type();
322 static const TypeFunc* pack_inline_type_Type();
323
324 static void load_unknown_inline(flatArrayOopDesc* array, int index, JavaThread* current);
325 static const TypeFunc* load_unknown_inline_type();
326 static void store_unknown_inline(instanceOopDesc* buffer, flatArrayOopDesc* array, int index);
327 static const TypeFunc* store_unknown_inline_type();
328
329 private:
330 static NamedCounter * volatile _named_counters;
331
332 public:
333 // helper function which creates a named counter labeled with the
334 // if they are available
335 static NamedCounter* new_named_counter(JVMState* jvms, NamedCounter::CounterTag tag);
336
337 // dumps all the named counters
338 static void print_named_counters();
339
340 };
341
342 #endif // SHARE_OPTO_RUNTIME_HPP
|