90 // do_blob(name, type)
91 #define SHARED_STUBS_DO(do_blob) \
92 do_blob(deopt, DeoptimizationBlob) \
93 /* resolve stubs */ \
94 do_blob(wrong_method, RuntimeStub) \
95 do_blob(wrong_method_abstract, RuntimeStub) \
96 do_blob(ic_miss, RuntimeStub) \
97 do_blob(resolve_opt_virtual_call, RuntimeStub) \
98 do_blob(resolve_virtual_call, RuntimeStub) \
99 do_blob(resolve_static_call, RuntimeStub) \
100 /* handler stubs */ \
101 do_blob(polling_page_vectors_safepoint_handler, SafepointBlob) \
102 do_blob(polling_page_safepoint_handler, SafepointBlob) \
103 do_blob(polling_page_return_handler, SafepointBlob) \
104 /* throw stubs */ \
105 do_blob(throw_AbstractMethodError, RuntimeStub) \
106 do_blob(throw_IncompatibleClassChangeError, RuntimeStub) \
107 do_blob(throw_NullPointerException_at_call, RuntimeStub) \
108 do_blob(throw_StackOverflowError, RuntimeStub) \
109 do_blob(throw_delayed_StackOverflowError, RuntimeStub) \
110 /* other stubs */ \
111 SHARED_JFR_STUBS_DO(do_blob) \
112
113 // C1 stub declarations
114 //
115 // C1 stubs are always generated in a unique associated generic
116 // CodeBlob with a single entry. C1 stubs are stored in an array
117 // indexed by local enum. So, no other code elements need to be
118 // generated via this macro.
119
120 #ifdef COMPILER1
121 // client macro to operate on c1 stubs
122 //
123 // do_blob(name)
124 #define C1_STUBS_DO(do_blob) \
125 do_blob(dtrace_object_alloc) \
126 do_blob(unwind_exception) \
127 do_blob(forward_exception) \
128 do_blob(throw_range_check_failed) /* throws ArrayIndexOutOfBoundsException */ \
129 do_blob(throw_index_exception) /* throws IndexOutOfBoundsException */ \
130 do_blob(throw_div0_exception) \
131 do_blob(throw_null_pointer_exception) \
132 do_blob(register_finalizer) \
133 do_blob(new_instance) \
134 do_blob(fast_new_instance) \
135 do_blob(fast_new_instance_init_check) \
136 do_blob(new_type_array) \
137 do_blob(new_object_array) \
138 do_blob(new_multi_array) \
139 do_blob(handle_exception_nofpu) /* optimized version that does not preserve fpu registers */ \
140 do_blob(handle_exception) \
141 do_blob(handle_exception_from_callee) \
142 do_blob(throw_array_store_exception) \
143 do_blob(throw_class_cast_exception) \
144 do_blob(throw_incompatible_class_change_error) \
145 do_blob(slow_subtype_check) \
146 do_blob(is_instance_of) \
147 do_blob(monitorenter) \
148 do_blob(monitorenter_nofpu) /* optimized version that does not preserve fpu registers */ \
149 do_blob(monitorexit) \
150 do_blob(monitorexit_nofpu) /* optimized version that does not preserve fpu registers */ \
151 do_blob(deoptimize) \
152 do_blob(access_field_patching) \
153 do_blob(load_klass_patching) \
154 do_blob(load_mirror_patching) \
155 do_blob(load_appendix_patching) \
156 do_blob(fpu2long_stub) \
157 do_blob(counter_overflow) \
158 do_blob(predicate_failed_trap) \
159
160 #else
161 #define C1_STUBS_DO(do_blob)
162 #endif
163
164 // C2 stub declarations
212 // provide access to TLS and the return pc.
213 //
214
215 #define C2_STUBS_DO(do_blob, do_stub) \
216 do_blob(uncommon_trap, UncommonTrapBlob) \
217 do_blob(exception, ExceptionBlob) \
218 do_stub(new_instance, 0, true, false) \
219 do_stub(new_array, 0, true, false) \
220 do_stub(new_array_nozero, 0, true, false) \
221 do_stub(multianewarray2, 0, true, false) \
222 do_stub(multianewarray3, 0, true, false) \
223 do_stub(multianewarray4, 0, true, false) \
224 do_stub(multianewarray5, 0, true, false) \
225 do_stub(multianewarrayN, 0, true, false) \
226 do_stub(complete_monitor_locking, 0, false, false) \
227 do_stub(monitor_notify, 0, false, false) \
228 do_stub(monitor_notifyAll, 0, false, false) \
229 do_stub(rethrow, 2, true, true) \
230 do_stub(slow_arraycopy, 0, false, false) \
231 do_stub(register_finalizer, 0, false, false) \
232 do_stub(vthread_end_first_transition, 0, false, false) \
233 do_stub(vthread_start_final_transition, 0, false, false) \
234 do_stub(vthread_start_transition, 0, false, false) \
235 do_stub(vthread_end_transition, 0, false, false) \
236
237 #else
238 #define C2_STUBS_DO(do_blob, do_stub)
239 #endif
240
241 // Stubgen stub declarations
242 //
243 // Stub Generator Blobs, Stubs and Entries Overview
244 //
245 // StubGenerator stubs do not require their own individual blob. They
246 // are generated in batches into one of five distinct BufferBlobs:
247 //
248 // 1) PreUniverse stubs
249 // 2) Initial stubs
250 // 3) Continuation stubs
251 // 4) Compiler stubs
|
90 // do_blob(name, type)
91 #define SHARED_STUBS_DO(do_blob) \
92 do_blob(deopt, DeoptimizationBlob) \
93 /* resolve stubs */ \
94 do_blob(wrong_method, RuntimeStub) \
95 do_blob(wrong_method_abstract, RuntimeStub) \
96 do_blob(ic_miss, RuntimeStub) \
97 do_blob(resolve_opt_virtual_call, RuntimeStub) \
98 do_blob(resolve_virtual_call, RuntimeStub) \
99 do_blob(resolve_static_call, RuntimeStub) \
100 /* handler stubs */ \
101 do_blob(polling_page_vectors_safepoint_handler, SafepointBlob) \
102 do_blob(polling_page_safepoint_handler, SafepointBlob) \
103 do_blob(polling_page_return_handler, SafepointBlob) \
104 /* throw stubs */ \
105 do_blob(throw_AbstractMethodError, RuntimeStub) \
106 do_blob(throw_IncompatibleClassChangeError, RuntimeStub) \
107 do_blob(throw_NullPointerException_at_call, RuntimeStub) \
108 do_blob(throw_StackOverflowError, RuntimeStub) \
109 do_blob(throw_delayed_StackOverflowError, RuntimeStub) \
110 /* value types stub */ \
111 do_blob(store_inline_type_fields_to_buf, RuntimeStub) \
112 /* other stubs */ \
113 SHARED_JFR_STUBS_DO(do_blob) \
114
115 // C1 stub declarations
116 //
117 // C1 stubs are always generated in a unique associated generic
118 // CodeBlob with a single entry. C1 stubs are stored in an array
119 // indexed by local enum. So, no other code elements need to be
120 // generated via this macro.
121
122 #ifdef COMPILER1
123 // client macro to operate on c1 stubs
124 //
125 // do_blob(name)
126 #define C1_STUBS_DO(do_blob) \
127 do_blob(dtrace_object_alloc) \
128 do_blob(unwind_exception) \
129 do_blob(forward_exception) \
130 do_blob(throw_range_check_failed) /* throws ArrayIndexOutOfBoundsException */ \
131 do_blob(throw_index_exception) /* throws IndexOutOfBoundsException */ \
132 do_blob(throw_div0_exception) \
133 do_blob(throw_null_pointer_exception) \
134 do_blob(register_finalizer) \
135 do_blob(new_instance) \
136 do_blob(fast_new_instance) \
137 do_blob(fast_new_instance_init_check) \
138 do_blob(new_type_array) \
139 do_blob(new_object_array) \
140 do_blob(new_null_free_array) \
141 do_blob(new_multi_array) \
142 do_blob(load_flat_array) \
143 do_blob(store_flat_array) \
144 do_blob(substitutability_check) \
145 do_blob(buffer_inline_args) \
146 do_blob(buffer_inline_args_no_receiver) \
147 do_blob(handle_exception_nofpu) /* optimized version that does not preserve fpu registers */ \
148 do_blob(handle_exception) \
149 do_blob(handle_exception_from_callee) \
150 do_blob(throw_array_store_exception) \
151 do_blob(throw_class_cast_exception) \
152 do_blob(throw_incompatible_class_change_error) \
153 do_blob(throw_illegal_monitor_state_exception) \
154 do_blob(throw_identity_exception) \
155 do_blob(slow_subtype_check) \
156 do_blob(is_instance_of) \
157 do_blob(monitorenter) \
158 do_blob(monitorenter_nofpu) /* optimized version that does not preserve fpu registers */ \
159 do_blob(monitorexit) \
160 do_blob(monitorexit_nofpu) /* optimized version that does not preserve fpu registers */ \
161 do_blob(deoptimize) \
162 do_blob(access_field_patching) \
163 do_blob(load_klass_patching) \
164 do_blob(load_mirror_patching) \
165 do_blob(load_appendix_patching) \
166 do_blob(fpu2long_stub) \
167 do_blob(counter_overflow) \
168 do_blob(predicate_failed_trap) \
169
170 #else
171 #define C1_STUBS_DO(do_blob)
172 #endif
173
174 // C2 stub declarations
222 // provide access to TLS and the return pc.
223 //
224
225 #define C2_STUBS_DO(do_blob, do_stub) \
226 do_blob(uncommon_trap, UncommonTrapBlob) \
227 do_blob(exception, ExceptionBlob) \
228 do_stub(new_instance, 0, true, false) \
229 do_stub(new_array, 0, true, false) \
230 do_stub(new_array_nozero, 0, true, false) \
231 do_stub(multianewarray2, 0, true, false) \
232 do_stub(multianewarray3, 0, true, false) \
233 do_stub(multianewarray4, 0, true, false) \
234 do_stub(multianewarray5, 0, true, false) \
235 do_stub(multianewarrayN, 0, true, false) \
236 do_stub(complete_monitor_locking, 0, false, false) \
237 do_stub(monitor_notify, 0, false, false) \
238 do_stub(monitor_notifyAll, 0, false, false) \
239 do_stub(rethrow, 2, true, true) \
240 do_stub(slow_arraycopy, 0, false, false) \
241 do_stub(register_finalizer, 0, false, false) \
242 do_stub(load_unknown_inline, 0, true, false) \
243 do_stub(store_unknown_inline, 0, true, false) \
244 do_stub(vthread_end_first_transition, 0, false, false) \
245 do_stub(vthread_start_final_transition, 0, false, false) \
246 do_stub(vthread_start_transition, 0, false, false) \
247 do_stub(vthread_end_transition, 0, false, false) \
248
249 #else
250 #define C2_STUBS_DO(do_blob, do_stub)
251 #endif
252
253 // Stubgen stub declarations
254 //
255 // Stub Generator Blobs, Stubs and Entries Overview
256 //
257 // StubGenerator stubs do not require their own individual blob. They
258 // are generated in batches into one of five distinct BufferBlobs:
259 //
260 // 1) PreUniverse stubs
261 // 2) Initial stubs
262 // 3) Continuation stubs
263 // 4) Compiler stubs
|