Mercurial > hg > graal-jvmci-8
annotate src/share/vm/runtime/stubRoutines.hpp @ 3979:4dfb2df418f2
6484982: G1: process references during evacuation pauses
Summary: G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.
Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp
author | johnc |
---|---|
date | Thu, 22 Sep 2011 10:57:37 -0700 |
parents | c565834fb592 |
children | 1d7922586cf6 |
rev | line source |
---|---|
0 | 1 /* |
2324 | 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1174
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1174
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:
1174
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_RUNTIME_STUBROUTINES_HPP |
26 #define SHARE_VM_RUNTIME_STUBROUTINES_HPP | |
27 | |
28 #include "code/codeBlob.hpp" | |
29 #include "memory/allocation.hpp" | |
30 #include "runtime/frame.hpp" | |
31 #include "runtime/mutexLocker.hpp" | |
32 #include "runtime/stubCodeGenerator.hpp" | |
33 #include "utilities/top.hpp" | |
34 #ifdef TARGET_ARCH_x86 | |
35 # include "nativeInst_x86.hpp" | |
36 #endif | |
37 #ifdef TARGET_ARCH_sparc | |
38 # include "nativeInst_sparc.hpp" | |
39 #endif | |
40 #ifdef TARGET_ARCH_zero | |
41 # include "nativeInst_zero.hpp" | |
42 #endif | |
2192
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
43 #ifdef TARGET_ARCH_arm |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
44 # include "nativeInst_arm.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
45 #endif |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
46 #ifdef TARGET_ARCH_ppc |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
47 # include "nativeInst_ppc.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
48 #endif |
1972 | 49 |
0 | 50 // StubRoutines provides entry points to assembly routines used by |
51 // compiled code and the run-time system. Platform-specific entry | |
52 // points are defined in the platform-specific inner class. | |
53 // | |
54 // Class scheme: | |
55 // | |
56 // platform-independent platform-dependent | |
57 // | |
58 // stubRoutines.hpp <-- included -- stubRoutines_<arch>.hpp | |
59 // ^ ^ | |
60 // | | | |
61 // implements implements | |
62 // | | | |
63 // | | | |
64 // stubRoutines.cpp stubRoutines_<arch>.cpp | |
65 // stubRoutines_<os_family>.cpp stubGenerator_<arch>.cpp | |
66 // stubRoutines_<os_arch>.cpp | |
67 // | |
68 // Note 1: The important thing is a clean decoupling between stub | |
69 // entry points (interfacing to the whole vm; i.e., 1-to-n | |
70 // relationship) and stub generators (interfacing only to | |
71 // the entry points implementation; i.e., 1-to-1 relationship). | |
72 // This significantly simplifies changes in the generator | |
73 // structure since the rest of the vm is not affected. | |
74 // | |
75 // Note 2: stubGenerator_<arch>.cpp contains a minimal portion of | |
76 // machine-independent code; namely the generator calls of | |
77 // the generator functions that are used platform-independently. | |
78 // However, it comes with the advantage of having a 1-file | |
79 // implementation of the generator. It should be fairly easy | |
80 // to change, should it become a problem later. | |
81 // | |
82 // Scheme for adding a new entry point: | |
83 // | |
84 // 1. determine if it's a platform-dependent or independent entry point | |
85 // a) if platform independent: make subsequent changes in the independent files | |
86 // b) if platform dependent: make subsequent changes in the dependent files | |
87 // 2. add a private instance variable holding the entry point address | |
88 // 3. add a public accessor function to the instance variable | |
89 // 4. implement the corresponding generator function in the platform-dependent | |
90 // stubGenerator_<arch>.cpp file and call the function in generate_all() of that file | |
91 | |
92 | |
93 class StubRoutines: AllStatic { | |
94 | |
95 public: | |
96 enum platform_independent_constants { | |
97 max_size_of_parameters = 256 // max. parameter size supported by megamorphic lookups | |
98 }; | |
99 | |
100 // Dependencies | |
101 friend class StubGenerator; | |
1972 | 102 #ifdef TARGET_ARCH_MODEL_x86_32 |
103 # include "stubRoutines_x86_32.hpp" | |
104 #endif | |
105 #ifdef TARGET_ARCH_MODEL_x86_64 | |
106 # include "stubRoutines_x86_64.hpp" | |
107 #endif | |
108 #ifdef TARGET_ARCH_MODEL_sparc | |
109 # include "stubRoutines_sparc.hpp" | |
110 #endif | |
111 #ifdef TARGET_ARCH_MODEL_zero | |
112 # include "stubRoutines_zero.hpp" | |
113 #endif | |
2192
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
114 #ifdef TARGET_ARCH_MODEL_arm |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
115 # include "stubRoutines_arm.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
116 #endif |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
117 #ifdef TARGET_ARCH_MODEL_ppc |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
118 # include "stubRoutines_ppc.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
119 #endif |
1972 | 120 |
0 | 121 |
122 static jint _verify_oop_count; | |
123 static address _verify_oop_subroutine_entry; | |
124 | |
125 static address _call_stub_return_address; // the return PC, when returning to a call stub | |
126 static address _call_stub_entry; | |
127 static address _forward_exception_entry; | |
128 static address _catch_exception_entry; | |
129 static address _throw_AbstractMethodError_entry; | |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
130 static address _throw_IncompatibleClassChangeError_entry; |
0 | 131 static address _throw_NullPointerException_at_call_entry; |
132 static address _throw_StackOverflowError_entry; | |
3781
d83ac25d0304
7055355: JSR 292: crash while throwing WrongMethodTypeException
never
parents:
2446
diff
changeset
|
133 static address _throw_WrongMethodTypeException_entry; |
0 | 134 static address _handler_for_unsafe_access_entry; |
135 | |
136 static address _atomic_xchg_entry; | |
137 static address _atomic_xchg_ptr_entry; | |
138 static address _atomic_store_entry; | |
139 static address _atomic_store_ptr_entry; | |
140 static address _atomic_cmpxchg_entry; | |
141 static address _atomic_cmpxchg_ptr_entry; | |
142 static address _atomic_cmpxchg_long_entry; | |
143 static address _atomic_add_entry; | |
144 static address _atomic_add_ptr_entry; | |
145 static address _fence_entry; | |
146 static address _d2i_wrapper; | |
147 static address _d2l_wrapper; | |
148 | |
149 static jint _fpu_cntrl_wrd_std; | |
150 static jint _fpu_cntrl_wrd_24; | |
151 static jint _fpu_cntrl_wrd_64; | |
152 static jint _fpu_cntrl_wrd_trunc; | |
153 static jint _mxcsr_std; | |
154 static jint _fpu_subnormal_bias1[3]; | |
155 static jint _fpu_subnormal_bias2[3]; | |
156 | |
157 static BufferBlob* _code1; // code buffer for initial routines | |
158 static BufferBlob* _code2; // code buffer for all other routines | |
159 | |
160 // Leaf routines which implement arraycopy and their addresses | |
161 // arraycopy operands aligned on element type boundary | |
162 static address _jbyte_arraycopy; | |
163 static address _jshort_arraycopy; | |
164 static address _jint_arraycopy; | |
165 static address _jlong_arraycopy; | |
2324 | 166 static address _oop_arraycopy, _oop_arraycopy_uninit; |
0 | 167 static address _jbyte_disjoint_arraycopy; |
168 static address _jshort_disjoint_arraycopy; | |
169 static address _jint_disjoint_arraycopy; | |
170 static address _jlong_disjoint_arraycopy; | |
2324 | 171 static address _oop_disjoint_arraycopy, _oop_disjoint_arraycopy_uninit; |
0 | 172 |
173 // arraycopy operands aligned on zero'th element boundary | |
174 // These are identical to the ones aligned aligned on an | |
175 // element type boundary, except that they assume that both | |
176 // source and destination are HeapWord aligned. | |
177 static address _arrayof_jbyte_arraycopy; | |
178 static address _arrayof_jshort_arraycopy; | |
179 static address _arrayof_jint_arraycopy; | |
180 static address _arrayof_jlong_arraycopy; | |
2324 | 181 static address _arrayof_oop_arraycopy, _arrayof_oop_arraycopy_uninit; |
0 | 182 static address _arrayof_jbyte_disjoint_arraycopy; |
183 static address _arrayof_jshort_disjoint_arraycopy; | |
184 static address _arrayof_jint_disjoint_arraycopy; | |
185 static address _arrayof_jlong_disjoint_arraycopy; | |
2324 | 186 static address _arrayof_oop_disjoint_arraycopy, _arrayof_oop_disjoint_arraycopy_uninit; |
0 | 187 |
188 // these are recommended but optional: | |
2324 | 189 static address _checkcast_arraycopy, _checkcast_arraycopy_uninit; |
0 | 190 static address _unsafe_arraycopy; |
191 static address _generic_arraycopy; | |
192 | |
1763 | 193 static address _jbyte_fill; |
194 static address _jshort_fill; | |
195 static address _jint_fill; | |
196 static address _arrayof_jbyte_fill; | |
197 static address _arrayof_jshort_fill; | |
198 static address _arrayof_jint_fill; | |
199 | |
3892 | 200 // zero heap space aligned to jlong (8 bytes) |
201 static address _zero_aligned_words; | |
202 | |
1174
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
203 // These are versions of the java.lang.Math methods which perform |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
204 // the same operations as the intrinsic version. They are used for |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
205 // constant folding in the compiler to ensure equivalence. If the |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
206 // intrinsic version returns the same result as the strict version |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
207 // then they can be set to the appropriate function from |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
208 // SharedRuntime. |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
209 static double (*_intrinsic_log)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
210 static double (*_intrinsic_log10)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
211 static double (*_intrinsic_exp)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
212 static double (*_intrinsic_pow)(double, double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
213 static double (*_intrinsic_sin)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
214 static double (*_intrinsic_cos)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
215 static double (*_intrinsic_tan)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
216 |
0 | 217 public: |
218 // Initialization/Testing | |
219 static void initialize1(); // must happen before universe::genesis | |
220 static void initialize2(); // must happen after universe::genesis | |
221 | |
222 static bool contains(address addr) { | |
223 return | |
224 (_code1 != NULL && _code1->blob_contains(addr)) || | |
225 (_code2 != NULL && _code2->blob_contains(addr)) ; | |
226 } | |
227 | |
228 // Debugging | |
229 static jint verify_oop_count() { return _verify_oop_count; } | |
230 static jint* verify_oop_count_addr() { return &_verify_oop_count; } | |
231 // a subroutine for debugging the GC | |
232 static address verify_oop_subroutine_entry_address() { return (address)&_verify_oop_subroutine_entry; } | |
233 | |
234 static address catch_exception_entry() { return _catch_exception_entry; } | |
235 | |
236 // Calls to Java | |
237 typedef void (*CallStub)( | |
238 address link, | |
239 intptr_t* result, | |
240 BasicType result_type, | |
241 methodOopDesc* method, | |
242 address entry_point, | |
243 intptr_t* parameters, | |
244 int size_of_parameters, | |
245 TRAPS | |
246 ); | |
247 | |
248 static CallStub call_stub() { return CAST_TO_FN_PTR(CallStub, _call_stub_entry); } | |
249 | |
250 // Exceptions | |
251 static address forward_exception_entry() { return _forward_exception_entry; } | |
252 // Implicit exceptions | |
253 static address throw_AbstractMethodError_entry() { return _throw_AbstractMethodError_entry; } | |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
254 static address throw_IncompatibleClassChangeError_entry(){ return _throw_IncompatibleClassChangeError_entry; } |
0 | 255 static address throw_NullPointerException_at_call_entry(){ return _throw_NullPointerException_at_call_entry; } |
256 static address throw_StackOverflowError_entry() { return _throw_StackOverflowError_entry; } | |
3781
d83ac25d0304
7055355: JSR 292: crash while throwing WrongMethodTypeException
never
parents:
2446
diff
changeset
|
257 static address throw_WrongMethodTypeException_entry() { return _throw_WrongMethodTypeException_entry; } |
0 | 258 |
259 // Exceptions during unsafe access - should throw Java exception rather | |
260 // than crash. | |
261 static address handler_for_unsafe_access() { return _handler_for_unsafe_access_entry; } | |
262 | |
263 static address atomic_xchg_entry() { return _atomic_xchg_entry; } | |
264 static address atomic_xchg_ptr_entry() { return _atomic_xchg_ptr_entry; } | |
265 static address atomic_store_entry() { return _atomic_store_entry; } | |
266 static address atomic_store_ptr_entry() { return _atomic_store_ptr_entry; } | |
267 static address atomic_cmpxchg_entry() { return _atomic_cmpxchg_entry; } | |
268 static address atomic_cmpxchg_ptr_entry() { return _atomic_cmpxchg_ptr_entry; } | |
269 static address atomic_cmpxchg_long_entry() { return _atomic_cmpxchg_long_entry; } | |
270 static address atomic_add_entry() { return _atomic_add_entry; } | |
271 static address atomic_add_ptr_entry() { return _atomic_add_ptr_entry; } | |
272 static address fence_entry() { return _fence_entry; } | |
273 | |
274 static address d2i_wrapper() { return _d2i_wrapper; } | |
275 static address d2l_wrapper() { return _d2l_wrapper; } | |
276 static jint fpu_cntrl_wrd_std() { return _fpu_cntrl_wrd_std; } | |
277 static address addr_fpu_cntrl_wrd_std() { return (address)&_fpu_cntrl_wrd_std; } | |
278 static address addr_fpu_cntrl_wrd_24() { return (address)&_fpu_cntrl_wrd_24; } | |
279 static address addr_fpu_cntrl_wrd_64() { return (address)&_fpu_cntrl_wrd_64; } | |
280 static address addr_fpu_cntrl_wrd_trunc() { return (address)&_fpu_cntrl_wrd_trunc; } | |
281 static address addr_mxcsr_std() { return (address)&_mxcsr_std; } | |
282 static address addr_fpu_subnormal_bias1() { return (address)&_fpu_subnormal_bias1; } | |
283 static address addr_fpu_subnormal_bias2() { return (address)&_fpu_subnormal_bias2; } | |
284 | |
285 | |
2446 | 286 static address select_arraycopy_function(BasicType t, bool aligned, bool disjoint, const char* &name, bool dest_uninitialized); |
287 | |
0 | 288 static address jbyte_arraycopy() { return _jbyte_arraycopy; } |
289 static address jshort_arraycopy() { return _jshort_arraycopy; } | |
290 static address jint_arraycopy() { return _jint_arraycopy; } | |
291 static address jlong_arraycopy() { return _jlong_arraycopy; } | |
2324 | 292 static address oop_arraycopy(bool dest_uninitialized = false) { |
293 return dest_uninitialized ? _oop_arraycopy_uninit : _oop_arraycopy; | |
294 } | |
0 | 295 static address jbyte_disjoint_arraycopy() { return _jbyte_disjoint_arraycopy; } |
296 static address jshort_disjoint_arraycopy() { return _jshort_disjoint_arraycopy; } | |
297 static address jint_disjoint_arraycopy() { return _jint_disjoint_arraycopy; } | |
298 static address jlong_disjoint_arraycopy() { return _jlong_disjoint_arraycopy; } | |
2324 | 299 static address oop_disjoint_arraycopy(bool dest_uninitialized = false) { |
300 return dest_uninitialized ? _oop_disjoint_arraycopy_uninit : _oop_disjoint_arraycopy; | |
301 } | |
0 | 302 |
303 static address arrayof_jbyte_arraycopy() { return _arrayof_jbyte_arraycopy; } | |
304 static address arrayof_jshort_arraycopy() { return _arrayof_jshort_arraycopy; } | |
305 static address arrayof_jint_arraycopy() { return _arrayof_jint_arraycopy; } | |
306 static address arrayof_jlong_arraycopy() { return _arrayof_jlong_arraycopy; } | |
2324 | 307 static address arrayof_oop_arraycopy(bool dest_uninitialized = false) { |
308 return dest_uninitialized ? _arrayof_oop_arraycopy_uninit : _arrayof_oop_arraycopy; | |
309 } | |
0 | 310 |
311 static address arrayof_jbyte_disjoint_arraycopy() { return _arrayof_jbyte_disjoint_arraycopy; } | |
312 static address arrayof_jshort_disjoint_arraycopy() { return _arrayof_jshort_disjoint_arraycopy; } | |
313 static address arrayof_jint_disjoint_arraycopy() { return _arrayof_jint_disjoint_arraycopy; } | |
314 static address arrayof_jlong_disjoint_arraycopy() { return _arrayof_jlong_disjoint_arraycopy; } | |
2324 | 315 static address arrayof_oop_disjoint_arraycopy(bool dest_uninitialized = false) { |
316 return dest_uninitialized ? _arrayof_oop_disjoint_arraycopy_uninit : _arrayof_oop_disjoint_arraycopy; | |
317 } | |
0 | 318 |
2324 | 319 static address checkcast_arraycopy(bool dest_uninitialized = false) { |
320 return dest_uninitialized ? _checkcast_arraycopy_uninit : _checkcast_arraycopy; | |
321 } | |
0 | 322 static address unsafe_arraycopy() { return _unsafe_arraycopy; } |
323 static address generic_arraycopy() { return _generic_arraycopy; } | |
324 | |
1763 | 325 static address jbyte_fill() { return _jbyte_fill; } |
326 static address jshort_fill() { return _jshort_fill; } | |
327 static address jint_fill() { return _jint_fill; } | |
328 static address arrayof_jbyte_fill() { return _arrayof_jbyte_fill; } | |
329 static address arrayof_jshort_fill() { return _arrayof_jshort_fill; } | |
330 static address arrayof_jint_fill() { return _arrayof_jint_fill; } | |
331 | |
332 static address select_fill_function(BasicType t, bool aligned, const char* &name); | |
333 | |
3892 | 334 static address zero_aligned_words() { return _zero_aligned_words; } |
1763 | 335 |
1174
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
336 static double intrinsic_log(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
337 assert(_intrinsic_log != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
338 return _intrinsic_log(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
339 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
340 static double intrinsic_log10(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
341 assert(_intrinsic_log != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
342 return _intrinsic_log10(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
343 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
344 static double intrinsic_exp(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
345 assert(_intrinsic_exp != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
346 return _intrinsic_exp(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
347 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
348 static double intrinsic_pow(double d, double d2) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
349 assert(_intrinsic_pow != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
350 return _intrinsic_pow(d, d2); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
351 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
352 static double intrinsic_sin(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
353 assert(_intrinsic_sin != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
354 return _intrinsic_sin(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
355 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
356 static double intrinsic_cos(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
357 assert(_intrinsic_cos != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
358 return _intrinsic_cos(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
359 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
360 static double intrinsic_tan(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
361 assert(_intrinsic_tan != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
362 return _intrinsic_tan(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
363 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
364 |
0 | 365 // |
366 // Default versions of the above arraycopy functions for platforms which do | |
367 // not have specialized versions | |
368 // | |
2324 | 369 static void jbyte_copy (jbyte* src, jbyte* dest, size_t count); |
370 static void jshort_copy (jshort* src, jshort* dest, size_t count); | |
371 static void jint_copy (jint* src, jint* dest, size_t count); | |
372 static void jlong_copy (jlong* src, jlong* dest, size_t count); | |
373 static void oop_copy (oop* src, oop* dest, size_t count); | |
374 static void oop_copy_uninit(oop* src, oop* dest, size_t count); | |
0 | 375 |
2324 | 376 static void arrayof_jbyte_copy (HeapWord* src, HeapWord* dest, size_t count); |
377 static void arrayof_jshort_copy (HeapWord* src, HeapWord* dest, size_t count); | |
378 static void arrayof_jint_copy (HeapWord* src, HeapWord* dest, size_t count); | |
379 static void arrayof_jlong_copy (HeapWord* src, HeapWord* dest, size_t count); | |
380 static void arrayof_oop_copy (HeapWord* src, HeapWord* dest, size_t count); | |
381 static void arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count); | |
0 | 382 }; |
1972 | 383 |
384 #endif // SHARE_VM_RUNTIME_STUBROUTINES_HPP |