78 jint StubRoutines::_mxcsr_std = 0; |
78 jint StubRoutines::_mxcsr_std = 0; |
79 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 }; |
79 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 }; |
80 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 }; |
80 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 }; |
81 |
81 |
82 // Compiled code entry points default values |
82 // Compiled code entry points default values |
83 // The dafault functions don't have separate disjoint versions. |
83 // The default functions don't have separate disjoint versions. |
84 address StubRoutines::_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy); |
84 address StubRoutines::_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy); |
85 address StubRoutines::_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy); |
85 address StubRoutines::_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy); |
86 address StubRoutines::_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy); |
86 address StubRoutines::_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy); |
87 address StubRoutines::_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy); |
87 address StubRoutines::_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy); |
88 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy); |
88 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy); |
|
89 address StubRoutines::_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit); |
89 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy); |
90 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy); |
90 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy); |
91 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy); |
91 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy); |
92 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy); |
92 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy); |
93 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy); |
93 address StubRoutines::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy); |
94 address StubRoutines::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy); |
|
95 address StubRoutines::_oop_disjoint_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit); |
94 |
96 |
95 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy); |
97 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy); |
96 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy); |
98 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy); |
97 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy); |
99 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy); |
98 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy); |
100 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy); |
99 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy); |
101 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy); |
|
102 address StubRoutines::_arrayof_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_uninit); |
100 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy); |
103 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy); |
101 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy); |
104 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy); |
102 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy); |
105 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy); |
103 address StubRoutines::_arrayof_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy); |
106 address StubRoutines::_arrayof_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy); |
104 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy); |
107 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy); |
|
108 address StubRoutines::_arrayof_oop_disjoint_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_uninit); |
|
109 |
105 |
110 |
106 address StubRoutines::_checkcast_arraycopy = NULL; |
111 address StubRoutines::_checkcast_arraycopy = NULL; |
|
112 address StubRoutines::_checkcast_arraycopy_uninit = NULL; |
107 address StubRoutines::_unsafe_arraycopy = NULL; |
113 address StubRoutines::_unsafe_arraycopy = NULL; |
108 address StubRoutines::_generic_arraycopy = NULL; |
114 address StubRoutines::_generic_arraycopy = NULL; |
109 |
115 |
110 |
116 |
111 address StubRoutines::_jbyte_fill; |
117 address StubRoutines::_jbyte_fill; |
280 |
286 |
281 // |
287 // |
282 // Default versions of arraycopy functions |
288 // Default versions of arraycopy functions |
283 // |
289 // |
284 |
290 |
285 static void gen_arraycopy_barrier_pre(oop* dest, size_t count) { |
291 static void gen_arraycopy_barrier_pre(oop* dest, size_t count, bool dest_uninitialized) { |
286 assert(count != 0, "count should be non-zero"); |
292 assert(count != 0, "count should be non-zero"); |
287 assert(count <= (size_t)max_intx, "count too large"); |
293 assert(count <= (size_t)max_intx, "count too large"); |
288 BarrierSet* bs = Universe::heap()->barrier_set(); |
294 BarrierSet* bs = Universe::heap()->barrier_set(); |
289 assert(bs->has_write_ref_array_pre_opt(), "Must have pre-barrier opt"); |
295 assert(bs->has_write_ref_array_pre_opt(), "Must have pre-barrier opt"); |
290 bs->write_ref_array_pre(dest, (int)count); |
296 bs->write_ref_array_pre(dest, (int)count, dest_uninitialized); |
291 } |
297 } |
292 |
298 |
293 static void gen_arraycopy_barrier(oop* dest, size_t count) { |
299 static void gen_arraycopy_barrier(oop* dest, size_t count) { |
294 assert(count != 0, "count should be non-zero"); |
300 assert(count != 0, "count should be non-zero"); |
295 BarrierSet* bs = Universe::heap()->barrier_set(); |
301 BarrierSet* bs = Universe::heap()->barrier_set(); |
328 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count)) |
334 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count)) |
329 #ifndef PRODUCT |
335 #ifndef PRODUCT |
330 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
336 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
331 #endif // !PRODUCT |
337 #endif // !PRODUCT |
332 assert(count != 0, "count should be non-zero"); |
338 assert(count != 0, "count should be non-zero"); |
333 gen_arraycopy_barrier_pre(dest, count); |
339 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/false); |
334 Copy::conjoint_oops_atomic(src, dest, count); |
340 Copy::conjoint_oops_atomic(src, dest, count); |
335 gen_arraycopy_barrier(dest, count); |
341 gen_arraycopy_barrier(dest, count); |
336 JRT_END |
342 JRT_END |
337 |
343 |
|
344 JRT_LEAF(void, StubRoutines::oop_copy_uninit(oop* src, oop* dest, size_t count)) |
|
345 #ifndef PRODUCT |
|
346 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
|
347 #endif // !PRODUCT |
|
348 assert(count != 0, "count should be non-zero"); |
|
349 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/true); |
|
350 Copy::conjoint_oops_atomic(src, dest, count); |
|
351 gen_arraycopy_barrier(dest, count); |
|
352 JRT_END |
|
353 |
338 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count)) |
354 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count)) |
339 #ifndef PRODUCT |
355 #ifndef PRODUCT |
340 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy |
356 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy |
341 #endif // !PRODUCT |
357 #endif // !PRODUCT |
342 Copy::arrayof_conjoint_jbytes(src, dest, count); |
358 Copy::arrayof_conjoint_jbytes(src, dest, count); |
366 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count)) |
382 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count)) |
367 #ifndef PRODUCT |
383 #ifndef PRODUCT |
368 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
384 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
369 #endif // !PRODUCT |
385 #endif // !PRODUCT |
370 assert(count != 0, "count should be non-zero"); |
386 assert(count != 0, "count should be non-zero"); |
371 gen_arraycopy_barrier_pre((oop *) dest, count); |
387 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/false); |
372 Copy::arrayof_conjoint_oops(src, dest, count); |
388 Copy::arrayof_conjoint_oops(src, dest, count); |
373 gen_arraycopy_barrier((oop *) dest, count); |
389 gen_arraycopy_barrier((oop *) dest, count); |
374 JRT_END |
390 JRT_END |
375 |
391 |
|
392 JRT_LEAF(void, StubRoutines::arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count)) |
|
393 #ifndef PRODUCT |
|
394 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy |
|
395 #endif // !PRODUCT |
|
396 assert(count != 0, "count should be non-zero"); |
|
397 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/true); |
|
398 Copy::arrayof_conjoint_oops(src, dest, count); |
|
399 gen_arraycopy_barrier((oop *) dest, count); |
|
400 JRT_END |
376 |
401 |
377 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) { |
402 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) { |
378 #define RETURN_STUB(xxx_fill) { \ |
403 #define RETURN_STUB(xxx_fill) { \ |
379 name = #xxx_fill; \ |
404 name = #xxx_fill; \ |
380 return StubRoutines::xxx_fill(); } |
405 return StubRoutines::xxx_fill(); } |