Mercurial > hg > truffle
annotate src/share/vm/runtime/stubRoutines.hpp @ 9126:bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
don't use the (wrong) cached value, but ask the runtime on each request.
Fixes regression on xml.* benchmarks @ specjvm2008. The problem was:
After the constructor of Object was deoptimized due to an assumption violation,
it was recompiled again after some time. However, on recompilation, the value
of hasFinalizeSubclass for the class was not updated and it was compiled again
with a, now wrong, assumption, which then triggers deoptimization again.
This was repeated until it hit the recompilation limit (defined by
PerMethodRecompilationCutoff), and therefore only executed by the interpreter
from now on, causing the performance regression.
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Mon, 15 Apr 2013 19:54:58 +0200 |
parents | a3ecd773a7b9 |
children | f2110083203d d2907f74462e |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
2 * Copyright (c) 1997, 2012, 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; | |
133 static address _handler_for_unsafe_access_entry; | |
134 | |
135 static address _atomic_xchg_entry; | |
136 static address _atomic_xchg_ptr_entry; | |
137 static address _atomic_store_entry; | |
138 static address _atomic_store_ptr_entry; | |
139 static address _atomic_cmpxchg_entry; | |
140 static address _atomic_cmpxchg_ptr_entry; | |
141 static address _atomic_cmpxchg_long_entry; | |
142 static address _atomic_add_entry; | |
143 static address _atomic_add_ptr_entry; | |
144 static address _fence_entry; | |
145 static address _d2i_wrapper; | |
146 static address _d2l_wrapper; | |
147 | |
148 static jint _fpu_cntrl_wrd_std; | |
149 static jint _fpu_cntrl_wrd_24; | |
150 static jint _fpu_cntrl_wrd_64; | |
151 static jint _fpu_cntrl_wrd_trunc; | |
152 static jint _mxcsr_std; | |
153 static jint _fpu_subnormal_bias1[3]; | |
154 static jint _fpu_subnormal_bias2[3]; | |
155 | |
156 static BufferBlob* _code1; // code buffer for initial routines | |
157 static BufferBlob* _code2; // code buffer for all other routines | |
158 | |
159 // Leaf routines which implement arraycopy and their addresses | |
160 // arraycopy operands aligned on element type boundary | |
161 static address _jbyte_arraycopy; | |
162 static address _jshort_arraycopy; | |
163 static address _jint_arraycopy; | |
164 static address _jlong_arraycopy; | |
2324 | 165 static address _oop_arraycopy, _oop_arraycopy_uninit; |
0 | 166 static address _jbyte_disjoint_arraycopy; |
167 static address _jshort_disjoint_arraycopy; | |
168 static address _jint_disjoint_arraycopy; | |
169 static address _jlong_disjoint_arraycopy; | |
2324 | 170 static address _oop_disjoint_arraycopy, _oop_disjoint_arraycopy_uninit; |
0 | 171 |
172 // arraycopy operands aligned on zero'th element boundary | |
173 // These are identical to the ones aligned aligned on an | |
174 // element type boundary, except that they assume that both | |
175 // source and destination are HeapWord aligned. | |
176 static address _arrayof_jbyte_arraycopy; | |
177 static address _arrayof_jshort_arraycopy; | |
178 static address _arrayof_jint_arraycopy; | |
179 static address _arrayof_jlong_arraycopy; | |
2324 | 180 static address _arrayof_oop_arraycopy, _arrayof_oop_arraycopy_uninit; |
0 | 181 static address _arrayof_jbyte_disjoint_arraycopy; |
182 static address _arrayof_jshort_disjoint_arraycopy; | |
183 static address _arrayof_jint_disjoint_arraycopy; | |
184 static address _arrayof_jlong_disjoint_arraycopy; | |
2324 | 185 static address _arrayof_oop_disjoint_arraycopy, _arrayof_oop_disjoint_arraycopy_uninit; |
0 | 186 |
187 // these are recommended but optional: | |
2324 | 188 static address _checkcast_arraycopy, _checkcast_arraycopy_uninit; |
0 | 189 static address _unsafe_arraycopy; |
190 static address _generic_arraycopy; | |
191 | |
1763 | 192 static address _jbyte_fill; |
193 static address _jshort_fill; | |
194 static address _jint_fill; | |
195 static address _arrayof_jbyte_fill; | |
196 static address _arrayof_jshort_fill; | |
197 static address _arrayof_jint_fill; | |
198 | |
3892 | 199 // zero heap space aligned to jlong (8 bytes) |
200 static address _zero_aligned_words; | |
201 | |
6894 | 202 static address _aescrypt_encryptBlock; |
203 static address _aescrypt_decryptBlock; | |
204 static address _cipherBlockChaining_encryptAESCrypt; | |
205 static address _cipherBlockChaining_decryptAESCrypt; | |
206 | |
1174
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
207 // 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
|
208 // 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
|
209 // 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
|
210 // 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
|
211 // 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
|
212 // SharedRuntime. |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
213 static double (*_intrinsic_log)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
214 static double (*_intrinsic_log10)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
215 static double (*_intrinsic_exp)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
216 static double (*_intrinsic_pow)(double, double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
217 static double (*_intrinsic_sin)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
218 static double (*_intrinsic_cos)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
219 static double (*_intrinsic_tan)(double); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
220 |
0 | 221 public: |
222 // Initialization/Testing | |
223 static void initialize1(); // must happen before universe::genesis | |
224 static void initialize2(); // must happen after universe::genesis | |
225 | |
226 static bool contains(address addr) { | |
227 return | |
228 (_code1 != NULL && _code1->blob_contains(addr)) || | |
229 (_code2 != NULL && _code2->blob_contains(addr)) ; | |
230 } | |
231 | |
6266
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3937
diff
changeset
|
232 static CodeBlob* code1() { return _code1; } |
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3937
diff
changeset
|
233 static CodeBlob* code2() { return _code2; } |
1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents:
3937
diff
changeset
|
234 |
0 | 235 // Debugging |
236 static jint verify_oop_count() { return _verify_oop_count; } | |
237 static jint* verify_oop_count_addr() { return &_verify_oop_count; } | |
238 // a subroutine for debugging the GC | |
239 static address verify_oop_subroutine_entry_address() { return (address)&_verify_oop_subroutine_entry; } | |
240 | |
241 static address catch_exception_entry() { return _catch_exception_entry; } | |
242 | |
243 // Calls to Java | |
244 typedef void (*CallStub)( | |
245 address link, | |
246 intptr_t* result, | |
247 BasicType result_type, | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6266
diff
changeset
|
248 Method* method, |
0 | 249 address entry_point, |
250 intptr_t* parameters, | |
251 int size_of_parameters, | |
252 TRAPS | |
253 ); | |
254 | |
255 static CallStub call_stub() { return CAST_TO_FN_PTR(CallStub, _call_stub_entry); } | |
256 | |
257 // Exceptions | |
258 static address forward_exception_entry() { return _forward_exception_entry; } | |
259 // Implicit exceptions | |
260 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
|
261 static address throw_IncompatibleClassChangeError_entry(){ return _throw_IncompatibleClassChangeError_entry; } |
0 | 262 static address throw_NullPointerException_at_call_entry(){ return _throw_NullPointerException_at_call_entry; } |
263 static address throw_StackOverflowError_entry() { return _throw_StackOverflowError_entry; } | |
264 | |
265 // Exceptions during unsafe access - should throw Java exception rather | |
266 // than crash. | |
267 static address handler_for_unsafe_access() { return _handler_for_unsafe_access_entry; } | |
268 | |
269 static address atomic_xchg_entry() { return _atomic_xchg_entry; } | |
270 static address atomic_xchg_ptr_entry() { return _atomic_xchg_ptr_entry; } | |
271 static address atomic_store_entry() { return _atomic_store_entry; } | |
272 static address atomic_store_ptr_entry() { return _atomic_store_ptr_entry; } | |
273 static address atomic_cmpxchg_entry() { return _atomic_cmpxchg_entry; } | |
274 static address atomic_cmpxchg_ptr_entry() { return _atomic_cmpxchg_ptr_entry; } | |
275 static address atomic_cmpxchg_long_entry() { return _atomic_cmpxchg_long_entry; } | |
276 static address atomic_add_entry() { return _atomic_add_entry; } | |
277 static address atomic_add_ptr_entry() { return _atomic_add_ptr_entry; } | |
278 static address fence_entry() { return _fence_entry; } | |
279 | |
280 static address d2i_wrapper() { return _d2i_wrapper; } | |
281 static address d2l_wrapper() { return _d2l_wrapper; } | |
282 static jint fpu_cntrl_wrd_std() { return _fpu_cntrl_wrd_std; } | |
283 static address addr_fpu_cntrl_wrd_std() { return (address)&_fpu_cntrl_wrd_std; } | |
284 static address addr_fpu_cntrl_wrd_24() { return (address)&_fpu_cntrl_wrd_24; } | |
285 static address addr_fpu_cntrl_wrd_64() { return (address)&_fpu_cntrl_wrd_64; } | |
286 static address addr_fpu_cntrl_wrd_trunc() { return (address)&_fpu_cntrl_wrd_trunc; } | |
287 static address addr_mxcsr_std() { return (address)&_mxcsr_std; } | |
288 static address addr_fpu_subnormal_bias1() { return (address)&_fpu_subnormal_bias1; } | |
289 static address addr_fpu_subnormal_bias2() { return (address)&_fpu_subnormal_bias2; } | |
290 | |
291 | |
2446 | 292 static address select_arraycopy_function(BasicType t, bool aligned, bool disjoint, const char* &name, bool dest_uninitialized); |
293 | |
0 | 294 static address jbyte_arraycopy() { return _jbyte_arraycopy; } |
295 static address jshort_arraycopy() { return _jshort_arraycopy; } | |
296 static address jint_arraycopy() { return _jint_arraycopy; } | |
297 static address jlong_arraycopy() { return _jlong_arraycopy; } | |
2324 | 298 static address oop_arraycopy(bool dest_uninitialized = false) { |
299 return dest_uninitialized ? _oop_arraycopy_uninit : _oop_arraycopy; | |
300 } | |
0 | 301 static address jbyte_disjoint_arraycopy() { return _jbyte_disjoint_arraycopy; } |
302 static address jshort_disjoint_arraycopy() { return _jshort_disjoint_arraycopy; } | |
303 static address jint_disjoint_arraycopy() { return _jint_disjoint_arraycopy; } | |
304 static address jlong_disjoint_arraycopy() { return _jlong_disjoint_arraycopy; } | |
2324 | 305 static address oop_disjoint_arraycopy(bool dest_uninitialized = false) { |
306 return dest_uninitialized ? _oop_disjoint_arraycopy_uninit : _oop_disjoint_arraycopy; | |
307 } | |
0 | 308 |
309 static address arrayof_jbyte_arraycopy() { return _arrayof_jbyte_arraycopy; } | |
310 static address arrayof_jshort_arraycopy() { return _arrayof_jshort_arraycopy; } | |
311 static address arrayof_jint_arraycopy() { return _arrayof_jint_arraycopy; } | |
312 static address arrayof_jlong_arraycopy() { return _arrayof_jlong_arraycopy; } | |
2324 | 313 static address arrayof_oop_arraycopy(bool dest_uninitialized = false) { |
314 return dest_uninitialized ? _arrayof_oop_arraycopy_uninit : _arrayof_oop_arraycopy; | |
315 } | |
0 | 316 |
317 static address arrayof_jbyte_disjoint_arraycopy() { return _arrayof_jbyte_disjoint_arraycopy; } | |
318 static address arrayof_jshort_disjoint_arraycopy() { return _arrayof_jshort_disjoint_arraycopy; } | |
319 static address arrayof_jint_disjoint_arraycopy() { return _arrayof_jint_disjoint_arraycopy; } | |
320 static address arrayof_jlong_disjoint_arraycopy() { return _arrayof_jlong_disjoint_arraycopy; } | |
2324 | 321 static address arrayof_oop_disjoint_arraycopy(bool dest_uninitialized = false) { |
322 return dest_uninitialized ? _arrayof_oop_disjoint_arraycopy_uninit : _arrayof_oop_disjoint_arraycopy; | |
323 } | |
0 | 324 |
2324 | 325 static address checkcast_arraycopy(bool dest_uninitialized = false) { |
326 return dest_uninitialized ? _checkcast_arraycopy_uninit : _checkcast_arraycopy; | |
327 } | |
0 | 328 static address unsafe_arraycopy() { return _unsafe_arraycopy; } |
329 static address generic_arraycopy() { return _generic_arraycopy; } | |
330 | |
1763 | 331 static address jbyte_fill() { return _jbyte_fill; } |
332 static address jshort_fill() { return _jshort_fill; } | |
333 static address jint_fill() { return _jint_fill; } | |
334 static address arrayof_jbyte_fill() { return _arrayof_jbyte_fill; } | |
335 static address arrayof_jshort_fill() { return _arrayof_jshort_fill; } | |
336 static address arrayof_jint_fill() { return _arrayof_jint_fill; } | |
337 | |
6894 | 338 static address aescrypt_encryptBlock() { return _aescrypt_encryptBlock; } |
339 static address aescrypt_decryptBlock() { return _aescrypt_decryptBlock; } | |
340 static address cipherBlockChaining_encryptAESCrypt() { return _cipherBlockChaining_encryptAESCrypt; } | |
341 static address cipherBlockChaining_decryptAESCrypt() { return _cipherBlockChaining_decryptAESCrypt; } | |
342 | |
1763 | 343 static address select_fill_function(BasicType t, bool aligned, const char* &name); |
344 | |
3892 | 345 static address zero_aligned_words() { return _zero_aligned_words; } |
1763 | 346 |
1174
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
347 static double intrinsic_log(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
348 assert(_intrinsic_log != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
349 return _intrinsic_log(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
350 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
351 static double intrinsic_log10(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
352 assert(_intrinsic_log != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
353 return _intrinsic_log10(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
354 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
355 static double intrinsic_exp(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
356 assert(_intrinsic_exp != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
357 return _intrinsic_exp(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
358 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
359 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
|
360 assert(_intrinsic_pow != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
361 return _intrinsic_pow(d, d2); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
362 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
363 static double intrinsic_sin(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
364 assert(_intrinsic_sin != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
365 return _intrinsic_sin(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
366 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
367 static double intrinsic_cos(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
368 assert(_intrinsic_cos != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
369 return _intrinsic_cos(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
370 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
371 static double intrinsic_tan(double d) { |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
372 assert(_intrinsic_tan != NULL, "must be defined"); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
373 return _intrinsic_tan(d); |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
374 } |
ddb7834449d0
6849984: Value methods for platform dependent math functions constant fold incorrectly
never
parents:
16
diff
changeset
|
375 |
0 | 376 // |
377 // Default versions of the above arraycopy functions for platforms which do | |
378 // not have specialized versions | |
379 // | |
2324 | 380 static void jbyte_copy (jbyte* src, jbyte* dest, size_t count); |
381 static void jshort_copy (jshort* src, jshort* dest, size_t count); | |
382 static void jint_copy (jint* src, jint* dest, size_t count); | |
383 static void jlong_copy (jlong* src, jlong* dest, size_t count); | |
384 static void oop_copy (oop* src, oop* dest, size_t count); | |
385 static void oop_copy_uninit(oop* src, oop* dest, size_t count); | |
0 | 386 |
2324 | 387 static void arrayof_jbyte_copy (HeapWord* src, HeapWord* dest, size_t count); |
388 static void arrayof_jshort_copy (HeapWord* src, HeapWord* dest, size_t count); | |
389 static void arrayof_jint_copy (HeapWord* src, HeapWord* dest, size_t count); | |
390 static void arrayof_jlong_copy (HeapWord* src, HeapWord* dest, size_t count); | |
391 static void arrayof_oop_copy (HeapWord* src, HeapWord* dest, size_t count); | |
392 static void arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count); | |
0 | 393 }; |
1972 | 394 |
395 #endif // SHARE_VM_RUNTIME_STUBROUTINES_HPP |