161 StubRoutines::_jshort_disjoint_arraycopy;
162 StubRoutines::_arrayof_jshort_arraycopy =
163 StubRoutines::_jshort_arraycopy;
164
165 StubRoutines::_arrayof_jint_disjoint_arraycopy =
166 StubRoutines::_jint_disjoint_arraycopy;
167 StubRoutines::_arrayof_jint_arraycopy =
168 StubRoutines::_jint_arraycopy;
169
170 StubRoutines::_arrayof_jlong_disjoint_arraycopy =
171 StubRoutines::_jlong_disjoint_arraycopy;
172 StubRoutines::_arrayof_jlong_arraycopy =
173 StubRoutines::_jlong_arraycopy;
174
175 StubRoutines::_arrayof_oop_disjoint_arraycopy =
176 StubRoutines::_oop_disjoint_arraycopy;
177 StubRoutines::_arrayof_oop_arraycopy =
178 StubRoutines::_oop_arraycopy;
179 }
180
181 void generate_initial_stubs() {
182 // entry points that exist in all platforms Note: This is code
183 // that could be shared among different platforms - however the
184 // benefit seems to be smaller than the disadvantage of having a
185 // much more complicated generator structure. See also comment in
186 // stubRoutines.hpp.
187
188 StubRoutines::_forward_exception_entry = ShouldNotCallThisStub();
189 StubRoutines::_call_stub_entry = (address) call_stub;
190 StubRoutines::_catch_exception_entry = ShouldNotCallThisStub();
191
192 // atomic calls
193 StubRoutines::_atomic_xchg_entry = ShouldNotCallThisStub();
194 StubRoutines::_atomic_cmpxchg_entry = ShouldNotCallThisStub();
195 StubRoutines::_atomic_cmpxchg_long_entry = ShouldNotCallThisStub();
196 StubRoutines::_atomic_add_entry = ShouldNotCallThisStub();
197 StubRoutines::_fence_entry = ShouldNotCallThisStub();
198 }
199
200 void generate_continuation_stubs() {
201 // do nothing
202 }
203
204 void generate_compiler_stubs() {
205 // do nothing
206 }
207
208 void generate_final_stubs() {
209 // arraycopy stubs used by compilers
210 generate_arraycopy_stubs();
211
212 }
213
214 public:
215 StubGenerator(CodeBuffer* code, StubGenBlobId blob_id) : StubCodeGenerator(code, blob_id) {
216 switch(blob_id) {
217 case initial_id:
218 generate_initial_stubs();
219 break;
220 case continuation_id:
221 generate_continuation_stubs();
222 break;
223 case compiler_id:
224 // do nothing
225 break;
226 case final_id:
227 generate_final_stubs();
228 break;
229 default:
230 fatal("unexpected blob id: %d", blob_id);
231 break;
232 };
233 }
234 };
235
236 void StubGenerator_generate(CodeBuffer* code, StubGenBlobId blob_id) {
|
161 StubRoutines::_jshort_disjoint_arraycopy;
162 StubRoutines::_arrayof_jshort_arraycopy =
163 StubRoutines::_jshort_arraycopy;
164
165 StubRoutines::_arrayof_jint_disjoint_arraycopy =
166 StubRoutines::_jint_disjoint_arraycopy;
167 StubRoutines::_arrayof_jint_arraycopy =
168 StubRoutines::_jint_arraycopy;
169
170 StubRoutines::_arrayof_jlong_disjoint_arraycopy =
171 StubRoutines::_jlong_disjoint_arraycopy;
172 StubRoutines::_arrayof_jlong_arraycopy =
173 StubRoutines::_jlong_arraycopy;
174
175 StubRoutines::_arrayof_oop_disjoint_arraycopy =
176 StubRoutines::_oop_disjoint_arraycopy;
177 StubRoutines::_arrayof_oop_arraycopy =
178 StubRoutines::_oop_arraycopy;
179 }
180
181 void generate_preuniverse_stubs() {
182 StubRoutines::_fence_entry = ShouldNotCallThisStub();
183 StubRoutines::_atomic_xchg_entry = ShouldNotCallThisStub();
184 StubRoutines::_atomic_cmpxchg_entry = ShouldNotCallThisStub();
185 StubRoutines::_atomic_cmpxchg_long_entry = ShouldNotCallThisStub();
186 StubRoutines::_atomic_add_entry = ShouldNotCallThisStub();
187 }
188
189 void generate_initial_stubs() {
190 // entry points that exist in all platforms Note: This is code
191 // that could be shared among different platforms - however the
192 // benefit seems to be smaller than the disadvantage of having a
193 // much more complicated generator structure. See also comment in
194 // stubRoutines.hpp.
195
196 StubRoutines::_forward_exception_entry = ShouldNotCallThisStub();
197 StubRoutines::_call_stub_entry = (address) call_stub;
198 StubRoutines::_catch_exception_entry = ShouldNotCallThisStub();
199 }
200
201 void generate_continuation_stubs() {
202 // do nothing
203 }
204
205 void generate_compiler_stubs() {
206 // do nothing
207 }
208
209 void generate_final_stubs() {
210 // arraycopy stubs used by compilers
211 generate_arraycopy_stubs();
212
213 }
214
215 public:
216 StubGenerator(CodeBuffer* code, StubGenBlobId blob_id) : StubCodeGenerator(code, blob_id) {
217 switch(blob_id) {
218 case preuniverse_id:
219 generate_preuniverse_stubs();
220 break;
221 case initial_id:
222 generate_initial_stubs();
223 break;
224 case continuation_id:
225 generate_continuation_stubs();
226 break;
227 case compiler_id:
228 // do nothing
229 break;
230 case final_id:
231 generate_final_stubs();
232 break;
233 default:
234 fatal("unexpected blob id: %d", blob_id);
235 break;
236 };
237 }
238 };
239
240 void StubGenerator_generate(CodeBuffer* code, StubGenBlobId blob_id) {
|