1 /*
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
63 address StubRoutines::_atomic_store_entry = NULL;
64 address StubRoutines::_atomic_store_ptr_entry = NULL;
65 address StubRoutines::_atomic_cmpxchg_entry = NULL;
66 address StubRoutines::_atomic_cmpxchg_ptr_entry = NULL;
67 address StubRoutines::_atomic_cmpxchg_long_entry = NULL;
68 address StubRoutines::_atomic_add_entry = NULL;
69 address StubRoutines::_atomic_add_ptr_entry = NULL;
70 address StubRoutines::_fence_entry = NULL;
71 address StubRoutines::_d2i_wrapper = NULL;
72 address StubRoutines::_d2l_wrapper = NULL;
73
74 jint StubRoutines::_fpu_cntrl_wrd_std = 0;
75 jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
76 jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
77 jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
78 jint StubRoutines::_mxcsr_std = 0;
79 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
80 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 };
81
82 // Compiled code entry points default values
83 // The dafault functions don't have separate disjoint versions.
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);
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);
88 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
89 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::_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::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
94
95 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);
97 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);
99 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
100 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);
102 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);
104 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
105
106 address StubRoutines::_checkcast_arraycopy = NULL;
107 address StubRoutines::_unsafe_arraycopy = NULL;
108 address StubRoutines::_generic_arraycopy = NULL;
109
110
111 address StubRoutines::_jbyte_fill;
112 address StubRoutines::_jshort_fill;
113 address StubRoutines::_jint_fill;
114 address StubRoutines::_arrayof_jbyte_fill;
115 address StubRoutines::_arrayof_jshort_fill;
116 address StubRoutines::_arrayof_jint_fill;
117
118
119 double (* StubRoutines::_intrinsic_log )(double) = NULL;
120 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
121 double (* StubRoutines::_intrinsic_exp )(double) = NULL;
122 double (* StubRoutines::_intrinsic_pow )(double, double) = NULL;
123 double (* StubRoutines::_intrinsic_sin )(double) = NULL;
124 double (* StubRoutines::_intrinsic_cos )(double) = NULL;
125 double (* StubRoutines::_intrinsic_tan )(double) = NULL;
126
318 Copy::conjoint_jints_atomic(src, dest, count);
319 JRT_END
320
321 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
322 #ifndef PRODUCT
323 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path long/double array copy
324 #endif // !PRODUCT
325 Copy::conjoint_jlongs_atomic(src, dest, count);
326 JRT_END
327
328 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
329 #ifndef PRODUCT
330 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
331 #endif // !PRODUCT
332 assert(count != 0, "count should be non-zero");
333 gen_arraycopy_barrier_pre(dest, count);
334 Copy::conjoint_oops_atomic(src, dest, count);
335 gen_arraycopy_barrier(dest, count);
336 JRT_END
337
338 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
339 #ifndef PRODUCT
340 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
341 #endif // !PRODUCT
342 Copy::arrayof_conjoint_jbytes(src, dest, count);
343 JRT_END
344
345 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
346 #ifndef PRODUCT
347 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
348 #endif // !PRODUCT
349 Copy::arrayof_conjoint_jshorts(src, dest, count);
350 JRT_END
351
352 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
353 #ifndef PRODUCT
354 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
355 #endif // !PRODUCT
356 Copy::arrayof_conjoint_jints(src, dest, count);
357 JRT_END
358
359 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
360 #ifndef PRODUCT
361 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path int/float array copy
362 #endif // !PRODUCT
363 Copy::arrayof_conjoint_jlongs(src, dest, count);
364 JRT_END
365
366 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
367 #ifndef PRODUCT
368 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
369 #endif // !PRODUCT
370 assert(count != 0, "count should be non-zero");
371 gen_arraycopy_barrier_pre((oop *) dest, count);
372 Copy::arrayof_conjoint_oops(src, dest, count);
373 gen_arraycopy_barrier((oop *) dest, count);
374 JRT_END
375
376
377 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
378 #define RETURN_STUB(xxx_fill) { \
379 name = #xxx_fill; \
380 return StubRoutines::xxx_fill(); }
381
382 switch (t) {
383 case T_BYTE:
384 case T_BOOLEAN:
385 if (!aligned) RETURN_STUB(jbyte_fill);
386 RETURN_STUB(arrayof_jbyte_fill);
387 case T_CHAR:
388 case T_SHORT:
389 if (!aligned) RETURN_STUB(jshort_fill);
390 RETURN_STUB(arrayof_jshort_fill);
391 case T_INT:
392 case T_FLOAT:
393 if (!aligned) RETURN_STUB(jint_fill);
394 RETURN_STUB(arrayof_jint_fill);
395 case T_DOUBLE:
|
1 /*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
63 address StubRoutines::_atomic_store_entry = NULL;
64 address StubRoutines::_atomic_store_ptr_entry = NULL;
65 address StubRoutines::_atomic_cmpxchg_entry = NULL;
66 address StubRoutines::_atomic_cmpxchg_ptr_entry = NULL;
67 address StubRoutines::_atomic_cmpxchg_long_entry = NULL;
68 address StubRoutines::_atomic_add_entry = NULL;
69 address StubRoutines::_atomic_add_ptr_entry = NULL;
70 address StubRoutines::_fence_entry = NULL;
71 address StubRoutines::_d2i_wrapper = NULL;
72 address StubRoutines::_d2l_wrapper = NULL;
73
74 jint StubRoutines::_fpu_cntrl_wrd_std = 0;
75 jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
76 jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
77 jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
78 jint StubRoutines::_mxcsr_std = 0;
79 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
80 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 };
81
82 // Compiled code entry points default values
83 // The default functions don't have separate disjoint versions.
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);
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);
88 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
89 address StubRoutines::_oop_arraycopy_no_pre = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_no_pre);
90 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
91 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
92 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
93 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
94 address StubRoutines::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
95 address StubRoutines::_oop_disjoint_arraycopy_no_pre = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_no_pre);
96
97 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
98 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
99 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
100 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
101 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
102 address StubRoutines::_arrayof_oop_arraycopy_no_pre = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_no_pre);
103 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
104 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
105 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
106 address StubRoutines::_arrayof_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
107 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
108 address StubRoutines::_arrayof_oop_disjoint_arraycopy_no_pre = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_no_pre);
109
110
111 address StubRoutines::_checkcast_arraycopy = NULL;
112 address StubRoutines::_checkcast_arraycopy_no_pre = NULL;
113 address StubRoutines::_unsafe_arraycopy = NULL;
114 address StubRoutines::_generic_arraycopy = NULL;
115
116
117 address StubRoutines::_jbyte_fill;
118 address StubRoutines::_jshort_fill;
119 address StubRoutines::_jint_fill;
120 address StubRoutines::_arrayof_jbyte_fill;
121 address StubRoutines::_arrayof_jshort_fill;
122 address StubRoutines::_arrayof_jint_fill;
123
124
125 double (* StubRoutines::_intrinsic_log )(double) = NULL;
126 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
127 double (* StubRoutines::_intrinsic_exp )(double) = NULL;
128 double (* StubRoutines::_intrinsic_pow )(double, double) = NULL;
129 double (* StubRoutines::_intrinsic_sin )(double) = NULL;
130 double (* StubRoutines::_intrinsic_cos )(double) = NULL;
131 double (* StubRoutines::_intrinsic_tan )(double) = NULL;
132
324 Copy::conjoint_jints_atomic(src, dest, count);
325 JRT_END
326
327 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
328 #ifndef PRODUCT
329 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path long/double array copy
330 #endif // !PRODUCT
331 Copy::conjoint_jlongs_atomic(src, dest, count);
332 JRT_END
333
334 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
335 #ifndef PRODUCT
336 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
337 #endif // !PRODUCT
338 assert(count != 0, "count should be non-zero");
339 gen_arraycopy_barrier_pre(dest, count);
340 Copy::conjoint_oops_atomic(src, dest, count);
341 gen_arraycopy_barrier(dest, count);
342 JRT_END
343
344 JRT_LEAF(void, StubRoutines::oop_copy_no_pre(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 Copy::conjoint_oops_atomic(src, dest, count);
350 gen_arraycopy_barrier(dest, count);
351 JRT_END
352
353 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
354 #ifndef PRODUCT
355 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
356 #endif // !PRODUCT
357 Copy::arrayof_conjoint_jbytes(src, dest, count);
358 JRT_END
359
360 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
361 #ifndef PRODUCT
362 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
363 #endif // !PRODUCT
364 Copy::arrayof_conjoint_jshorts(src, dest, count);
365 JRT_END
366
367 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
368 #ifndef PRODUCT
369 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
370 #endif // !PRODUCT
371 Copy::arrayof_conjoint_jints(src, dest, count);
372 JRT_END
373
374 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
375 #ifndef PRODUCT
376 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path int/float array copy
377 #endif // !PRODUCT
378 Copy::arrayof_conjoint_jlongs(src, dest, count);
379 JRT_END
380
381 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
382 #ifndef PRODUCT
383 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
384 #endif // !PRODUCT
385 assert(count != 0, "count should be non-zero");
386 gen_arraycopy_barrier_pre((oop *) dest, count);
387 Copy::arrayof_conjoint_oops(src, dest, count);
388 gen_arraycopy_barrier((oop *) dest, count);
389 JRT_END
390
391 JRT_LEAF(void, StubRoutines::arrayof_oop_copy_no_pre(HeapWord* src, HeapWord* dest, size_t count))
392 #ifndef PRODUCT
393 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
394 #endif // !PRODUCT
395 assert(count != 0, "count should be non-zero");
396 Copy::arrayof_conjoint_oops(src, dest, count);
397 gen_arraycopy_barrier((oop *) dest, count);
398 JRT_END
399
400 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
401 #define RETURN_STUB(xxx_fill) { \
402 name = #xxx_fill; \
403 return StubRoutines::xxx_fill(); }
404
405 switch (t) {
406 case T_BYTE:
407 case T_BOOLEAN:
408 if (!aligned) RETURN_STUB(jbyte_fill);
409 RETURN_STUB(arrayof_jbyte_fill);
410 case T_CHAR:
411 case T_SHORT:
412 if (!aligned) RETURN_STUB(jshort_fill);
413 RETURN_STUB(arrayof_jshort_fill);
414 case T_INT:
415 case T_FLOAT:
416 if (!aligned) RETURN_STUB(jint_fill);
417 RETURN_STUB(arrayof_jint_fill);
418 case T_DOUBLE:
|