75 // C1 stubs are always generated in a generic CodeBlob
76
77 #ifdef COMPILER1
78 // client macro to operate on c1 stubs
79 //
80 // do_blob(name)
81 #define C1_STUBS_DO(do_blob) \
82 do_blob(dtrace_object_alloc) \
83 do_blob(unwind_exception) \
84 do_blob(forward_exception) \
85 do_blob(throw_range_check_failed) /* throws ArrayIndexOutOfBoundsException */ \
86 do_blob(throw_index_exception) /* throws IndexOutOfBoundsException */ \
87 do_blob(throw_div0_exception) \
88 do_blob(throw_null_pointer_exception) \
89 do_blob(register_finalizer) \
90 do_blob(new_instance) \
91 do_blob(fast_new_instance) \
92 do_blob(fast_new_instance_init_check) \
93 do_blob(new_type_array) \
94 do_blob(new_object_array) \
95 do_blob(new_multi_array) \
96 do_blob(handle_exception_nofpu) /* optimized version that does not preserve fpu registers */ \
97 do_blob(handle_exception) \
98 do_blob(handle_exception_from_callee) \
99 do_blob(throw_array_store_exception) \
100 do_blob(throw_class_cast_exception) \
101 do_blob(throw_incompatible_class_change_error) \
102 do_blob(slow_subtype_check) \
103 do_blob(is_instance_of) \
104 do_blob(monitorenter) \
105 do_blob(monitorenter_nofpu) /* optimized version that does not preserve fpu registers */ \
106 do_blob(monitorexit) \
107 do_blob(monitorexit_nofpu) /* optimized version that does not preserve fpu registers */ \
108 do_blob(deoptimize) \
109 do_blob(access_field_patching) \
110 do_blob(load_klass_patching) \
111 do_blob(load_mirror_patching) \
112 do_blob(load_appendix_patching) \
113 do_blob(fpu2long_stub) \
114 do_blob(counter_overflow) \
115 do_blob(predicate_failed_trap) \
116
117 #else
118 #define C1_STUBS_DO(do_blob)
119 #endif
120
121 // Opto stubs can be stored as entries with just an address or as
150 // and require access to TLS and the return pc. jvmti stubs always
151 // employ jump 0, and require no special access
152 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub) \
153 do_blob(uncommon_trap, UncommonTrapBlob*) \
154 do_blob(exception, ExceptionBlob*) \
155 do_stub(new_instance, 0, true, false) \
156 do_stub(new_array, 0, true, false) \
157 do_stub(new_array_nozero, 0, true, false) \
158 do_stub(multianewarray2, 0, true, false) \
159 do_stub(multianewarray3, 0, true, false) \
160 do_stub(multianewarray4, 0, true, false) \
161 do_stub(multianewarray5, 0, true, false) \
162 do_stub(multianewarrayN, 0, true, false) \
163 C2_JVMTI_STUBS_DO(do_jvmti_stub) \
164 do_stub(complete_monitor_locking, 0, false, false) \
165 do_stub(monitor_notify, 0, false, false) \
166 do_stub(monitor_notifyAll, 0, false, false) \
167 do_stub(rethrow, 2, true, true) \
168 do_stub(slow_arraycopy, 0, false, false) \
169 do_stub(register_finalizer, 0, false, false) \
170
171 #else
172 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)
173 #endif
174
175 // Stub Generator Blobs and Stubs Overview
176 //
177 // StubGenerator stubs do not require their own individual blob. They
178 // are generated in batches into one of four distinct BufferBlobs:
179 //
180 // 1) Initial stubs
181 // 2) Continuation stubs
182 // 3) Compiler stubs
183 // 4) Final stubs
184 //
185 // Creation of each successive BufferBlobs is staged to ensure that
186 // specific VM subsystems required by those stubs are suitably
187 // initialized before generated code attempt to reference data or
188 // addresses exported by those subsystems. The sequencing of
189 // initialization must be taken into account when adding a new stub
|
75 // C1 stubs are always generated in a generic CodeBlob
76
77 #ifdef COMPILER1
78 // client macro to operate on c1 stubs
79 //
80 // do_blob(name)
81 #define C1_STUBS_DO(do_blob) \
82 do_blob(dtrace_object_alloc) \
83 do_blob(unwind_exception) \
84 do_blob(forward_exception) \
85 do_blob(throw_range_check_failed) /* throws ArrayIndexOutOfBoundsException */ \
86 do_blob(throw_index_exception) /* throws IndexOutOfBoundsException */ \
87 do_blob(throw_div0_exception) \
88 do_blob(throw_null_pointer_exception) \
89 do_blob(register_finalizer) \
90 do_blob(new_instance) \
91 do_blob(fast_new_instance) \
92 do_blob(fast_new_instance_init_check) \
93 do_blob(new_type_array) \
94 do_blob(new_object_array) \
95 do_blob(new_null_free_array) \
96 do_blob(new_multi_array) \
97 do_blob(load_flat_array) \
98 do_blob(store_flat_array) \
99 do_blob(substitutability_check) \
100 do_blob(buffer_inline_args) \
101 do_blob(buffer_inline_args_no_receiver) \
102 do_blob(handle_exception_nofpu) /* optimized version that does not preserve fpu registers */ \
103 do_blob(handle_exception) \
104 do_blob(handle_exception_from_callee) \
105 do_blob(throw_array_store_exception) \
106 do_blob(throw_class_cast_exception) \
107 do_blob(throw_incompatible_class_change_error) \
108 do_blob(throw_illegal_monitor_state_exception) \
109 do_blob(throw_identity_exception) \
110 do_blob(slow_subtype_check) \
111 do_blob(is_instance_of) \
112 do_blob(monitorenter) \
113 do_blob(monitorenter_nofpu) /* optimized version that does not preserve fpu registers */ \
114 do_blob(monitorexit) \
115 do_blob(monitorexit_nofpu) /* optimized version that does not preserve fpu registers */ \
116 do_blob(deoptimize) \
117 do_blob(access_field_patching) \
118 do_blob(load_klass_patching) \
119 do_blob(load_mirror_patching) \
120 do_blob(load_appendix_patching) \
121 do_blob(fpu2long_stub) \
122 do_blob(counter_overflow) \
123 do_blob(predicate_failed_trap) \
124
125 #else
126 #define C1_STUBS_DO(do_blob)
127 #endif
128
129 // Opto stubs can be stored as entries with just an address or as
158 // and require access to TLS and the return pc. jvmti stubs always
159 // employ jump 0, and require no special access
160 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub) \
161 do_blob(uncommon_trap, UncommonTrapBlob*) \
162 do_blob(exception, ExceptionBlob*) \
163 do_stub(new_instance, 0, true, false) \
164 do_stub(new_array, 0, true, false) \
165 do_stub(new_array_nozero, 0, true, false) \
166 do_stub(multianewarray2, 0, true, false) \
167 do_stub(multianewarray3, 0, true, false) \
168 do_stub(multianewarray4, 0, true, false) \
169 do_stub(multianewarray5, 0, true, false) \
170 do_stub(multianewarrayN, 0, true, false) \
171 C2_JVMTI_STUBS_DO(do_jvmti_stub) \
172 do_stub(complete_monitor_locking, 0, false, false) \
173 do_stub(monitor_notify, 0, false, false) \
174 do_stub(monitor_notifyAll, 0, false, false) \
175 do_stub(rethrow, 2, true, true) \
176 do_stub(slow_arraycopy, 0, false, false) \
177 do_stub(register_finalizer, 0, false, false) \
178 do_stub(load_unknown_inline, 0, true, false) \
179 do_stub(store_unknown_inline, 0, true, false) \
180
181 #else
182 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)
183 #endif
184
185 // Stub Generator Blobs and Stubs Overview
186 //
187 // StubGenerator stubs do not require their own individual blob. They
188 // are generated in batches into one of four distinct BufferBlobs:
189 //
190 // 1) Initial stubs
191 // 2) Continuation stubs
192 // 3) Compiler stubs
193 // 4) Final stubs
194 //
195 // Creation of each successive BufferBlobs is staged to ensure that
196 // specific VM subsystems required by those stubs are suitably
197 // initialized before generated code attempt to reference data or
198 // addresses exported by those subsystems. The sequencing of
199 // initialization must be taken into account when adding a new stub
|