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
139 //
140 // Implementation of runtime methods
141 // =================================
142
143 // Allocate storage for a Java instance.
144 static void new_instance_C(Klass* instance_klass, JavaThread* current);
145
146 // Allocate storage for a objArray or typeArray
147 static void new_array_C(Klass* array_klass, int len, JavaThread* current);
148 static void new_array_nozero_C(Klass* array_klass, int len, JavaThread* current);
149
150 // Allocate storage for a multi-dimensional arrays
151 // Note: needs to be fixed for arbitrary number of dimensions
152 static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread* current);
153 static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread* current);
154 static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread* current);
155 static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread* current);
156 static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread* current);
157
158 public:
159 static void monitor_notify_C(oopDesc* obj, JavaThread* current);
160 static void monitor_notifyAll_C(oopDesc* obj, JavaThread* current);
161
162 private:
163
164 // Implicit exception support
191
192 // Returns the name of a stub
193 static const char* stub_name(address entry);
194
195 // access to runtime stubs entry points for java code
196 static address new_instance_Java() { return _new_instance_Java; }
197 static address new_array_Java() { return _new_array_Java; }
198 static address new_array_nozero_Java() { return _new_array_nozero_Java; }
199 static address multianewarray2_Java() { return _multianewarray2_Java; }
200 static address multianewarray3_Java() { return _multianewarray3_Java; }
201 static address multianewarray4_Java() { return _multianewarray4_Java; }
202 static address multianewarray5_Java() { return _multianewarray5_Java; }
203 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
204 static address vtable_must_compile_stub() { return _vtable_must_compile_Java; }
205 static address complete_monitor_locking_Java() { return _complete_monitor_locking_Java; }
206 static address monitor_notify_Java() { return _monitor_notify_Java; }
207 static address monitor_notifyAll_Java() { return _monitor_notifyAll_Java; }
208
209 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
210 static address register_finalizer_Java() { return _register_finalizer_Java; }
211
212 static ExceptionBlob* exception_blob() { return _exception_blob; }
213
214 // Implicit exception support
215 static void throw_div0_exception_C (JavaThread* thread);
216 static void throw_stack_overflow_error_C(JavaThread* thread);
217
218 // Exception handling
219 static address rethrow_stub() { return _rethrow_Java; }
220
221
222 // Type functions
223 // ======================================================
224
225 static const TypeFunc* new_instance_Type(); // object allocation (slow case)
226 static const TypeFunc* new_array_Type (); // [a]newarray (slow case)
227 static const TypeFunc* multianewarray_Type(int ndim); // multianewarray
228 static const TypeFunc* multianewarray2_Type(); // multianewarray
229 static const TypeFunc* multianewarray3_Type(); // multianewarray
230 static const TypeFunc* multianewarray4_Type(); // multianewarray
277 static const TypeFunc* ghash_processBlocks_Type();
278 static const TypeFunc* base64_encodeBlock_Type();
279 static const TypeFunc* base64_decodeBlock_Type();
280
281 static const TypeFunc* updateBytesCRC32_Type();
282 static const TypeFunc* updateBytesCRC32C_Type();
283
284 static const TypeFunc* updateBytesAdler32_Type();
285
286 // leaf on stack replacement interpreter accessor types
287 static const TypeFunc* osr_end_Type();
288
289 static const TypeFunc* register_finalizer_Type();
290
291 JFR_ONLY(static const TypeFunc* get_class_id_intrinsic_Type();)
292
293 // Dtrace support
294 static const TypeFunc* dtrace_method_entry_exit_Type();
295 static const TypeFunc* dtrace_object_alloc_Type();
296
297 private:
298 static NamedCounter * volatile _named_counters;
299
300 public:
301 // helper function which creates a named counter labeled with the
302 // if they are available
303 static NamedCounter* new_named_counter(JVMState* jvms, NamedCounter::CounterTag tag);
304
305 // dumps all the named counters
306 static void print_named_counters();
307
308 };
309
310 #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
140 //
141 // Implementation of runtime methods
142 // =================================
143
144 // Allocate storage for a Java instance.
145 static void new_instance_C(Klass* instance_klass, bool is_larval, JavaThread* current);
146
147 // Allocate storage for a objArray or typeArray
148 static void new_array_C(Klass* array_klass, int len, JavaThread* current);
149 static void new_array_nozero_C(Klass* array_klass, int len, JavaThread* current);
150
151 // Allocate storage for a multi-dimensional arrays
152 // Note: needs to be fixed for arbitrary number of dimensions
153 static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread* current);
154 static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread* current);
155 static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread* current);
156 static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread* current);
157 static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread* current);
158
159 public:
160 static void monitor_notify_C(oopDesc* obj, JavaThread* current);
161 static void monitor_notifyAll_C(oopDesc* obj, JavaThread* current);
162
163 private:
164
165 // Implicit exception support
192
193 // Returns the name of a stub
194 static const char* stub_name(address entry);
195
196 // access to runtime stubs entry points for java code
197 static address new_instance_Java() { return _new_instance_Java; }
198 static address new_array_Java() { return _new_array_Java; }
199 static address new_array_nozero_Java() { return _new_array_nozero_Java; }
200 static address multianewarray2_Java() { return _multianewarray2_Java; }
201 static address multianewarray3_Java() { return _multianewarray3_Java; }
202 static address multianewarray4_Java() { return _multianewarray4_Java; }
203 static address multianewarray5_Java() { return _multianewarray5_Java; }
204 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
205 static address vtable_must_compile_stub() { return _vtable_must_compile_Java; }
206 static address complete_monitor_locking_Java() { return _complete_monitor_locking_Java; }
207 static address monitor_notify_Java() { return _monitor_notify_Java; }
208 static address monitor_notifyAll_Java() { return _monitor_notifyAll_Java; }
209
210 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
211 static address register_finalizer_Java() { return _register_finalizer_Java; }
212 static address load_unknown_inline_Java() { return _load_unknown_inline; }
213
214 static ExceptionBlob* exception_blob() { return _exception_blob; }
215
216 // Implicit exception support
217 static void throw_div0_exception_C (JavaThread* thread);
218 static void throw_stack_overflow_error_C(JavaThread* thread);
219
220 // Exception handling
221 static address rethrow_stub() { return _rethrow_Java; }
222
223
224 // Type functions
225 // ======================================================
226
227 static const TypeFunc* new_instance_Type(); // object allocation (slow case)
228 static const TypeFunc* new_array_Type (); // [a]newarray (slow case)
229 static const TypeFunc* multianewarray_Type(int ndim); // multianewarray
230 static const TypeFunc* multianewarray2_Type(); // multianewarray
231 static const TypeFunc* multianewarray3_Type(); // multianewarray
232 static const TypeFunc* multianewarray4_Type(); // multianewarray
279 static const TypeFunc* ghash_processBlocks_Type();
280 static const TypeFunc* base64_encodeBlock_Type();
281 static const TypeFunc* base64_decodeBlock_Type();
282
283 static const TypeFunc* updateBytesCRC32_Type();
284 static const TypeFunc* updateBytesCRC32C_Type();
285
286 static const TypeFunc* updateBytesAdler32_Type();
287
288 // leaf on stack replacement interpreter accessor types
289 static const TypeFunc* osr_end_Type();
290
291 static const TypeFunc* register_finalizer_Type();
292
293 JFR_ONLY(static const TypeFunc* get_class_id_intrinsic_Type();)
294
295 // Dtrace support
296 static const TypeFunc* dtrace_method_entry_exit_Type();
297 static const TypeFunc* dtrace_object_alloc_Type();
298
299 static const TypeFunc* store_inline_type_fields_Type();
300 static const TypeFunc* pack_inline_type_Type();
301
302 static void load_unknown_inline(flatArrayOopDesc* array, int index, JavaThread* current);
303 static const TypeFunc* load_unknown_inline_type();
304 static void store_unknown_inline(instanceOopDesc* buffer, flatArrayOopDesc* array, int index);
305 static const TypeFunc* store_unknown_inline_type();
306
307 private:
308 static NamedCounter * volatile _named_counters;
309
310 public:
311 // helper function which creates a named counter labeled with the
312 // if they are available
313 static NamedCounter* new_named_counter(JVMState* jvms, NamedCounter::CounterTag tag);
314
315 // dumps all the named counters
316 static void print_named_counters();
317
318 };
319
320 #endif // SHARE_OPTO_RUNTIME_HPP
|