annotate src/share/vm/runtime/stubRoutines.cpp @ 13212:eb03a7335eb0

Use fixed instead of virtual register for target in far foreign call, since the register allocator does not support virtual registers to be used at call sites.
author Christian Wimmer <christian.wimmer@oracle.com>
date Mon, 02 Dec 2013 14:20:32 -0800
parents 6b0fd0964b87
children 4062efea018b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
11080
b800986664f4 7088419: Use x86 Hardware CRC32 Instruction with java.util.zip.CRC32
drchase
parents: 10161
diff changeset
2 * Copyright (c) 1997, 2013, 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;
10479
40b8c383bc31 Throw InvalidInstalledCodeException directly in the stubs.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10161
diff changeset
54 address StubRoutines::_throw_InvalidInstalledCodeException_entry = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
55 address StubRoutines::_throw_NullPointerException_at_call_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 address StubRoutines::_throw_StackOverflowError_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 address StubRoutines::_handler_for_unsafe_access_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 jint StubRoutines::_verify_oop_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
59 address StubRoutines::_verify_oop_subroutine_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
60 address StubRoutines::_atomic_xchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 address StubRoutines::_atomic_xchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 address StubRoutines::_atomic_store_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 address StubRoutines::_atomic_store_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
64 address StubRoutines::_atomic_cmpxchg_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
65 address StubRoutines::_atomic_cmpxchg_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
66 address StubRoutines::_atomic_cmpxchg_long_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
67 address StubRoutines::_atomic_add_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 address StubRoutines::_atomic_add_ptr_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 address StubRoutines::_fence_entry = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
70 address StubRoutines::_d2i_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
71 address StubRoutines::_d2l_wrapper = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
72
a61af66fc99e Initial load
duke
parents:
diff changeset
73 jint StubRoutines::_fpu_cntrl_wrd_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 jint StubRoutines::_fpu_cntrl_wrd_24 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 jint StubRoutines::_fpu_cntrl_wrd_64 = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 jint StubRoutines::_fpu_cntrl_wrd_trunc = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 jint StubRoutines::_mxcsr_std = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 jint StubRoutines::_fpu_subnormal_bias1[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
79 jint StubRoutines::_fpu_subnormal_bias2[3] = { 0, 0, 0 };
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 // Compiled code entry points default values
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
82 // The default functions don't have separate disjoint versions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 address StubRoutines::_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
84 address StubRoutines::_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
85 address StubRoutines::_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
86 address StubRoutines::_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
87 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
88 address StubRoutines::_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
89 address StubRoutines::_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
90 address StubRoutines::_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
91 address StubRoutines::_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
92 address StubRoutines::_jlong_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
93 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
94 address StubRoutines::_oop_disjoint_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 address StubRoutines::_arrayof_jbyte_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
97 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 address StubRoutines::_arrayof_jint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
99 address StubRoutines::_arrayof_jlong_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
100 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
101 address StubRoutines::_arrayof_oop_arraycopy_uninit = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_uninit);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
102 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
103 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
104 address StubRoutines::_arrayof_jint_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
a61af66fc99e Initial load
duke
parents:
diff changeset
105 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
106 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
107 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
108
3892
baf763f388e6 7059037: Use BIS for zeroing on T4
kvn
parents: 3451
diff changeset
109 address StubRoutines::_zero_aligned_words = CAST_FROM_FN_PTR(address, Copy::zero_to_words);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110
a61af66fc99e Initial load
duke
parents:
diff changeset
111 address StubRoutines::_checkcast_arraycopy = NULL;
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
112 address StubRoutines::_checkcast_arraycopy_uninit = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
113 address StubRoutines::_unsafe_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
114 address StubRoutines::_generic_arraycopy = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
115
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
116
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
117 address StubRoutines::_jbyte_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
118 address StubRoutines::_jshort_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
119 address StubRoutines::_jint_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
120 address StubRoutines::_arrayof_jbyte_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
121 address StubRoutines::_arrayof_jshort_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
122 address StubRoutines::_arrayof_jint_fill;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
123
6894
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
124 address StubRoutines::_aescrypt_encryptBlock = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
125 address StubRoutines::_aescrypt_decryptBlock = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
126 address StubRoutines::_cipherBlockChaining_encryptAESCrypt = NULL;
a3ecd773a7b9 7184394: add intrinsics to use AES instructions
kvn
parents: 6853
diff changeset
127 address StubRoutines::_cipherBlockChaining_decryptAESCrypt = NULL;
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
128
11080
b800986664f4 7088419: Use x86 Hardware CRC32 Instruction with java.util.zip.CRC32
drchase
parents: 10161
diff changeset
129 address StubRoutines::_updateBytesCRC32 = NULL;
b800986664f4 7088419: Use x86 Hardware CRC32 Instruction with java.util.zip.CRC32
drchase
parents: 10161
diff changeset
130 address StubRoutines::_crc_table_adr = NULL;
b800986664f4 7088419: Use x86 Hardware CRC32 Instruction with java.util.zip.CRC32
drchase
parents: 10161
diff changeset
131
1174
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
132 double (* StubRoutines::_intrinsic_log )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
133 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
134 double (* StubRoutines::_intrinsic_exp )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
135 double (* StubRoutines::_intrinsic_pow )(double, double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
136 double (* StubRoutines::_intrinsic_sin )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
137 double (* StubRoutines::_intrinsic_cos )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
138 double (* StubRoutines::_intrinsic_tan )(double) = NULL;
ddb7834449d0 6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents: 16
diff changeset
139
11127
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
140 address StubRoutines::_safefetch32_entry = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
141 address StubRoutines::_safefetch32_fault_pc = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
142 address StubRoutines::_safefetch32_continuation_pc = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
143 address StubRoutines::_safefetchN_entry = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
144 address StubRoutines::_safefetchN_fault_pc = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
145 address StubRoutines::_safefetchN_continuation_pc = NULL;
980532a806a5 8016697: Use stubs to implement safefetch
goetz
parents: 11080
diff changeset
146
0
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // Initialization
a61af66fc99e Initial load
duke
parents:
diff changeset
148 //
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // Note: to break cycle with universe initialization, stubs are generated in two phases.
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
a61af66fc99e Initial load
duke
parents:
diff changeset
151 // The second phase includes all other stubs (which may depend on universe being initialized.)
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153 extern void StubGenerator_generate(CodeBuffer* code, bool all); // only interface to generators
a61af66fc99e Initial load
duke
parents:
diff changeset
154
a61af66fc99e Initial load
duke
parents:
diff changeset
155 void StubRoutines::initialize1() {
a61af66fc99e Initial load
duke
parents:
diff changeset
156 if (_code1 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
157 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
158 TraceTime timer("StubRoutines generation 1", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
159 _code1 = BufferBlob::create("StubRoutines (1)", code_size1);
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
160 if (_code1 == NULL) {
10161
746b070f5022 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 6894
diff changeset
161 vm_exit_out_of_memory(code_size1, OOM_MALLOC_ERROR, "CodeCache: no room for StubRoutines (1)");
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
162 }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
163 CodeBuffer buffer(_code1);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
164 StubGenerator_generate(&buffer, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
165 }
a61af66fc99e Initial load
duke
parents:
diff changeset
166 }
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168
a61af66fc99e Initial load
duke
parents:
diff changeset
169 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
170 typedef void (*arraycopy_fn)(address src, address dst, int count);
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // simple tests of generated arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
173 static void test_arraycopy_func(address func, int alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
174 int v = 0xcc;
a61af66fc99e Initial load
duke
parents:
diff changeset
175 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
176 jlong lbuffer[8];
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
177 jlong lbuffer2[8];
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
178 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
179 address fbuffer2 = (address) lbuffer2;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
180 unsigned int i;
a61af66fc99e Initial load
duke
parents:
diff changeset
181 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
182 fbuffer[i] = v; fbuffer2[i] = v2;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
183 }
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
184 // 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
185 // 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
186 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
187 address buffer2 = (address) round_to((intptr_t)&lbuffer2[4], BytesPerLong);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // do an aligned copy
a61af66fc99e Initial load
duke
parents:
diff changeset
189 ((arraycopy_fn)func)(buffer, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
190 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
191 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
192 }
a61af66fc99e Initial load
duke
parents:
diff changeset
193 // adjust destination alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
194 ((arraycopy_fn)func)(buffer, buffer2 + alignment, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
195 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
196 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // adjust source alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
199 ((arraycopy_fn)func)(buffer + alignment, buffer2, 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 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
201 assert(fbuffer[i] == v && fbuffer2[i] == v2, "shouldn't have copied anything");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
202 }
a61af66fc99e Initial load
duke
parents:
diff changeset
203 }
a61af66fc99e Initial load
duke
parents:
diff changeset
204 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206
a61af66fc99e Initial load
duke
parents:
diff changeset
207 void StubRoutines::initialize2() {
a61af66fc99e Initial load
duke
parents:
diff changeset
208 if (_code2 == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
209 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
210 TraceTime timer("StubRoutines generation 2", TraceStartupTime);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 _code2 = BufferBlob::create("StubRoutines (2)", code_size2);
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
212 if (_code2 == NULL) {
10161
746b070f5022 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 6894
diff changeset
213 vm_exit_out_of_memory(code_size2, OOM_MALLOC_ERROR, "CodeCache: no room for StubRoutines (2)");
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1245
diff changeset
214 }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1603
diff changeset
215 CodeBuffer buffer(_code2);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
216 StubGenerator_generate(&buffer, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
217 }
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 #define TEST_ARRAYCOPY(type) \
a61af66fc99e Initial load
duke
parents:
diff changeset
222 test_arraycopy_func( type##_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
223 test_arraycopy_func( type##_disjoint_arraycopy(), sizeof(type)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
224 test_arraycopy_func(arrayof_##type##_arraycopy(), sizeof(HeapWord)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
225 test_arraycopy_func(arrayof_##type##_disjoint_arraycopy(), sizeof(HeapWord))
a61af66fc99e Initial load
duke
parents:
diff changeset
226
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
227 // Make sure all the arraycopy stubs properly handle zero count
0
a61af66fc99e Initial load
duke
parents:
diff changeset
228 TEST_ARRAYCOPY(jbyte);
a61af66fc99e Initial load
duke
parents:
diff changeset
229 TEST_ARRAYCOPY(jshort);
a61af66fc99e Initial load
duke
parents:
diff changeset
230 TEST_ARRAYCOPY(jint);
a61af66fc99e Initial load
duke
parents:
diff changeset
231 TEST_ARRAYCOPY(jlong);
a61af66fc99e Initial load
duke
parents:
diff changeset
232
a61af66fc99e Initial load
duke
parents:
diff changeset
233 #undef TEST_ARRAYCOPY
a61af66fc99e Initial load
duke
parents:
diff changeset
234
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
235 #define TEST_FILL(type) \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
236 if (_##type##_fill != NULL) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
237 union { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
238 double d; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
239 type body[96]; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
240 } s; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
241 \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
242 int v = 32; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
243 for (int offset = -2; offset <= 2; offset++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
244 for (int i = 0; i < 96; i++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
245 s.body[i] = 1; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
246 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
247 type* start = s.body + 8 + offset; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
248 for (int aligned = 0; aligned < 2; aligned++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
249 if (aligned) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
250 if (((intptr_t)start) % HeapWordSize == 0) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
251 ((void (*)(type*, int, int))StubRoutines::_arrayof_##type##_fill)(start, v, 80); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
252 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
253 continue; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
254 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
255 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
256 ((void (*)(type*, int, int))StubRoutines::_##type##_fill)(start, v, 80); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
257 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
258 for (int i = 0; i < 96; i++) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
259 if (i < (8 + offset) || i >= (88 + offset)) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
260 assert(s.body[i] == 1, "what?"); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
261 } else { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
262 assert(s.body[i] == 32, "what?"); \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
263 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
264 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
265 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
266 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
267 } \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
268
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
269 TEST_FILL(jbyte);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
270 TEST_FILL(jshort);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
271 TEST_FILL(jint);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
272
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
273 #undef TEST_FILL
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
274
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
275 #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
276 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
277 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
278
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
279 // 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
280 TEST_COPYRTN(jbyte);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
281 TEST_COPYRTN(jshort);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
282 TEST_COPYRTN(jint);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
283 TEST_COPYRTN(jlong);
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
284
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
285 #undef TEST_COPYRTN
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
286
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
287 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
288 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
289 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
290 // Aligned to BytesPerLong
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
291 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
292 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
293
0
a61af66fc99e Initial load
duke
parents:
diff changeset
294 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
295 }
a61af66fc99e Initial load
duke
parents:
diff changeset
296
a61af66fc99e Initial load
duke
parents:
diff changeset
297
a61af66fc99e Initial load
duke
parents:
diff changeset
298 void stubRoutines_init1() { StubRoutines::initialize1(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
299 void stubRoutines_init2() { StubRoutines::initialize2(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 //
a61af66fc99e Initial load
duke
parents:
diff changeset
302 // Default versions of arraycopy functions
a61af66fc99e Initial load
duke
parents:
diff changeset
303 //
a61af66fc99e Initial load
duke
parents:
diff changeset
304
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
305 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
306 assert(count != 0, "count should be non-zero");
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
307 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
308 BarrierSet* bs = Universe::heap()->barrier_set();
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
309 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
310 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
311 }
6484c4ee11cb 6904516: More object array barrier fixes, following up on 6906727
ysr
parents: 1174
diff changeset
312
0
a61af66fc99e Initial load
duke
parents:
diff changeset
313 static void gen_arraycopy_barrier(oop* dest, size_t count) {
a61af66fc99e Initial load
duke
parents:
diff changeset
314 assert(count != 0, "count should be non-zero");
a61af66fc99e Initial load
duke
parents:
diff changeset
315 BarrierSet* bs = Universe::heap()->barrier_set();
a61af66fc99e Initial load
duke
parents:
diff changeset
316 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
317 bs->write_ref_array((HeapWord*)dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
318 }
a61af66fc99e Initial load
duke
parents:
diff changeset
319
a61af66fc99e Initial load
duke
parents:
diff changeset
320 JRT_LEAF(void, StubRoutines::jbyte_copy(jbyte* src, jbyte* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
321 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
322 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
323 #endif // !PRODUCT
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
324 Copy::conjoint_jbytes_atomic(src, dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
325 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
326
a61af66fc99e Initial load
duke
parents:
diff changeset
327 JRT_LEAF(void, StubRoutines::jshort_copy(jshort* src, jshort* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
328 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
329 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
330 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
331 Copy::conjoint_jshorts_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
332 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
333
a61af66fc99e Initial load
duke
parents:
diff changeset
334 JRT_LEAF(void, StubRoutines::jint_copy(jint* src, jint* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
335 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
336 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
337 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
338 Copy::conjoint_jints_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
339 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
340
a61af66fc99e Initial load
duke
parents:
diff changeset
341 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
342 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
343 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path long/double array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
344 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
345 Copy::conjoint_jlongs_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
346 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
347
a61af66fc99e Initial load
duke
parents:
diff changeset
348 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
349 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
350 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
351 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
352 assert(count != 0, "count should be non-zero");
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
353 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/false);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
354 Copy::conjoint_oops_atomic(src, dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
355 gen_arraycopy_barrier(dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
356 JRT_END
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
357
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
358 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
359 #ifndef PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
360 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
361 #endif // !PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
362 assert(count != 0, "count should be non-zero");
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
363 gen_arraycopy_barrier_pre(dest, count, /*dest_uninitialized*/true);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
364 Copy::conjoint_oops_atomic(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
365 gen_arraycopy_barrier(dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
366 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
367
a61af66fc99e Initial load
duke
parents:
diff changeset
368 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
369 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
370 SharedRuntime::_jbyte_array_copy_ctr++; // Slow-path byte array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
371 #endif // !PRODUCT
1603
d93949c5bdcc 6730276: JDI_REGRESSION tests fail with "Error: count must be non-zero" error on x86
kvn
parents: 1552
diff changeset
372 Copy::arrayof_conjoint_jbytes(src, dest, count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
373 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
374
a61af66fc99e Initial load
duke
parents:
diff changeset
375 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
376 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
377 SharedRuntime::_jshort_array_copy_ctr++; // Slow-path short/char array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
378 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
379 Copy::arrayof_conjoint_jshorts(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
380 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
381
a61af66fc99e Initial load
duke
parents:
diff changeset
382 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
383 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
384 SharedRuntime::_jint_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
385 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
386 Copy::arrayof_conjoint_jints(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
387 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
388
a61af66fc99e Initial load
duke
parents:
diff changeset
389 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
390 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
391 SharedRuntime::_jlong_array_copy_ctr++; // Slow-path int/float array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
392 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
393 Copy::arrayof_conjoint_jlongs(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
394 JRT_END
a61af66fc99e Initial load
duke
parents:
diff changeset
395
a61af66fc99e Initial load
duke
parents:
diff changeset
396 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
a61af66fc99e Initial load
duke
parents:
diff changeset
397 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
398 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
a61af66fc99e Initial load
duke
parents:
diff changeset
399 #endif // !PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
400 assert(count != 0, "count should be non-zero");
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
401 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
402 Copy::arrayof_conjoint_oops(src, dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
403 gen_arraycopy_barrier((oop *) dest, count);
a61af66fc99e Initial load
duke
parents:
diff changeset
404 JRT_END
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
405
2324
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
406 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
407 #ifndef PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
408 SharedRuntime::_oop_array_copy_ctr++; // Slow-path oop array copy
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
409 #endif // !PRODUCT
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
410 assert(count != 0, "count should be non-zero");
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
411 gen_arraycopy_barrier_pre((oop *) dest, count, /*dest_uninitialized*/true);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
412 Copy::arrayof_conjoint_oops(src, dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
413 gen_arraycopy_barrier((oop *) dest, count);
0ac769a57c64 6627983: G1: Bad oop deference during marking
iveresov
parents: 1972
diff changeset
414 JRT_END
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
415
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
416 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
417 #define RETURN_STUB(xxx_fill) { \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
418 name = #xxx_fill; \
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
419 return StubRoutines::xxx_fill(); }
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
420
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
421 switch (t) {
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
422 case T_BYTE:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
423 case T_BOOLEAN:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
424 if (!aligned) RETURN_STUB(jbyte_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
425 RETURN_STUB(arrayof_jbyte_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
426 case T_CHAR:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
427 case T_SHORT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
428 if (!aligned) RETURN_STUB(jshort_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
429 RETURN_STUB(arrayof_jshort_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
430 case T_INT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
431 case T_FLOAT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
432 if (!aligned) RETURN_STUB(jint_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
433 RETURN_STUB(arrayof_jint_fill);
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
434 case T_DOUBLE:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
435 case T_LONG:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
436 case T_ARRAY:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
437 case T_OBJECT:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
438 case T_NARROWOOP:
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6266
diff changeset
439 case T_NARROWKLASS:
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
440 case T_ADDRESS:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
441 // Currently unsupported
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
442 return NULL;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
443
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
444 default:
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
445 ShouldNotReachHere();
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
446 return NULL;
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
447 }
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
448
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
449 #undef RETURN_STUB
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1603
diff changeset
450 }
2446
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
451
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
452 // constants for computing the copy function
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
453 enum {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
454 COPYFUNC_UNALIGNED = 0,
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
455 COPYFUNC_ALIGNED = 1, // src, dest aligned to HeapWordSize
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
456 COPYFUNC_CONJOINT = 0,
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
457 COPYFUNC_DISJOINT = 2 // src != dest, or transfer can descend
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
458 };
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
459
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
460 // Note: The condition "disjoint" applies also for overlapping copies
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
461 // where an descending copy is permitted (i.e., dest_offset <= src_offset).
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
462 address
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
463 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
464 int selector =
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
465 (aligned ? COPYFUNC_ALIGNED : COPYFUNC_UNALIGNED) +
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
466 (disjoint ? COPYFUNC_DISJOINT : COPYFUNC_CONJOINT);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
467
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
468 #define RETURN_STUB(xxx_arraycopy) { \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
469 name = #xxx_arraycopy; \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
470 return StubRoutines::xxx_arraycopy(); }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
471
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
472 #define RETURN_STUB_PARM(xxx_arraycopy, parm) { \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
473 name = #xxx_arraycopy; \
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
474 return StubRoutines::xxx_arraycopy(parm); }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
475
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
476 switch (t) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
477 case T_BYTE:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
478 case T_BOOLEAN:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
479 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
480 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jbyte_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
481 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jbyte_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
482 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jbyte_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
483 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jbyte_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
484 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
485 case T_CHAR:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
486 case T_SHORT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
487 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
488 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jshort_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
489 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jshort_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
490 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jshort_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
491 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jshort_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
492 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
493 case T_INT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
494 case T_FLOAT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
495 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
496 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
497 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
498 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jint_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
499 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jint_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
500 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
501 case T_DOUBLE:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
502 case T_LONG:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
503 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
504 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jlong_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
505 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jlong_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
506 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB(jlong_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
507 case COPYFUNC_DISJOINT | COPYFUNC_ALIGNED: RETURN_STUB(arrayof_jlong_disjoint_arraycopy);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
508 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
509 case T_ARRAY:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
510 case T_OBJECT:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
511 switch (selector) {
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
512 case COPYFUNC_CONJOINT | COPYFUNC_UNALIGNED: RETURN_STUB_PARM(oop_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
513 case COPYFUNC_CONJOINT | COPYFUNC_ALIGNED: RETURN_STUB_PARM(arrayof_oop_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
514 case COPYFUNC_DISJOINT | COPYFUNC_UNALIGNED: RETURN_STUB_PARM(oop_disjoint_arraycopy, dest_uninitialized);
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
515 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
516 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
517 default:
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
518 ShouldNotReachHere();
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
519 return NULL;
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
520 }
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
521
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
522 #undef RETURN_STUB
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
523 #undef RETURN_STUB_PARM
13bc79b5c9c8 7033154: Improve C1 arraycopy performance
roland
parents: 2324
diff changeset
524 }