annotate src/share/vm/runtime/stubRoutines.cpp @ 8804:91bf0bdae37b

8008217: CDS: Class data sharing limits the malloc heap on Solaris Summary: In 64bit VM move CDS archive address to 32G on all platforms using new flag SharedBaseAddress. In 32bit VM set CDS archive address to 3Gb on Linux and let other OSs pick the address. Reviewed-by: kvn, dcubed, zgu, hseigel
author coleenp
date Wed, 20 Mar 2013 08:04:54 -0400
parents a3ecd773a7b9
children 746b070f5022
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6842
b9a9ed0f8eeb 7197424: update copyright year to match last edit in jdk8 hotspot repository
mikael
parents: 6266
diff changeset
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
0
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 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1490
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1490
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1490
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
26 #include "asm/codeBuffer.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
27 #include "memory/resourceArea.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
28 #include "oops/oop.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
29 #include "runtime/interfaceSupport.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
30 #include "runtime/sharedRuntime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
31 #include "runtime/stubRoutines.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
32 #include "runtime/timer.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
33 #include "utilities/copy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
34 #ifdef COMPILER2
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
35 #include "opto/runtime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1764
diff changeset
36 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
37
a61af66fc99e Initial load
duke
parents:
diff changeset
38
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // Implementation of StubRoutines - for a description
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // of how to extend it, see the header file.
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // Class Variables
a61af66fc99e Initial load
duke
parents:
diff changeset
43
a61af66fc99e Initial load
duke
parents:
diff changeset
44 BufferBlob* StubRoutines::_code1 = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 BufferBlob* StubRoutines::_code2 = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
46
a61af66fc99e Initial load
duke
parents:
diff changeset
47 address StubRoutines::_call_stub_return_address = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 address StubRoutines::_call_stub_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 address StubRoutines::_catch_exception_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
51 address StubRoutines::_forward_exception_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
52 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
53 address StubRoutines::_throw_IncompatibleClassChangeError_entry = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54 address StubRoutines::_throw_NullPointerException_at_call_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
55 address StubRoutines::_throw_StackOverflowError_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 address StubRoutines::_handler_for_unsafe_access_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 jint StubRoutines::_verify_oop_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 address StubRoutines::_verify_oop_subroutine_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
59 address StubRoutines::_atomic_xchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
60 address StubRoutines::_atomic_xchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 address StubRoutines::_atomic_store_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 address StubRoutines::_atomic_store_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 address StubRoutines::_atomic_cmpxchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
64 address StubRoutines::_atomic_cmpxchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
65 address StubRoutines::_atomic_cmpxchg_long_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
66 address StubRoutines::_atomic_add_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
67 address StubRoutines::_atomic_add_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 address StubRoutines::_fence_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 address StubRoutines::_d2i_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
70 address StubRoutines::_d2l_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
71
a61af66fc99e Initial load
duke
parents:
diff changeset
72 jint StubRoutines::_fpu_cntrl_wrd_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 jint StubRoutines::_mxcsr_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
78 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
79
a61af66fc99e Initial load
duke
parents:
diff changeset
80 // Compiled code entry points default values
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
81 // The default functions don't have separate disjoint versions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
82 address StubRoutines::_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
83 address StubRoutines::_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
84 address StubRoutines::_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
85 address StubRoutines::_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
86 address StubRoutines::_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
87 address StubRoutines::_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
88 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
89 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
90 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
91 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
92 address StubRoutines::_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
93 address StubRoutines::_oop_disjoint_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
96 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
97 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
99 address StubRoutines::_arrayof_oop_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
100 address StubRoutines::_arrayof_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
101 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
102 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
103 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
104 address StubRoutines::_arrayof_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
105 address StubRoutines::_arrayof_oop_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
106 address StubRoutines::_arrayof_oop_disjoint_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_uninit);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
107
3892
baf763f388e6 7059037: Use BIS for zeroing on T4
kvn
parents: 3781
diff changeset
108 address StubRoutines::_zero_aligned_words = CAST_FROM_FN_PTR(address, Copy::zero_to_words);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
109
a61af66fc99e Initial load
duke
parents:
diff changeset
110 address StubRoutines::_checkcast_arraycopy = NULL;
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
111 address StubRoutines::_checkcast_arraycopy_uninit = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
112 address StubRoutines::_unsafe_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
113 address StubRoutines::_generic_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
114
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
115
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
116 address StubRoutines::_jbyte_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
117 address StubRoutines::_jshort_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
118 address StubRoutines::_jint_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
119 address StubRoutines::_arrayof_jbyte_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
120 address StubRoutines::_arrayof_jshort_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
121 address StubRoutines::_arrayof_jint_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
122
6894
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
123 address StubRoutines::_aescrypt_encryptBlock = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
124 address StubRoutines::_aescrypt_decryptBlock = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
125 address StubRoutines::_cipherBlockChaining_encryptAESCrypt = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
126 address StubRoutines::_cipherBlockChaining_decryptAESCrypt = NULL;
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
127
1174
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
128 double (* StubRoutines::_intrinsic_log )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
129 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
130 double (* StubRoutines::_intrinsic_exp )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
131 double (* StubRoutines::_intrinsic_pow )(double, double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
132 double (* StubRoutines::_intrinsic_sin )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
133 double (* StubRoutines::_intrinsic_cos )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
134 double (* StubRoutines::_intrinsic_tan )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
135
0
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // Initialization
a61af66fc99e Initial load
duke
parents:
diff changeset
137 //
a61af66fc99e Initial load
duke
parents:
diff changeset
138 // Note: to break cycle with universe initialization, stubs are generated in two phases.
a61af66fc99e Initial load
duke
parents:
diff changeset
139 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
a61af66fc99e Initial load
duke
parents:
diff changeset
140 // The second phase includes all other stubs (which may depend on universe being initialized.)
a61af66fc99e Initial load
duke
parents:
diff changeset
141
a61af66fc99e Initial load
duke
parents:
diff changeset
142 extern void StubGenerator_generate(CodeBuffer* code, bool all); // only interface to generators
a61af66fc99e Initial load
duke
parents:
diff changeset
143
a61af66fc99e Initial load
duke
parents:
diff changeset
144 void StubRoutines::initialize1() {
a61af66fc99e Initial load
duke
parents:
diff changeset
145 if (_code1 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
146 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 TraceTime timer("StubRoutines generation 1", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
148 _code1 = BufferBlob::create("StubRoutines (1)", code_size1);
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
149 if (_code1 == NULL) {
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
150 vm_exit_out_of_memory(code_size1, "CodeCache: no room for StubRoutines (1)");
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
151 }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
152 CodeBuffer buffer(_code1);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
153 StubGenerator_generate(&buffer, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
154 }
a61af66fc99e Initial load
duke
parents:
diff changeset
155 }
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157
a61af66fc99e Initial load
duke
parents:
diff changeset
158 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
159 typedef void (*arraycopy_fn)(address src, address dst, int count);
a61af66fc99e Initial load
duke
parents:
diff changeset
160
a61af66fc99e Initial load
duke
parents:
diff changeset
161 // simple tests of generated arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
162 static void test_arraycopy_func(address func, int alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
163 int v = 0xcc;
a61af66fc99e Initial load
duke
parents:
diff changeset
164 int v2 = 0x11;
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
165 jlong lbuffer[8];
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
166 jlong lbuffer2[8];
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
167 address fbuffer = (address) lbuffer;
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
168 address fbuffer2 = (address) lbuffer2;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
169 unsigned int i;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 for (i = 0; i < sizeof(lbuffer); i++) {
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
171 fbuffer[i] = v; fbuffer2[i] = v2;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
172 }
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
173 // C++ does not guarantee jlong[] array alignment to 8 bytes.
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
174 // Use middle of array to check that memory before it is not modified.
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
175 address buffer = (address) round_to((intptr_t)&lbuffer[4], BytesPerLong);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
176 address buffer2 = (address) round_to((intptr_t)&lbuffer2[4], BytesPerLong);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // do an aligned copy
a61af66fc99e Initial load
duke
parents:
diff changeset
178 ((arraycopy_fn)func)(buffer, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 for (i = 0; i < sizeof(lbuffer); i++) {
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
180 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
181 }
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // adjust destination alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
183 ((arraycopy_fn)func)(buffer, buffer2 + alignment, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
184 for (i = 0; i < sizeof(lbuffer); i++) {
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
185 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 }
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // adjust source alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
188 ((arraycopy_fn)func)(buffer + alignment, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
189 for (i = 0; i < sizeof(lbuffer); i++) {
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
190 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
191 }
a61af66fc99e Initial load
duke
parents:
diff changeset
192 }
a61af66fc99e Initial load
duke
parents:
diff changeset
193 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
194
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 void StubRoutines::initialize2() {
a61af66fc99e Initial load
duke
parents:
diff changeset
197 if (_code2 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
198 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
199 TraceTime timer("StubRoutines generation 2", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 _code2 = BufferBlob::create("StubRoutines (2)", code_size2);
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
201 if (_code2 == NULL) {
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
202 vm_exit_out_of_memory(code_size2, "CodeCache: no room for StubRoutines (2)");
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
203 }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
204 CodeBuffer buffer(_code2);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
205 StubGenerator_generate(&buffer, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
206 }
a61af66fc99e Initial load
duke
parents:
diff changeset
207
a61af66fc99e Initial load
duke
parents:
diff changeset
208 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210 #define TEST_ARRAYCOPY(type) \
a61af66fc99e Initial load
duke
parents:
diff changeset
211 test_arraycopy_func( type##_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
212 test_arraycopy_func( type##_disjoint_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
213 test_arraycopy_func(arrayof_##type##_arraycopy(), sizeof(HeapWord)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
214 test_arraycopy_func(arrayof_##type##_disjoint_arraycopy(), sizeof(HeapWord))
a61af66fc99e Initial load
duke
parents:
diff changeset
215
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
216 // Make sure all the arraycopy stubs properly handle zero count
0
a61af66fc99e Initial load
duke
parents:
diff changeset
217 TEST_ARRAYCOPY(jbyte);
a61af66fc99e Initial load
duke
parents:
diff changeset
218 TEST_ARRAYCOPY(jshort);
a61af66fc99e Initial load
duke
parents:
diff changeset
219 TEST_ARRAYCOPY(jint);
a61af66fc99e Initial load
duke
parents:
diff changeset
220 TEST_ARRAYCOPY(jlong);
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 #undef TEST_ARRAYCOPY
a61af66fc99e Initial load
duke
parents:
diff changeset
223
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
224 #define TEST_FILL(type) \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
225 if (_##type##_fill != NULL) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
226 union { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
227 double d; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
228 type body[96]; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
229 } s; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
230 \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
231 int v = 32; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
232 for (int offset = -2; offset <= 2; offset++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
233 for (int i = 0; i < 96; i++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
234 s.body[i] = 1; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
235 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
236 type* start = s.body + 8 + offset; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
237 for (int aligned = 0; aligned < 2; aligned++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
238 if (aligned) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
239 if (((intptr_t)start) % HeapWordSize == 0) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
240 ((void (*)(type*, int, int))StubRoutines::_arrayof_##type##_fill)(start, v, 80); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
241 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
242 continue; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
243 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
244 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
245 ((void (*)(type*, int, int))StubRoutines::_##type##_fill)(start, v, 80); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
246 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
247 for (int i = 0; i < 96; i++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
248 if (i < (8 + offset) || i >= (88 + offset)) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
249 assert(s.body[i] == 1, "what?"); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
250 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
251 assert(s.body[i] == 32, "what?"); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
252 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
253 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
254 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
255 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
256 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
257
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
258 TEST_FILL(jbyte);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
259 TEST_FILL(jshort);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
260 TEST_FILL(jint);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
261
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
262 #undef TEST_FILL
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
263
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
264 #define TEST_COPYRTN(type) \
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
265 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::conjoint_##type##s_atomic), sizeof(type)); \
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
266 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::arrayof_conjoint_##type##s), (int)MAX2(sizeof(HeapWord), sizeof(type)))
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
267
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
268 // Make sure all the copy runtime routines properly handle zero count
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
269 TEST_COPYRTN(jbyte);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
270 TEST_COPYRTN(jshort);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
271 TEST_COPYRTN(jint);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
272 TEST_COPYRTN(jlong);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
273
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
274 #undef TEST_COPYRTN
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
275
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
276 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::conjoint_words), sizeof(HeapWord));
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
277 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::disjoint_words), sizeof(HeapWord));
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
278 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::disjoint_words_atomic), sizeof(HeapWord));
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
279 // Aligned to BytesPerLong
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
280 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::aligned_conjoint_words), sizeof(jlong));
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
281 test_arraycopy_func(CAST_FROM_FN_PTR(address, Copy::aligned_disjoint_words), sizeof(jlong));
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
282
0
a61af66fc99e Initial load
duke
parents:
diff changeset
283 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
284 }
a61af66fc99e Initial load
duke
parents:
diff changeset
285
a61af66fc99e Initial load
duke
parents:
diff changeset
286
a61af66fc99e Initial load
duke
parents:
diff changeset
287 void stubRoutines_init1() { StubRoutines::initialize1(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
288 void stubRoutines_init2() { StubRoutines::initialize2(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
289
a61af66fc99e Initial load
duke
parents:
diff changeset
290 //
a61af66fc99e Initial load
duke
parents:
diff changeset
291 // Default versions of arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
292 //
a61af66fc99e Initial load
duke
parents:
diff changeset
293
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
294 static void gen_arraycopy_barrier_pre(oop* dest, size_t count, bool dest_uninitialized) {
1245
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
295 assert(count != 0, "count should be non-zero");
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
296 assert(count <= (size_t)max_intx, "count too large");
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
297 BarrierSet* bs = Universe::heap()->barrier_set();
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
298 assert(bs->has_write_ref_array_pre_opt(), "Must have pre-barrier opt");
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
299 bs->write_ref_array_pre(dest, (int)count, dest_uninitialized);
1245
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
300 }
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
301
0
a61af66fc99e Initial load
duke
parents:
diff changeset
302 static void gen_arraycopy_barrier(oop* dest, size_t count) {
a61af66fc99e Initial load
duke
parents:
diff changeset
303 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
304 BarrierSet* bs = Universe::heap()->barrier_set();
a61af66fc99e Initial load
duke
parents:
diff changeset
305 assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt");
1245
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
306 bs->write_ref_array((HeapWord*)dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
307 }
a61af66fc99e Initial load
duke
parents:
diff changeset
308
a61af66fc99e Initial load
duke
parents:
diff changeset
309 JRT_LEAF(void, StubRoutines::jbyte_copy(jbyte* src, jbyte* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
310 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
311 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
312 #endif // !PRODUCT
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
313 Copy::conjoint_jbytes_atomic(src, dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
314 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316 JRT_LEAF(void, StubRoutines::jshort_copy(jshort* src, jshort* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
317 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
318 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
319 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
320 Copy::conjoint_jshorts_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
321 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
322
a61af66fc99e Initial load
duke
parents:
diff changeset
323 JRT_LEAF(void, StubRoutines::jint_copy(jint* src, jint* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
324 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
325 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
326 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
327 Copy::conjoint_jints_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
328 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
329
a61af66fc99e Initial load
duke
parents:
diff changeset
330 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
331 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
332 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path long/double array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
333 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
334 Copy::conjoint_jlongs_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
335 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
336
a61af66fc99e Initial load
duke
parents:
diff changeset
337 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
338 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
339 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
340 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
341 assert(count != 0, "count should be non-zero");
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
342 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/false);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
343 Copy::conjoint_oops_atomic(src, dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
344 gen_arraycopy_barrier(dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
345 JRT_END
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
346
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
347 JRT_LEAF(void, StubRoutines::oop_copy_uninit(oop* src, oop* dest, size_t count))
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
348 #ifndef PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
349 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
350 #endif // !PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
351 assert(count != 0, "count should be non-zero");
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
352 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/true);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
353 Copy::conjoint_oops_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
354 gen_arraycopy_barrier(dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
355 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
356
a61af66fc99e Initial load
duke
parents:
diff changeset
357 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
358 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
359 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
360 #endif // !PRODUCT
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
361 Copy::arrayof_conjoint_jbytes(src, dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
362 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
363
a61af66fc99e Initial load
duke
parents:
diff changeset
364 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
365 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
366 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
367 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
368 Copy::arrayof_conjoint_jshorts(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
369 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
370
a61af66fc99e Initial load
duke
parents:
diff changeset
371 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
372 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
373 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
374 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
375 Copy::arrayof_conjoint_jints(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
376 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
377
a61af66fc99e Initial load
duke
parents:
diff changeset
378 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
379 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
380 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
381 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
382 Copy::arrayof_conjoint_jlongs(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
383 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
384
a61af66fc99e Initial load
duke
parents:
diff changeset
385 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
386 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
387 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
388 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
389 assert(count != 0, "count should be non-zero");
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
390 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
391 Copy::arrayof_conjoint_oops(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
392 gen_arraycopy_barrier((oop *) dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
393 JRT_END
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
394
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
395 JRT_LEAF(void, StubRoutines::arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count))
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
396 #ifndef PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
397 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
398 #endif // !PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
399 assert(count != 0, "count should be non-zero");
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
400 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/true);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
401 Copy::arrayof_conjoint_oops(src, dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
402 gen_arraycopy_barrier((oop *) dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
403 JRT_END
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
404
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
405 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
406 #define RETURN_STUB(xxx_fill) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
407 name = #xxx_fill; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
408 return StubRoutines::xxx_fill(); }
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
409
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
410 switch (t) {
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
411 case T_BYTE:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
412 case T_BOOLEAN:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
413 if (!aligned) RETURN_STUB(jbyte_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
414 RETURN_STUB(arrayof_jbyte_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
415 case T_CHAR:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
416 case T_SHORT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
417 if (!aligned) RETURN_STUB(jshort_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
418 RETURN_STUB(arrayof_jshort_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
419 case T_INT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
420 case T_FLOAT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
421 if (!aligned) RETURN_STUB(jint_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
422 RETURN_STUB(arrayof_jint_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
423 case T_DOUBLE:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
424 case T_LONG:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
425 case T_ARRAY:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
426 case T_OBJECT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
427 case T_NARROWOOP:
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6266
diff changeset
428 case T_NARROWKLASS:
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
429 case T_ADDRESS:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
430 // Currently unsupported
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
431 return NULL;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
432
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
433 default:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
434 ShouldNotReachHere();
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
435 return NULL;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
436 }
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
437
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
438 #undef RETURN_STUB
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
439 }
2446
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
440
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
441 // constants for computing the copy function
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
442 enum {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
443 COPYFUNC_UNALIGNED = 0,
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
444 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
445 COPYFUNC_CONJOINT = 0,
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
446 COPYFUNC_DISJOINT = 2 // src != dest, or transfer can descend
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
447 };
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
448
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
449 // Note: The condition "disjoint" applies also for overlapping copies
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
450 // where an descending copy is permitted (i.e., dest_offset <= src_offset).
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
451 address
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
452 StubRoutines::select_arraycopy_function(BasicType t, bool aligned, bool disjoint, const char* &name, bool dest_uninitialized) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
453 int selector =
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
454 (aligned ? COPYFUNC_ALIGNED : COPYFUNC_UNALIGNED) +
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
455 (disjoint ? COPYFUNC_DISJOINT : COPYFUNC_CONJOINT);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
456
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
457 #define RETURN_STUB(xxx_arraycopy) { \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
458 name = #xxx_arraycopy; \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
459 return StubRoutines::xxx_arraycopy(); }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
460
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
461 #define RETURN_STUB_PARM(xxx_arraycopy, parm) { \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
462 name = #xxx_arraycopy; \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
463 return StubRoutines::xxx_arraycopy(parm); }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
464
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
465 switch (t) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
466 case T_BYTE:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
467 case T_BOOLEAN:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
468 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
469 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jbyte_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
470 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jbyte_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
471 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jbyte_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
472 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jbyte_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
473 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
474 case T_CHAR:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
475 case T_SHORT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
476 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
477 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jshort_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
478 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jshort_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
479 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jshort_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
480 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jshort_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
481 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
482 case T_INT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
483 case T_FLOAT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
484 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
485 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
486 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
487 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jint_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
488 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jint_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
489 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
490 case T_DOUBLE:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
491 case T_LONG:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
492 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
493 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jlong_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
494 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jlong_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
495 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jlong_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
496 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jlong_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
497 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
498 case T_ARRAY:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
499 case T_OBJECT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
500 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
501 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB_PARM(oop_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
502 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB_PARM(arrayof_oop_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
503 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB_PARM(oop_disjoint_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
504 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB_PARM(arrayof_oop_disjoint_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
505 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
506 default:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
507 ShouldNotReachHere();
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
508 return NULL;
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
509 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
510
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
511 #undef RETURN_STUB
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
512 #undef RETURN_STUB_PARM
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
513 }