annotate src/share/vm/runtime/stubRoutines.cpp @ 1091:6aa7255741f3

6906727: UseCompressedOops: some card-marking fixes related to object arrays Summary: Introduced a new write_ref_array(HeapWords* start, size_t count) method that does the requisite MemRegion range calculation so (some of the) clients of the erstwhile write_ref_array(MemRegion mr) do not need to worry. This removed all external uses of array_size(), which was also simplified and made private. Asserts were added to catch other possible issues. Further, less essential, fixes stemming from this investigation are deferred to CR 6904516 (to follow shortly in hs17). Reviewed-by: kvn, coleenp, jmasa
author ysr
date Thu, 03 Dec 2009 15:01:57 -0800
parents f8236e79048a
children ddb7834449d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
a61af66fc99e Initial load
duke
parents:
diff changeset
2 * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
a61af66fc99e Initial load
duke
parents:
diff changeset
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
a61af66fc99e Initial load
duke
parents:
diff changeset
20 * CA 95054 USA or visit www.sun.com if you need additional information or
a61af66fc99e Initial load
duke
parents:
diff changeset
21 * have any questions.
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 #include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 #include "incls/_stubRoutines.cpp.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28
a61af66fc99e Initial load
duke
parents:
diff changeset
29 // Implementation of StubRoutines - for a description
a61af66fc99e Initial load
duke
parents:
diff changeset
30 // of how to extend it, see the header file.
a61af66fc99e Initial load
duke
parents:
diff changeset
31
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // Class Variables
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34 BufferBlob* StubRoutines::_code1 = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 BufferBlob* StubRoutines::_code2 = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
36
a61af66fc99e Initial load
duke
parents:
diff changeset
37 address StubRoutines::_call_stub_return_address = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 address StubRoutines::_call_stub_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
39
a61af66fc99e Initial load
duke
parents:
diff changeset
40 address StubRoutines::_catch_exception_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
41 address StubRoutines::_forward_exception_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
42 address StubRoutines::_throw_AbstractMethodError_entry = NULL;
16
f8236e79048a 6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents: 0
diff changeset
43 address StubRoutines::_throw_IncompatibleClassChangeError_entry = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
44 address StubRoutines::_throw_ArithmeticException_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 address StubRoutines::_throw_NullPointerException_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
46 address StubRoutines::_throw_NullPointerException_at_call_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
47 address StubRoutines::_throw_StackOverflowError_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 address StubRoutines::_handler_for_unsafe_access_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
49 jint StubRoutines::_verify_oop_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
50 address StubRoutines::_verify_oop_subroutine_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
51 address StubRoutines::_atomic_xchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
52 address StubRoutines::_atomic_xchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
53 address StubRoutines::_atomic_store_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
54 address StubRoutines::_atomic_store_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
55 address StubRoutines::_atomic_cmpxchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 address StubRoutines::_atomic_cmpxchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 address StubRoutines::_atomic_cmpxchg_long_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 address StubRoutines::_atomic_add_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
59 address StubRoutines::_atomic_add_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
60 address StubRoutines::_fence_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 address StubRoutines::_d2i_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 address StubRoutines::_d2l_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 jint StubRoutines::_fpu_cntrl_wrd_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
65 jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
66 jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
67 jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 jint StubRoutines::_mxcsr_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
70 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
71
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // Compiled code entry points default values
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // The dafault functions don't have separate disjoint versions.
a61af66fc99e Initial load
duke
parents:
diff changeset
74 address StubRoutines::_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
75 address StubRoutines::_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
76 address StubRoutines::_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
77 address StubRoutines::_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
78 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
79 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
80 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
81 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
82 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
83 address StubRoutines::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
86 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
87 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
88 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
89 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
90 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
91 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
92 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
93 address StubRoutines::_arrayof_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 address StubRoutines::_checkcast_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 address StubRoutines::_unsafe_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
98 address StubRoutines::_generic_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
99
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // Initialization
a61af66fc99e Initial load
duke
parents:
diff changeset
101 //
a61af66fc99e Initial load
duke
parents:
diff changeset
102 // Note: to break cycle with universe initialization, stubs are generated in two phases.
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // The second phase includes all other stubs (which may depend on universe being initialized.)
a61af66fc99e Initial load
duke
parents:
diff changeset
105
a61af66fc99e Initial load
duke
parents:
diff changeset
106 extern void StubGenerator_generate(CodeBuffer* code, bool all); // only interface to generators
a61af66fc99e Initial load
duke
parents:
diff changeset
107
a61af66fc99e Initial load
duke
parents:
diff changeset
108 void StubRoutines::initialize1() {
a61af66fc99e Initial load
duke
parents:
diff changeset
109 if (_code1 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
110 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
111 TraceTime timer("StubRoutines generation 1", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
112 _code1 = BufferBlob::create("StubRoutines (1)", code_size1);
a61af66fc99e Initial load
duke
parents:
diff changeset
113 if( _code1 == NULL) vm_exit_out_of_memory1(code_size1, "CodeCache: no room for %s", "StubRoutines (1)");
a61af66fc99e Initial load
duke
parents:
diff changeset
114 CodeBuffer buffer(_code1->instructions_begin(), _code1->instructions_size());
a61af66fc99e Initial load
duke
parents:
diff changeset
115 StubGenerator_generate(&buffer, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
116 }
a61af66fc99e Initial load
duke
parents:
diff changeset
117 }
a61af66fc99e Initial load
duke
parents:
diff changeset
118
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
121 typedef void (*arraycopy_fn)(address src, address dst, int count);
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // simple tests of generated arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
124 static void test_arraycopy_func(address func, int alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
125 int v = 0xcc;
a61af66fc99e Initial load
duke
parents:
diff changeset
126 int v2 = 0x11;
a61af66fc99e Initial load
duke
parents:
diff changeset
127 jlong lbuffer[2];
a61af66fc99e Initial load
duke
parents:
diff changeset
128 jlong lbuffer2[2];
a61af66fc99e Initial load
duke
parents:
diff changeset
129 address buffer = (address) lbuffer;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 address buffer2 = (address) lbuffer2;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 unsigned int i;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 for (i = 0; i < sizeof(lbuffer); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
133 buffer[i] = v; buffer2[i] = v2;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // do an aligned copy
a61af66fc99e Initial load
duke
parents:
diff changeset
136 ((arraycopy_fn)func)(buffer, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
137 for (i = 0; i < sizeof(lbuffer); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
138 assert(buffer[i] == v && buffer2[i] == v2, "shouldn't have copied anything");
a61af66fc99e Initial load
duke
parents:
diff changeset
139 }
a61af66fc99e Initial load
duke
parents:
diff changeset
140 // adjust destination alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
141 ((arraycopy_fn)func)(buffer, buffer2 + alignment, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
142 for (i = 0; i < sizeof(lbuffer); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
143 assert(buffer[i] == v && buffer2[i] == v2, "shouldn't have copied anything");
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 // adjust source alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
146 ((arraycopy_fn)func)(buffer + alignment, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
147 for (i = 0; i < sizeof(lbuffer); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
148 assert(buffer[i] == v && buffer2[i] == v2, "shouldn't have copied anything");
a61af66fc99e Initial load
duke
parents:
diff changeset
149 }
a61af66fc99e Initial load
duke
parents:
diff changeset
150 }
a61af66fc99e Initial load
duke
parents:
diff changeset
151 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 void StubRoutines::initialize2() {
a61af66fc99e Initial load
duke
parents:
diff changeset
155 if (_code2 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
156 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
157 TraceTime timer("StubRoutines generation 2", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
158 _code2 = BufferBlob::create("StubRoutines (2)", code_size2);
a61af66fc99e Initial load
duke
parents:
diff changeset
159 if( _code2 == NULL) vm_exit_out_of_memory1(code_size2, "CodeCache: no room for %s", "StubRoutines (2)");
a61af66fc99e Initial load
duke
parents:
diff changeset
160 CodeBuffer buffer(_code2->instructions_begin(), _code2->instructions_size());
a61af66fc99e Initial load
duke
parents:
diff changeset
161 StubGenerator_generate(&buffer, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
162 }
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
165
a61af66fc99e Initial load
duke
parents:
diff changeset
166 #define TEST_ARRAYCOPY(type) \
a61af66fc99e Initial load
duke
parents:
diff changeset
167 test_arraycopy_func( type##_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
168 test_arraycopy_func( type##_disjoint_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
169 test_arraycopy_func(arrayof_##type##_arraycopy(), sizeof(HeapWord)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
170 test_arraycopy_func(arrayof_##type##_disjoint_arraycopy(), sizeof(HeapWord))
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Make sure all the arraycopy stubs properly handle zeros
a61af66fc99e Initial load
duke
parents:
diff changeset
173 TEST_ARRAYCOPY(jbyte);
a61af66fc99e Initial load
duke
parents:
diff changeset
174 TEST_ARRAYCOPY(jshort);
a61af66fc99e Initial load
duke
parents:
diff changeset
175 TEST_ARRAYCOPY(jint);
a61af66fc99e Initial load
duke
parents:
diff changeset
176 TEST_ARRAYCOPY(jlong);
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 #undef TEST_ARRAYCOPY
a61af66fc99e Initial load
duke
parents:
diff changeset
179
a61af66fc99e Initial load
duke
parents:
diff changeset
180 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
181 }
a61af66fc99e Initial load
duke
parents:
diff changeset
182
a61af66fc99e Initial load
duke
parents:
diff changeset
183
a61af66fc99e Initial load
duke
parents:
diff changeset
184 void stubRoutines_init1() { StubRoutines::initialize1(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
185 void stubRoutines_init2() { StubRoutines::initialize2(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
186
a61af66fc99e Initial load
duke
parents:
diff changeset
187 //
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // Default versions of arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
189 //
a61af66fc99e Initial load
duke
parents:
diff changeset
190
a61af66fc99e Initial load
duke
parents:
diff changeset
191 static void gen_arraycopy_barrier(oop* dest, size_t count) {
a61af66fc99e Initial load
duke
parents:
diff changeset
192 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
193 BarrierSet* bs = Universe::heap()->barrier_set();
a61af66fc99e Initial load
duke
parents:
diff changeset
194 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt");
a61af66fc99e Initial load
duke
parents:
diff changeset
195 bs->write_ref_array(MemRegion((HeapWord*)dest, (HeapWord*)(dest + count)));
a61af66fc99e Initial load
duke
parents:
diff changeset
196 }
a61af66fc99e Initial load
duke
parents:
diff changeset
197
a61af66fc99e Initial load
duke
parents:
diff changeset
198 JRT_LEAF(void, StubRoutines::jbyte_copy(jbyte* src, jbyte* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
199 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
200 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
201 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
202 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
203 Copy::conjoint_bytes_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206 JRT_LEAF(void, StubRoutines::jshort_copy(jshort* src, jshort* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
207 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
208 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
209 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
210 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
211 Copy::conjoint_jshorts_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
213
a61af66fc99e Initial load
duke
parents:
diff changeset
214 JRT_LEAF(void, StubRoutines::jint_copy(jint* src, jint* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
215 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
216 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
217 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
218 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
219 Copy::conjoint_jints_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
220 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
223 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
224 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path long/double array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
225 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
226 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
227 Copy::conjoint_jlongs_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
228 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
231 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
232 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
233 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
234 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
235 Copy::conjoint_oops_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
236 gen_arraycopy_barrier(dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
237 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
238
a61af66fc99e Initial load
duke
parents:
diff changeset
239 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
240 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
241 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
242 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
243 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
244 Copy::arrayof_conjoint_bytes(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
245 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
248 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
249 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
250 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
251 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
252 Copy::arrayof_conjoint_jshorts(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
253 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
254
a61af66fc99e Initial load
duke
parents:
diff changeset
255 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
256 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
257 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
258 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
259 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
260 Copy::arrayof_conjoint_jints(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
261 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
262
a61af66fc99e Initial load
duke
parents:
diff changeset
263 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
264 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
265 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
266 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
267 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
268 Copy::arrayof_conjoint_jlongs(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
269 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
272 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
273 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
274 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
275 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
276 Copy::arrayof_conjoint_oops(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
277 gen_arraycopy_barrier((oop *) dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
278 JRT_END