annotate src/share/vm/utilities/globalDefinitions.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents b6a8cc1e0d92
children 7848fc12602b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
2 * Copyright (c) 1997, 2014, 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: 1311
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1311
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: 1311
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: 1789
diff changeset
25 #ifndef SHARE_VM_UTILITIES_GLOBALDEFINITIONS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
26 #define SHARE_VM_UTILITIES_GLOBALDEFINITIONS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
27
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3960
diff changeset
28 #ifndef __STDC_FORMAT_MACROS
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
29 #define __STDC_FORMAT_MACROS
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3960
diff changeset
30 #endif
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
31
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
32 #ifdef TARGET_COMPILER_gcc
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
33 # include "utilities/globalDefinitions_gcc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
34 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
35 #ifdef TARGET_COMPILER_visCPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
36 # include "utilities/globalDefinitions_visCPP.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
37 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
38 #ifdef TARGET_COMPILER_sparcWorks
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
39 # include "utilities/globalDefinitions_sparcWorks.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
40 #endif
14411
bdd155477289 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 11130
diff changeset
41 #ifdef TARGET_COMPILER_xlc
bdd155477289 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 11130
diff changeset
42 # include "utilities/globalDefinitions_xlc.hpp"
bdd155477289 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 11130
diff changeset
43 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
44
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
45 #ifndef PRAGMA_DIAG_PUSH
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
46 #define PRAGMA_DIAG_PUSH
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
47 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
48 #ifndef PRAGMA_DIAG_POP
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
49 #define PRAGMA_DIAG_POP
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
50 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
51 #ifndef PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
52 #define PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
53 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
54 #ifndef PRAGMA_FORMAT_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
55 #define PRAGMA_FORMAT_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
56 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
57 #ifndef PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
58 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
59 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
60 #ifndef PRAGMA_FORMAT_NONLITERAL_IGNORED_EXTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
61 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_EXTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
62 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
63 #ifndef PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
64 #define PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
65 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
66 #ifndef ATTRIBUTE_PRINTF
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
67 #define ATTRIBUTE_PRINTF(fmt, vargs)
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
68 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
69
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
70
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
71 #include "utilities/macros.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
72
0
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // This file holds all globally used constants & types, class (forward)
a61af66fc99e Initial load
duke
parents:
diff changeset
74 // declarations and a few frequently used utility functions.
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
77 // Constants
a61af66fc99e Initial load
duke
parents:
diff changeset
78
a61af66fc99e Initial load
duke
parents:
diff changeset
79 const int LogBytesPerShort = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
80 const int LogBytesPerInt = 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
81 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
82 const int LogBytesPerWord = 3;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
84 const int LogBytesPerWord = 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
86 const int LogBytesPerLong = 3;
a61af66fc99e Initial load
duke
parents:
diff changeset
87
a61af66fc99e Initial load
duke
parents:
diff changeset
88 const int BytesPerShort = 1 << LogBytesPerShort;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 const int BytesPerInt = 1 << LogBytesPerInt;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 const int BytesPerWord = 1 << LogBytesPerWord;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 const int BytesPerLong = 1 << LogBytesPerLong;
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 const int LogBitsPerByte = 3;
a61af66fc99e Initial load
duke
parents:
diff changeset
94 const int LogBitsPerShort = LogBitsPerByte + LogBytesPerShort;
a61af66fc99e Initial load
duke
parents:
diff changeset
95 const int LogBitsPerInt = LogBitsPerByte + LogBytesPerInt;
a61af66fc99e Initial load
duke
parents:
diff changeset
96 const int LogBitsPerWord = LogBitsPerByte + LogBytesPerWord;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 const int LogBitsPerLong = LogBitsPerByte + LogBytesPerLong;
a61af66fc99e Initial load
duke
parents:
diff changeset
98
a61af66fc99e Initial load
duke
parents:
diff changeset
99 const int BitsPerByte = 1 << LogBitsPerByte;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 const int BitsPerShort = 1 << LogBitsPerShort;
a61af66fc99e Initial load
duke
parents:
diff changeset
101 const int BitsPerInt = 1 << LogBitsPerInt;
a61af66fc99e Initial load
duke
parents:
diff changeset
102 const int BitsPerWord = 1 << LogBitsPerWord;
a61af66fc99e Initial load
duke
parents:
diff changeset
103 const int BitsPerLong = 1 << LogBitsPerLong;
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 const int WordAlignmentMask = (1 << LogBytesPerWord) - 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
106 const int LongAlignmentMask = (1 << LogBytesPerLong) - 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
107
a61af66fc99e Initial load
duke
parents:
diff changeset
108 const int WordsPerLong = 2; // Number of stack entries for longs
a61af66fc99e Initial load
duke
parents:
diff changeset
109
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
110 const int oopSize = sizeof(char*); // Full-width oop
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
111 extern int heapOopSize; // Oop within a java object
0
a61af66fc99e Initial load
duke
parents:
diff changeset
112 const int wordSize = sizeof(char*);
a61af66fc99e Initial load
duke
parents:
diff changeset
113 const int longSize = sizeof(jlong);
a61af66fc99e Initial load
duke
parents:
diff changeset
114 const int jintSize = sizeof(jint);
a61af66fc99e Initial load
duke
parents:
diff changeset
115 const int size_tSize = sizeof(size_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
116
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
117 const int BytesPerOop = BytesPerWord; // Full-width oop
0
a61af66fc99e Initial load
duke
parents:
diff changeset
118
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
119 extern int LogBytesPerHeapOop; // Oop within a java object
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
120 extern int LogBitsPerHeapOop;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
121 extern int BytesPerHeapOop;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
122 extern int BitsPerHeapOop;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
123
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
124 // Oop encoding heap max
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
125 extern uint64_t OopEncodingHeapMax;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
126
0
a61af66fc99e Initial load
duke
parents:
diff changeset
127 const int BitsPerJavaInteger = 32;
559
7628781568e1 6795362: 32bit server compiler leads to wrong results on solaris-x86
twisti
parents: 361
diff changeset
128 const int BitsPerJavaLong = 64;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
129 const int BitsPerSize_t = size_tSize * BitsPerByte;
a61af66fc99e Initial load
duke
parents:
diff changeset
130
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
131 // Size of a char[] needed to represent a jint as a string in decimal.
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
132 const int jintAsStringSize = 12;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
133
0
a61af66fc99e Initial load
duke
parents:
diff changeset
134 // In fact this should be
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // log2_intptr(sizeof(class JavaThread)) - log2_intptr(64);
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // see os::set_memory_serialize_page()
a61af66fc99e Initial load
duke
parents:
diff changeset
137 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
138 const int SerializePageShiftCount = 4;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
140 const int SerializePageShiftCount = 3;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 // An opaque struct of heap-word width, so that HeapWord* can be a generic
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // pointer into the heap. We require that object sizes be measured in
a61af66fc99e Initial load
duke
parents:
diff changeset
145 // units of heap words, so that that
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // HeapWord* hw;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // hw += oop(hw)->foo();
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // works, where foo is a method (like size or scavenge) that returns the
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // object size.
a61af66fc99e Initial load
duke
parents:
diff changeset
150 class HeapWord {
a61af66fc99e Initial load
duke
parents:
diff changeset
151 friend class VMStructs;
263
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 145
diff changeset
152 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
153 char* i;
361
a4f9ef0c0375 6743059: Error in spaceDecorator.cpp "optimized" build.
jmasa
parents: 269
diff changeset
154 #ifndef PRODUCT
263
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 145
diff changeset
155 public:
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 145
diff changeset
156 char* value() { return i; }
12eea04c8b06 6672698: mangle_unused_area() should not remangle the entire heap at each collection.
jmasa
parents: 145
diff changeset
157 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158 };
a61af66fc99e Initial load
duke
parents:
diff changeset
159
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
160 // Analogous opaque struct for metadata allocated from
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
161 // metaspaces.
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
162 class MetaWord {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
163 friend class VMStructs;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
164 private:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
165 char* i;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
166 };
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
167
0
a61af66fc99e Initial load
duke
parents:
diff changeset
168 // HeapWordSize must be 2^LogHeapWordSize.
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
169 const int HeapWordSize = sizeof(HeapWord);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
170 #ifdef _LP64
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
171 const int LogHeapWordSize = 3;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
172 #else
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
173 const int LogHeapWordSize = 2;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
174 #endif
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
175 const int HeapWordsPerLong = BytesPerLong / HeapWordSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
176 const int LogHeapWordsPerLong = LogBytesPerLong - LogHeapWordSize;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // The larger HeapWordSize for 64bit requires larger heaps
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // for the same application running in 64bit. See bug 4967770.
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // The minimum alignment to a heap word size is done. Other
a61af66fc99e Initial load
duke
parents:
diff changeset
181 // parts of the memory system may required additional alignment
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // and are responsible for those alignments.
a61af66fc99e Initial load
duke
parents:
diff changeset
183 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
184 #define ScaleForWordSize(x) align_size_down_((x) * 13 / 10, HeapWordSize)
a61af66fc99e Initial load
duke
parents:
diff changeset
185 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
186 #define ScaleForWordSize(x) (x)
a61af66fc99e Initial load
duke
parents:
diff changeset
187 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
188
a61af66fc99e Initial load
duke
parents:
diff changeset
189 // The minimum number of native machine words necessary to contain "byte_size"
a61af66fc99e Initial load
duke
parents:
diff changeset
190 // bytes.
a61af66fc99e Initial load
duke
parents:
diff changeset
191 inline size_t heap_word_size(size_t byte_size) {
a61af66fc99e Initial load
duke
parents:
diff changeset
192 return (byte_size + (HeapWordSize-1)) >> LogHeapWordSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
193 }
a61af66fc99e Initial load
duke
parents:
diff changeset
194
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 const size_t K = 1024;
a61af66fc99e Initial load
duke
parents:
diff changeset
197 const size_t M = K*K;
a61af66fc99e Initial load
duke
parents:
diff changeset
198 const size_t G = M*K;
a61af66fc99e Initial load
duke
parents:
diff changeset
199 const size_t HWperKB = K / sizeof(HeapWord);
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 const jint min_jint = (jint)1 << (sizeof(jint)*BitsPerByte-1); // 0x80000000 == smallest jint
a61af66fc99e Initial load
duke
parents:
diff changeset
202 const jint max_jint = (juint)min_jint - 1; // 0x7FFFFFFF == largest jint
a61af66fc99e Initial load
duke
parents:
diff changeset
203
a61af66fc99e Initial load
duke
parents:
diff changeset
204 // Constants for converting from a base unit to milli-base units. For
a61af66fc99e Initial load
duke
parents:
diff changeset
205 // example from seconds to milliseconds and microseconds
a61af66fc99e Initial load
duke
parents:
diff changeset
206
a61af66fc99e Initial load
duke
parents:
diff changeset
207 const int MILLIUNITS = 1000; // milli units per base unit
a61af66fc99e Initial load
duke
parents:
diff changeset
208 const int MICROUNITS = 1000000; // micro units per base unit
a61af66fc99e Initial load
duke
parents:
diff changeset
209 const int NANOUNITS = 1000000000; // nano units per base unit
a61af66fc99e Initial load
duke
parents:
diff changeset
210
4712
e7dead7e90af 7117303: VM uses non-monotonic time source and complains that it is non-monotonic
johnc
parents: 4006
diff changeset
211 const jlong NANOSECS_PER_SEC = CONST64(1000000000);
e7dead7e90af 7117303: VM uses non-monotonic time source and complains that it is non-monotonic
johnc
parents: 4006
diff changeset
212 const jint NANOSECS_PER_MILLISEC = 1000000;
e7dead7e90af 7117303: VM uses non-monotonic time source and complains that it is non-monotonic
johnc
parents: 4006
diff changeset
213
0
a61af66fc99e Initial load
duke
parents:
diff changeset
214 inline const char* proper_unit_for_byte_size(size_t s) {
6063
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
215 #ifdef _LP64
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
216 if (s >= 10*G) {
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
217 return "G";
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
218 }
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
219 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
220 if (s >= 10*M) {
a61af66fc99e Initial load
duke
parents:
diff changeset
221 return "M";
a61af66fc99e Initial load
duke
parents:
diff changeset
222 } else if (s >= 10*K) {
a61af66fc99e Initial load
duke
parents:
diff changeset
223 return "K";
a61af66fc99e Initial load
duke
parents:
diff changeset
224 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
225 return "B";
a61af66fc99e Initial load
duke
parents:
diff changeset
226 }
a61af66fc99e Initial load
duke
parents:
diff changeset
227 }
a61af66fc99e Initial load
duke
parents:
diff changeset
228
6059
3a22b77e755a 7161545: G1: Minor cleanups to the G1 logging
brutisso
parents: 4800
diff changeset
229 template <class T>
3a22b77e755a 7161545: G1: Minor cleanups to the G1 logging
brutisso
parents: 4800
diff changeset
230 inline T byte_size_in_proper_unit(T s) {
6063
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
231 #ifdef _LP64
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
232 if (s >= 10*G) {
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
233 return (T)(s/G);
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
234 }
cdfa5139bd58 7169056: Add gigabyte unit to proper_unit_for_byte_size() and byte_size_in_proper_unit()
brutisso
parents: 6059
diff changeset
235 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
236 if (s >= 10*M) {
6059
3a22b77e755a 7161545: G1: Minor cleanups to the G1 logging
brutisso
parents: 4800
diff changeset
237 return (T)(s/M);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
238 } else if (s >= 10*K) {
6059
3a22b77e755a 7161545: G1: Minor cleanups to the G1 logging
brutisso
parents: 4800
diff changeset
239 return (T)(s/K);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
240 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
241 return s;
a61af66fc99e Initial load
duke
parents:
diff changeset
242 }
a61af66fc99e Initial load
duke
parents:
diff changeset
243 }
a61af66fc99e Initial load
duke
parents:
diff changeset
244
a61af66fc99e Initial load
duke
parents:
diff changeset
245 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
246 // VM type definitions
a61af66fc99e Initial load
duke
parents:
diff changeset
247
a61af66fc99e Initial load
duke
parents:
diff changeset
248 // intx and uintx are the 'extended' int and 'extended' unsigned int types;
a61af66fc99e Initial load
duke
parents:
diff changeset
249 // they are 32bit wide on a 32-bit platform, and 64bit wide on a 64bit platform.
a61af66fc99e Initial load
duke
parents:
diff changeset
250
a61af66fc99e Initial load
duke
parents:
diff changeset
251 typedef intptr_t intx;
a61af66fc99e Initial load
duke
parents:
diff changeset
252 typedef uintptr_t uintx;
a61af66fc99e Initial load
duke
parents:
diff changeset
253
a61af66fc99e Initial load
duke
parents:
diff changeset
254 const intx min_intx = (intx)1 << (sizeof(intx)*BitsPerByte-1);
a61af66fc99e Initial load
duke
parents:
diff changeset
255 const intx max_intx = (uintx)min_intx - 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
256 const uintx max_uintx = (uintx)-1;
a61af66fc99e Initial load
duke
parents:
diff changeset
257
a61af66fc99e Initial load
duke
parents:
diff changeset
258 // Table of values:
a61af66fc99e Initial load
duke
parents:
diff changeset
259 // sizeof intx 4 8
a61af66fc99e Initial load
duke
parents:
diff changeset
260 // min_intx 0x80000000 0x8000000000000000
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // max_intx 0x7FFFFFFF 0x7FFFFFFFFFFFFFFF
a61af66fc99e Initial load
duke
parents:
diff changeset
262 // max_uintx 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF
a61af66fc99e Initial load
duke
parents:
diff changeset
263
a61af66fc99e Initial load
duke
parents:
diff changeset
264 typedef unsigned int uint; NEEDS_CLEANUP
a61af66fc99e Initial load
duke
parents:
diff changeset
265
a61af66fc99e Initial load
duke
parents:
diff changeset
266
a61af66fc99e Initial load
duke
parents:
diff changeset
267 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
268 // Java type definitions
a61af66fc99e Initial load
duke
parents:
diff changeset
269
a61af66fc99e Initial load
duke
parents:
diff changeset
270 // All kinds of 'plain' byte addresses
a61af66fc99e Initial load
duke
parents:
diff changeset
271 typedef signed char s_char;
a61af66fc99e Initial load
duke
parents:
diff changeset
272 typedef unsigned char u_char;
a61af66fc99e Initial load
duke
parents:
diff changeset
273 typedef u_char* address;
a61af66fc99e Initial load
duke
parents:
diff changeset
274 typedef uintptr_t address_word; // unsigned integer which will hold a pointer
a61af66fc99e Initial load
duke
parents:
diff changeset
275 // except for some implementations of a C++
a61af66fc99e Initial load
duke
parents:
diff changeset
276 // linkage pointer to function. Should never
a61af66fc99e Initial load
duke
parents:
diff changeset
277 // need one of those to be placed in this
a61af66fc99e Initial load
duke
parents:
diff changeset
278 // type anyway.
a61af66fc99e Initial load
duke
parents:
diff changeset
279
a61af66fc99e Initial load
duke
parents:
diff changeset
280 // Utility functions to "portably" (?) bit twiddle pointers
a61af66fc99e Initial load
duke
parents:
diff changeset
281 // Where portable means keep ANSI C++ compilers quiet
a61af66fc99e Initial load
duke
parents:
diff changeset
282
a61af66fc99e Initial load
duke
parents:
diff changeset
283 inline address set_address_bits(address x, int m) { return address(intptr_t(x) | m); }
a61af66fc99e Initial load
duke
parents:
diff changeset
284 inline address clear_address_bits(address x, int m) { return address(intptr_t(x) & ~m); }
a61af66fc99e Initial load
duke
parents:
diff changeset
285
a61af66fc99e Initial load
duke
parents:
diff changeset
286 // Utility functions to "portably" make cast to/from function pointers.
a61af66fc99e Initial load
duke
parents:
diff changeset
287
a61af66fc99e Initial load
duke
parents:
diff changeset
288 inline address_word mask_address_bits(address x, int m) { return address_word(x) & m; }
a61af66fc99e Initial load
duke
parents:
diff changeset
289 inline address_word castable_address(address x) { return address_word(x) ; }
a61af66fc99e Initial load
duke
parents:
diff changeset
290 inline address_word castable_address(void* x) { return address_word(x) ; }
a61af66fc99e Initial load
duke
parents:
diff changeset
291
a61af66fc99e Initial load
duke
parents:
diff changeset
292 // Pointer subtraction.
a61af66fc99e Initial load
duke
parents:
diff changeset
293 // The idea here is to avoid ptrdiff_t, which is signed and so doesn't have
a61af66fc99e Initial load
duke
parents:
diff changeset
294 // the range we might need to find differences from one end of the heap
a61af66fc99e Initial load
duke
parents:
diff changeset
295 // to the other.
a61af66fc99e Initial load
duke
parents:
diff changeset
296 // A typical use might be:
a61af66fc99e Initial load
duke
parents:
diff changeset
297 // if (pointer_delta(end(), top()) >= size) {
a61af66fc99e Initial load
duke
parents:
diff changeset
298 // // enough room for an object of size
a61af66fc99e Initial load
duke
parents:
diff changeset
299 // ...
a61af66fc99e Initial load
duke
parents:
diff changeset
300 // and then additions like
a61af66fc99e Initial load
duke
parents:
diff changeset
301 // ... top() + size ...
a61af66fc99e Initial load
duke
parents:
diff changeset
302 // are safe because we know that top() is at least size below end().
a61af66fc99e Initial load
duke
parents:
diff changeset
303 inline size_t pointer_delta(const void* left,
a61af66fc99e Initial load
duke
parents:
diff changeset
304 const void* right,
a61af66fc99e Initial load
duke
parents:
diff changeset
305 size_t element_size) {
a61af66fc99e Initial load
duke
parents:
diff changeset
306 return (((uintptr_t) left) - ((uintptr_t) right)) / element_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
307 }
a61af66fc99e Initial load
duke
parents:
diff changeset
308 // A version specialized for HeapWord*'s.
a61af66fc99e Initial load
duke
parents:
diff changeset
309 inline size_t pointer_delta(const HeapWord* left, const HeapWord* right) {
a61af66fc99e Initial load
duke
parents:
diff changeset
310 return pointer_delta(left, right, sizeof(HeapWord));
a61af66fc99e Initial load
duke
parents:
diff changeset
311 }
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
312 // A version specialized for MetaWord*'s.
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
313 inline size_t pointer_delta(const MetaWord* left, const MetaWord* right) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
314 return pointer_delta(left, right, sizeof(MetaWord));
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
315 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
316
a61af66fc99e Initial load
duke
parents:
diff changeset
317 //
a61af66fc99e Initial load
duke
parents:
diff changeset
318 // ANSI C++ does not allow casting from one pointer type to a function pointer
a61af66fc99e Initial load
duke
parents:
diff changeset
319 // directly without at best a warning. This macro accomplishes it silently
a61af66fc99e Initial load
duke
parents:
diff changeset
320 // In every case that is present at this point the value be cast is a pointer
a61af66fc99e Initial load
duke
parents:
diff changeset
321 // to a C linkage function. In somecase the type used for the cast reflects
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // that linkage and a picky compiler would not complain. In other cases because
a61af66fc99e Initial load
duke
parents:
diff changeset
323 // there is no convenient place to place a typedef with extern C linkage (i.e
a61af66fc99e Initial load
duke
parents:
diff changeset
324 // a platform dependent header file) it doesn't. At this point no compiler seems
a61af66fc99e Initial load
duke
parents:
diff changeset
325 // picky enough to catch these instances (which are few). It is possible that
a61af66fc99e Initial load
duke
parents:
diff changeset
326 // using templates could fix these for all cases. This use of templates is likely
a61af66fc99e Initial load
duke
parents:
diff changeset
327 // so far from the middle of the road that it is likely to be problematic in
a61af66fc99e Initial load
duke
parents:
diff changeset
328 // many C++ compilers.
a61af66fc99e Initial load
duke
parents:
diff changeset
329 //
a61af66fc99e Initial load
duke
parents:
diff changeset
330 #define CAST_TO_FN_PTR(func_type, value) ((func_type)(castable_address(value)))
a61af66fc99e Initial load
duke
parents:
diff changeset
331 #define CAST_FROM_FN_PTR(new_type, func_ptr) ((new_type)((address_word)(func_ptr)))
a61af66fc99e Initial load
duke
parents:
diff changeset
332
a61af66fc99e Initial load
duke
parents:
diff changeset
333 // Unsigned byte types for os and stream.hpp
a61af66fc99e Initial load
duke
parents:
diff changeset
334
a61af66fc99e Initial load
duke
parents:
diff changeset
335 // Unsigned one, two, four and eigth byte quantities used for describing
a61af66fc99e Initial load
duke
parents:
diff changeset
336 // the .class file format. See JVM book chapter 4.
a61af66fc99e Initial load
duke
parents:
diff changeset
337
a61af66fc99e Initial load
duke
parents:
diff changeset
338 typedef jubyte u1;
a61af66fc99e Initial load
duke
parents:
diff changeset
339 typedef jushort u2;
a61af66fc99e Initial load
duke
parents:
diff changeset
340 typedef juint u4;
a61af66fc99e Initial load
duke
parents:
diff changeset
341 typedef julong u8;
a61af66fc99e Initial load
duke
parents:
diff changeset
342
a61af66fc99e Initial load
duke
parents:
diff changeset
343 const jubyte max_jubyte = (jubyte)-1; // 0xFF largest jubyte
a61af66fc99e Initial load
duke
parents:
diff changeset
344 const jushort max_jushort = (jushort)-1; // 0xFFFF largest jushort
a61af66fc99e Initial load
duke
parents:
diff changeset
345 const juint max_juint = (juint)-1; // 0xFFFFFFFF largest juint
a61af66fc99e Initial load
duke
parents:
diff changeset
346 const julong max_julong = (julong)-1; // 0xFF....FF largest julong
a61af66fc99e Initial load
duke
parents:
diff changeset
347
4800
94ec88ca68e2 7115199: Add event tracing hooks and Java Flight Recorder infrastructure
phh
parents: 4712
diff changeset
348 typedef jbyte s1;
94ec88ca68e2 7115199: Add event tracing hooks and Java Flight Recorder infrastructure
phh
parents: 4712
diff changeset
349 typedef jshort s2;
94ec88ca68e2 7115199: Add event tracing hooks and Java Flight Recorder infrastructure
phh
parents: 4712
diff changeset
350 typedef jint s4;
94ec88ca68e2 7115199: Add event tracing hooks and Java Flight Recorder infrastructure
phh
parents: 4712
diff changeset
351 typedef jlong s8;
94ec88ca68e2 7115199: Add event tracing hooks and Java Flight Recorder infrastructure
phh
parents: 4712
diff changeset
352
0
a61af66fc99e Initial load
duke
parents:
diff changeset
353 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
354 // JVM spec restrictions
a61af66fc99e Initial load
duke
parents:
diff changeset
355
a61af66fc99e Initial load
duke
parents:
diff changeset
356 const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134)
a61af66fc99e Initial load
duke
parents:
diff changeset
357
12837
82af7d7a0128 8003420: NPG: make new GC root for pd_set
tschatzl
parents: 12110
diff changeset
358 // Default ProtectionDomainCacheSize values
82af7d7a0128 8003420: NPG: make new GC root for pd_set
tschatzl
parents: 12110
diff changeset
359
82af7d7a0128 8003420: NPG: make new GC root for pd_set
tschatzl
parents: 12110
diff changeset
360 const int defaultProtectionDomainCacheSize = NOT_LP64(137) LP64_ONLY(2017);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
361
a61af66fc99e Initial load
duke
parents:
diff changeset
362 //----------------------------------------------------------------------------------------------------
10126
63e31ce40bdb 8009928: PSR:PERF Increase default string table size
hseigel
parents: 9085
diff changeset
363 // Default and minimum StringTableSize values
6982
e4f764ddb06a 7122219: Passed StringTableSize value not verified
hseigel
parents: 6848
diff changeset
364
10126
63e31ce40bdb 8009928: PSR:PERF Increase default string table size
hseigel
parents: 9085
diff changeset
365 const int defaultStringTableSize = NOT_LP64(1009) LP64_ONLY(60013);
12837
82af7d7a0128 8003420: NPG: make new GC root for pd_set
tschatzl
parents: 12110
diff changeset
366 const int minimumStringTableSize = 1009;
6982
e4f764ddb06a 7122219: Passed StringTableSize value not verified
hseigel
parents: 6848
diff changeset
367
12825
c90e76575b03 8019375: Internal symbol table size should be tunable.
kevinw
parents: 12316
diff changeset
368 const int defaultSymbolTableSize = 20011;
c90e76575b03 8019375: Internal symbol table size should be tunable.
kevinw
parents: 12316
diff changeset
369 const int minimumSymbolTableSize = 1009;
c90e76575b03 8019375: Internal symbol table size should be tunable.
kevinw
parents: 12316
diff changeset
370
6982
e4f764ddb06a 7122219: Passed StringTableSize value not verified
hseigel
parents: 6848
diff changeset
371
e4f764ddb06a 7122219: Passed StringTableSize value not verified
hseigel
parents: 6848
diff changeset
372 //----------------------------------------------------------------------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // HotSwap - for JVMTI aka Class File Replacement and PopFrame
a61af66fc99e Initial load
duke
parents:
diff changeset
374 //
a61af66fc99e Initial load
duke
parents:
diff changeset
375 // Determines whether on-the-fly class replacement and frame popping are enabled.
a61af66fc99e Initial load
duke
parents:
diff changeset
376
a61af66fc99e Initial load
duke
parents:
diff changeset
377 #define HOTSWAP
a61af66fc99e Initial load
duke
parents:
diff changeset
378
a61af66fc99e Initial load
duke
parents:
diff changeset
379 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
380 // Object alignment, in units of HeapWords.
a61af66fc99e Initial load
duke
parents:
diff changeset
381 //
a61af66fc99e Initial load
duke
parents:
diff changeset
382 // Minimum is max(BytesPerLong, BytesPerDouble, BytesPerOop) / HeapWordSize, so jlong, jdouble and
a61af66fc99e Initial load
duke
parents:
diff changeset
383 // reference fields can be naturally aligned.
a61af66fc99e Initial load
duke
parents:
diff changeset
384
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
385 extern int MinObjAlignment;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
386 extern int MinObjAlignmentInBytes;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
387 extern int MinObjAlignmentInBytesMask;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
388
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
389 extern int LogMinObjAlignment;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
390 extern int LogMinObjAlignmentInBytes;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
391
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
392 const int LogKlassAlignmentInBytes = 3;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
393 const int LogKlassAlignment = LogKlassAlignmentInBytes - LogHeapWordSize;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
394 const int KlassAlignmentInBytes = 1 << LogKlassAlignmentInBytes;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
395 const int KlassAlignment = KlassAlignmentInBytes / HeapWordSize;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
396
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
397 // Klass encoding metaspace max size
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
398 const uint64_t KlassEncodingMetaspaceMax = (uint64_t(max_juint) + 1) << LogKlassAlignmentInBytes;
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
399
0
a61af66fc99e Initial load
duke
parents:
diff changeset
400 // Machine dependent stuff
a61af66fc99e Initial load
duke
parents:
diff changeset
401
17780
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
402 #if defined(X86) && defined(COMPILER2) && !defined(JAVASE_EMBEDDED)
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
403 // Include Restricted Transactional Memory lock eliding optimization
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
404 #define INCLUDE_RTM_OPT 1
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
405 #define RTM_OPT_ONLY(code) code
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
406 #else
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
407 #define INCLUDE_RTM_OPT 0
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
408 #define RTM_OPT_ONLY(code)
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
409 #endif
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
410 // States of Restricted Transactional Memory usage.
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
411 enum RTMState {
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
412 NoRTM = 0x2, // Don't use RTM
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
413 UseRTM = 0x1, // Use RTM
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
414 ProfileRTM = 0x0 // Use RTM with abort ratio calculation
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
415 };
606acabe7b5c 8031320: Use Intel RTM instructions for locks
kvn
parents: 13061
diff changeset
416
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
417 #ifdef TARGET_ARCH_x86
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
418 # include "globalDefinitions_x86.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
419 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
420 #ifdef TARGET_ARCH_sparc
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
421 # include "globalDefinitions_sparc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
422 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
423 #ifdef TARGET_ARCH_zero
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
424 # include "globalDefinitions_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
425 #endif
2192
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
426 #ifdef TARGET_ARCH_arm
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
427 # include "globalDefinitions_arm.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
428 #endif
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
429 #ifdef TARGET_ARCH_ppc
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
430 # include "globalDefinitions_ppc.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2152
diff changeset
431 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
432
10355
fb14e9ed1594 8011064: Some tests have failed with SIGSEGV on arm-hflt on build b82
jprovino
parents: 10126
diff changeset
433 /*
11129
16b10327b00d 8011569: ARM -- avoid native stack walking
jprovino
parents: 10355
diff changeset
434 * If a platform does not support native stack walking
10355
fb14e9ed1594 8011064: Some tests have failed with SIGSEGV on arm-hflt on build b82
jprovino
parents: 10126
diff changeset
435 * the platform specific globalDefinitions (above)
11129
16b10327b00d 8011569: ARM -- avoid native stack walking
jprovino
parents: 10355
diff changeset
436 * can set PLATFORM_NATIVE_STACK_WALKING_SUPPORTED to 0
10355
fb14e9ed1594 8011064: Some tests have failed with SIGSEGV on arm-hflt on build b82
jprovino
parents: 10126
diff changeset
437 */
11129
16b10327b00d 8011569: ARM -- avoid native stack walking
jprovino
parents: 10355
diff changeset
438 #ifndef PLATFORM_NATIVE_STACK_WALKING_SUPPORTED
16b10327b00d 8011569: ARM -- avoid native stack walking
jprovino
parents: 10355
diff changeset
439 #define PLATFORM_NATIVE_STACK_WALKING_SUPPORTED 1
10355
fb14e9ed1594 8011064: Some tests have failed with SIGSEGV on arm-hflt on build b82
jprovino
parents: 10126
diff changeset
440 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
441
17794
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
442 // To assure the IRIW property on processors that are not multiple copy
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
443 // atomic, sync instructions must be issued between volatile reads to
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
444 // assure their ordering, instead of after volatile stores.
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
445 // (See "A Tutorial Introduction to the ARM and POWER Relaxed Memory Models"
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
446 // by Luc Maranget, Susmit Sarkar and Peter Sewell, INRIA/Cambridge)
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
447 #ifdef CPU_NOT_MULTIPLE_COPY_ATOMIC
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
448 const bool support_IRIW_for_not_multiple_copy_atomic_cpu = true;
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
449 #else
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
450 const bool support_IRIW_for_not_multiple_copy_atomic_cpu = false;
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
451 #endif
3514ee402842 8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
goetz
parents: 14435
diff changeset
452
0
a61af66fc99e Initial load
duke
parents:
diff changeset
453 // The byte alignment to be used by Arena::Amalloc. See bugid 4169348.
a61af66fc99e Initial load
duke
parents:
diff changeset
454 // Note: this value must be a power of 2
a61af66fc99e Initial load
duke
parents:
diff changeset
455
a61af66fc99e Initial load
duke
parents:
diff changeset
456 #define ARENA_AMALLOC_ALIGNMENT (2*BytesPerWord)
a61af66fc99e Initial load
duke
parents:
diff changeset
457
a61af66fc99e Initial load
duke
parents:
diff changeset
458 // Signed variants of alignment helpers. There are two versions of each, a macro
a61af66fc99e Initial load
duke
parents:
diff changeset
459 // for use in places like enum definitions that require compile-time constant
a61af66fc99e Initial load
duke
parents:
diff changeset
460 // expressions and a function for all other places so as to get type checking.
a61af66fc99e Initial load
duke
parents:
diff changeset
461
a61af66fc99e Initial load
duke
parents:
diff changeset
462 #define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
a61af66fc99e Initial load
duke
parents:
diff changeset
463
12110
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
464 inline bool is_size_aligned(size_t size, size_t alignment) {
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
465 return align_size_up_(size, alignment) == size;
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
466 }
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
467
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
468 inline bool is_ptr_aligned(void* ptr, size_t alignment) {
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
469 return align_size_up_((intptr_t)ptr, (intptr_t)alignment) == (intptr_t)ptr;
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
470 }
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
471
0
a61af66fc99e Initial load
duke
parents:
diff changeset
472 inline intptr_t align_size_up(intptr_t size, intptr_t alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
473 return align_size_up_(size, alignment);
a61af66fc99e Initial load
duke
parents:
diff changeset
474 }
a61af66fc99e Initial load
duke
parents:
diff changeset
475
a61af66fc99e Initial load
duke
parents:
diff changeset
476 #define align_size_down_(size, alignment) ((size) & ~((alignment) - 1))
a61af66fc99e Initial load
duke
parents:
diff changeset
477
a61af66fc99e Initial load
duke
parents:
diff changeset
478 inline intptr_t align_size_down(intptr_t size, intptr_t alignment) {
a61af66fc99e Initial load
duke
parents:
diff changeset
479 return align_size_down_(size, alignment);
a61af66fc99e Initial load
duke
parents:
diff changeset
480 }
a61af66fc99e Initial load
duke
parents:
diff changeset
481
12029
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
482 #define is_size_aligned_(size, alignment) ((size) == (align_size_up_(size, alignment)))
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
483
12110
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
484 inline void* align_ptr_up(void* ptr, size_t alignment) {
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
485 return (void*)align_size_up((intptr_t)ptr, (intptr_t)alignment);
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
486 }
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
487
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
488 inline void* align_ptr_down(void* ptr, size_t alignment) {
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
489 return (void*)align_size_down((intptr_t)ptr, (intptr_t)alignment);
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
490 }
4c84d351cca9 8007074: SIGSEGV at ParMarkBitMap::verify_clear()
stefank
parents: 12061
diff changeset
491
0
a61af66fc99e Initial load
duke
parents:
diff changeset
492 // Align objects by rounding up their size, in HeapWord units.
a61af66fc99e Initial load
duke
parents:
diff changeset
493
a61af66fc99e Initial load
duke
parents:
diff changeset
494 #define align_object_size_(size) align_size_up_(size, MinObjAlignment)
a61af66fc99e Initial load
duke
parents:
diff changeset
495
a61af66fc99e Initial load
duke
parents:
diff changeset
496 inline intptr_t align_object_size(intptr_t size) {
a61af66fc99e Initial load
duke
parents:
diff changeset
497 return align_size_up(size, MinObjAlignment);
a61af66fc99e Initial load
duke
parents:
diff changeset
498 }
a61af66fc99e Initial load
duke
parents:
diff changeset
499
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
500 inline bool is_object_aligned(intptr_t addr) {
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
501 return addr == align_object_size(addr);
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
502 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
503
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 1311
diff changeset
504 // Pad out certain offsets to jlong alignment, in HeapWord units.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
505
a61af66fc99e Initial load
duke
parents:
diff changeset
506 inline intptr_t align_object_offset(intptr_t offset) {
a61af66fc99e Initial load
duke
parents:
diff changeset
507 return align_size_up(offset, HeapWordsPerLong);
a61af66fc99e Initial load
duke
parents:
diff changeset
508 }
a61af66fc99e Initial load
duke
parents:
diff changeset
509
12029
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
510 inline void* align_pointer_up(const void* addr, size_t size) {
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
511 return (void*) align_size_up_((uintptr_t)addr, size);
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
512 }
9766f73e770d 8022880: False sharing between PSPromotionManager instances
stefank
parents: 11130
diff changeset
513
13058
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
514 // Align down with a lower bound. If the aligning results in 0, return 'alignment'.
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
515
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
516 inline size_t align_size_down_bounded(size_t size, size_t alignment) {
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
517 size_t aligned_size = align_size_down_(size, alignment);
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
518 return aligned_size > 0 ? aligned_size : alignment;
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
519 }
3aee6bc29547 8026852: Use restricted_align_down in collector policy code
jwilhelm
parents: 12840
diff changeset
520
9060
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
521 // Clamp an address to be within a specific page
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
522 // 1. If addr is on the page it is returned as is
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
523 // 2. If addr is above the page_address the start of the *next* page will be returned
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
524 // 3. Otherwise, if addr is below the page_address the start of the page will be returned
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
525 inline address clamp_address_in_page(address addr, address page_address, intptr_t page_size) {
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
526 if (align_size_down(intptr_t(addr), page_size) == align_size_down(intptr_t(page_address), page_size)) {
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
527 // address is in the specified page, just return it as is
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
528 return addr;
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
529 } else if (addr > page_address) {
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
530 // address is above specified page, return start of next page
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
531 return (address)align_size_down(intptr_t(page_address), page_size) + page_size;
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
532 } else {
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
533 // address is below specified page, return start of page
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
534 return (address)align_size_down(intptr_t(page_address), page_size);
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
535 }
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
536 }
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
537
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
538
1665
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1579
diff changeset
539 // The expected size in bytes of a cache line, used to pad data structures.
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1579
diff changeset
540 #define DEFAULT_CACHE_LINE_SIZE 64
a93a9eda13f7 6962947: shared TaskQueue statistics
jcoomes
parents: 1579
diff changeset
541
0
a61af66fc99e Initial load
duke
parents:
diff changeset
542
a61af66fc99e Initial load
duke
parents:
diff changeset
543 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
544 // Utility macros for compilers
a61af66fc99e Initial load
duke
parents:
diff changeset
545 // used to silence compiler warnings
a61af66fc99e Initial load
duke
parents:
diff changeset
546
a61af66fc99e Initial load
duke
parents:
diff changeset
547 #define Unused_Variable(var) var
a61af66fc99e Initial load
duke
parents:
diff changeset
548
a61af66fc99e Initial load
duke
parents:
diff changeset
549
a61af66fc99e Initial load
duke
parents:
diff changeset
550 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
551 // Miscellaneous
a61af66fc99e Initial load
duke
parents:
diff changeset
552
a61af66fc99e Initial load
duke
parents:
diff changeset
553 // 6302670 Eliminate Hotspot __fabsf dependency
a61af66fc99e Initial load
duke
parents:
diff changeset
554 // All fabs() callers should call this function instead, which will implicitly
a61af66fc99e Initial load
duke
parents:
diff changeset
555 // convert the operand to double, avoiding a dependency on __fabsf which
a61af66fc99e Initial load
duke
parents:
diff changeset
556 // doesn't exist in early versions of Solaris 8.
a61af66fc99e Initial load
duke
parents:
diff changeset
557 inline double fabsd(double value) {
a61af66fc99e Initial load
duke
parents:
diff changeset
558 return fabs(value);
a61af66fc99e Initial load
duke
parents:
diff changeset
559 }
a61af66fc99e Initial load
duke
parents:
diff changeset
560
20287
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
561 //----------------------------------------------------------------------------------------------------
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
562 // Special casts
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
563 // Cast floats into same-size integers and vice-versa w/o changing bit-pattern
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
564 typedef union {
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
565 jfloat f;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
566 jint i;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
567 } FloatIntConv;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
568
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
569 typedef union {
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
570 jdouble d;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
571 jlong l;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
572 julong ul;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
573 } DoubleLongConv;
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
574
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
575 inline jint jint_cast (jfloat x) { return ((FloatIntConv*)&x)->i; }
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
576 inline jfloat jfloat_cast (jint x) { return ((FloatIntConv*)&x)->f; }
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
577
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
578 inline jlong jlong_cast (jdouble x) { return ((DoubleLongConv*)&x)->l; }
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
579 inline julong julong_cast (jdouble x) { return ((DoubleLongConv*)&x)->ul; }
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
580 inline jdouble jdouble_cast (jlong x) { return ((DoubleLongConv*)&x)->d; }
b6a8cc1e0d92 8040121: Load variable through a pointer of an incompatible type in src/hotspot/src/share/vm: opto/output.cpp, runtime/sharedRuntimeTrans.cpp, utilities/globalDefinitions_visCPP.hpp
thartmann
parents: 17937
diff changeset
581
0
a61af66fc99e Initial load
duke
parents:
diff changeset
582 inline jint low (jlong value) { return jint(value); }
a61af66fc99e Initial load
duke
parents:
diff changeset
583 inline jint high(jlong value) { return jint(value >> 32); }
a61af66fc99e Initial load
duke
parents:
diff changeset
584
a61af66fc99e Initial load
duke
parents:
diff changeset
585 // the fancy casts are a hopefully portable way
a61af66fc99e Initial load
duke
parents:
diff changeset
586 // to do unsigned 32 to 64 bit type conversion
a61af66fc99e Initial load
duke
parents:
diff changeset
587 inline void set_low (jlong* value, jint low ) { *value &= (jlong)0xffffffff << 32;
a61af66fc99e Initial load
duke
parents:
diff changeset
588 *value |= (jlong)(julong)(juint)low; }
a61af66fc99e Initial load
duke
parents:
diff changeset
589
a61af66fc99e Initial load
duke
parents:
diff changeset
590 inline void set_high(jlong* value, jint high) { *value &= (jlong)(julong)(juint)0xffffffff;
a61af66fc99e Initial load
duke
parents:
diff changeset
591 *value |= (jlong)high << 32; }
a61af66fc99e Initial load
duke
parents:
diff changeset
592
a61af66fc99e Initial load
duke
parents:
diff changeset
593 inline jlong jlong_from(jint h, jint l) {
a61af66fc99e Initial load
duke
parents:
diff changeset
594 jlong result = 0; // initialization to avoid warning
a61af66fc99e Initial load
duke
parents:
diff changeset
595 set_high(&result, h);
a61af66fc99e Initial load
duke
parents:
diff changeset
596 set_low(&result, l);
a61af66fc99e Initial load
duke
parents:
diff changeset
597 return result;
a61af66fc99e Initial load
duke
parents:
diff changeset
598 }
a61af66fc99e Initial load
duke
parents:
diff changeset
599
a61af66fc99e Initial load
duke
parents:
diff changeset
600 union jlong_accessor {
a61af66fc99e Initial load
duke
parents:
diff changeset
601 jint words[2];
a61af66fc99e Initial load
duke
parents:
diff changeset
602 jlong long_value;
a61af66fc99e Initial load
duke
parents:
diff changeset
603 };
a61af66fc99e Initial load
duke
parents:
diff changeset
604
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
605 void basic_types_init(); // cannot define here; uses assert
0
a61af66fc99e Initial load
duke
parents:
diff changeset
606
a61af66fc99e Initial load
duke
parents:
diff changeset
607
a61af66fc99e Initial load
duke
parents:
diff changeset
608 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
a61af66fc99e Initial load
duke
parents:
diff changeset
609 enum BasicType {
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
610 T_BOOLEAN = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
611 T_CHAR = 5,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
612 T_FLOAT = 6,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
613 T_DOUBLE = 7,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
614 T_BYTE = 8,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
615 T_SHORT = 9,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
616 T_INT = 10,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
617 T_LONG = 11,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
618 T_OBJECT = 12,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
619 T_ARRAY = 13,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
620 T_VOID = 14,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
621 T_ADDRESS = 15,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
622 T_NARROWOOP = 16,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
623 T_METADATA = 17,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
624 T_NARROWKLASS = 18,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
625 T_CONFLICT = 19, // for stack value type with conflicting contents
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
626 T_ILLEGAL = 99
0
a61af66fc99e Initial load
duke
parents:
diff changeset
627 };
a61af66fc99e Initial load
duke
parents:
diff changeset
628
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
629 inline bool is_java_primitive(BasicType t) {
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
630 return T_BOOLEAN <= t && t <= T_LONG;
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
631 }
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
632
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
633 inline bool is_subword_type(BasicType t) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
634 // these guys are processed exactly like T_INT in calling sequences:
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
635 return (t == T_BOOLEAN || t == T_CHAR || t == T_BYTE || t == T_SHORT);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
636 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
637
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
638 inline bool is_signed_subword_type(BasicType t) {
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
639 return (t == T_BYTE || t == T_SHORT);
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
640 }
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 605
diff changeset
641
0
a61af66fc99e Initial load
duke
parents:
diff changeset
642 // Convert a char from a classfile signature to a BasicType
a61af66fc99e Initial load
duke
parents:
diff changeset
643 inline BasicType char2type(char c) {
a61af66fc99e Initial load
duke
parents:
diff changeset
644 switch( c ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
645 case 'B': return T_BYTE;
a61af66fc99e Initial load
duke
parents:
diff changeset
646 case 'C': return T_CHAR;
a61af66fc99e Initial load
duke
parents:
diff changeset
647 case 'D': return T_DOUBLE;
a61af66fc99e Initial load
duke
parents:
diff changeset
648 case 'F': return T_FLOAT;
a61af66fc99e Initial load
duke
parents:
diff changeset
649 case 'I': return T_INT;
a61af66fc99e Initial load
duke
parents:
diff changeset
650 case 'J': return T_LONG;
a61af66fc99e Initial load
duke
parents:
diff changeset
651 case 'S': return T_SHORT;
a61af66fc99e Initial load
duke
parents:
diff changeset
652 case 'Z': return T_BOOLEAN;
a61af66fc99e Initial load
duke
parents:
diff changeset
653 case 'V': return T_VOID;
a61af66fc99e Initial load
duke
parents:
diff changeset
654 case 'L': return T_OBJECT;
a61af66fc99e Initial load
duke
parents:
diff changeset
655 case '[': return T_ARRAY;
a61af66fc99e Initial load
duke
parents:
diff changeset
656 }
a61af66fc99e Initial load
duke
parents:
diff changeset
657 return T_ILLEGAL;
a61af66fc99e Initial load
duke
parents:
diff changeset
658 }
a61af66fc99e Initial load
duke
parents:
diff changeset
659
a61af66fc99e Initial load
duke
parents:
diff changeset
660 extern char type2char_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
a61af66fc99e Initial load
duke
parents:
diff changeset
661 inline char type2char(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2char_tab[t] : 0; }
a61af66fc99e Initial load
duke
parents:
diff changeset
662 extern int type2size[T_CONFLICT+1]; // Map BasicType to result stack elements
a61af66fc99e Initial load
duke
parents:
diff changeset
663 extern const char* type2name_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
a61af66fc99e Initial load
duke
parents:
diff changeset
664 inline const char* type2name(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2name_tab[t] : NULL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
665 extern BasicType name2type(const char* name);
a61af66fc99e Initial load
duke
parents:
diff changeset
666
a61af66fc99e Initial load
duke
parents:
diff changeset
667 // Auxilary math routines
a61af66fc99e Initial load
duke
parents:
diff changeset
668 // least common multiple
a61af66fc99e Initial load
duke
parents:
diff changeset
669 extern size_t lcm(size_t a, size_t b);
a61af66fc99e Initial load
duke
parents:
diff changeset
670
a61af66fc99e Initial load
duke
parents:
diff changeset
671
a61af66fc99e Initial load
duke
parents:
diff changeset
672 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
a61af66fc99e Initial load
duke
parents:
diff changeset
673 enum BasicTypeSize {
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
674 T_BOOLEAN_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
675 T_CHAR_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
676 T_FLOAT_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
677 T_DOUBLE_size = 2,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
678 T_BYTE_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
679 T_SHORT_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
680 T_INT_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
681 T_LONG_size = 2,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
682 T_OBJECT_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
683 T_ARRAY_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
684 T_NARROWOOP_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
685 T_NARROWKLASS_size = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
686 T_VOID_size = 0
0
a61af66fc99e Initial load
duke
parents:
diff changeset
687 };
a61af66fc99e Initial load
duke
parents:
diff changeset
688
a61af66fc99e Initial load
duke
parents:
diff changeset
689
a61af66fc99e Initial load
duke
parents:
diff changeset
690 // maps a BasicType to its instance field storage type:
a61af66fc99e Initial load
duke
parents:
diff changeset
691 // all sub-word integral types are widened to T_INT
a61af66fc99e Initial load
duke
parents:
diff changeset
692 extern BasicType type2field[T_CONFLICT+1];
a61af66fc99e Initial load
duke
parents:
diff changeset
693 extern BasicType type2wfield[T_CONFLICT+1];
a61af66fc99e Initial load
duke
parents:
diff changeset
694
a61af66fc99e Initial load
duke
parents:
diff changeset
695
a61af66fc99e Initial load
duke
parents:
diff changeset
696 // size in bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
697 enum ArrayElementSize {
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
698 T_BOOLEAN_aelem_bytes = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
699 T_CHAR_aelem_bytes = 2,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
700 T_FLOAT_aelem_bytes = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
701 T_DOUBLE_aelem_bytes = 8,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
702 T_BYTE_aelem_bytes = 1,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
703 T_SHORT_aelem_bytes = 2,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
704 T_INT_aelem_bytes = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
705 T_LONG_aelem_bytes = 8,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
706 #ifdef _LP64
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
707 T_OBJECT_aelem_bytes = 8,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
708 T_ARRAY_aelem_bytes = 8,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
709 #else
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
710 T_OBJECT_aelem_bytes = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
711 T_ARRAY_aelem_bytes = 4,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
712 #endif
6848
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
713 T_NARROWOOP_aelem_bytes = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
714 T_NARROWKLASS_aelem_bytes = 4,
8e47bac5643a 7054512: Compress class pointers after perm gen removal
roland
parents: 6725
diff changeset
715 T_VOID_aelem_bytes = 0
0
a61af66fc99e Initial load
duke
parents:
diff changeset
716 };
a61af66fc99e Initial load
duke
parents:
diff changeset
717
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
718 extern int _type2aelembytes[T_CONFLICT+1]; // maps a BasicType to nof bytes used by its array element
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
719 #ifdef ASSERT
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
720 extern int type2aelembytes(BasicType t, bool allow_address = false); // asserts
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
721 #else
1763
d6f45b55c972 4809552: Optimize Arrays.fill(...)
never
parents: 1665
diff changeset
722 inline int type2aelembytes(BasicType t, bool allow_address = false) { return _type2aelembytes[t]; }
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
723 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
724
a61af66fc99e Initial load
duke
parents:
diff changeset
725
a61af66fc99e Initial load
duke
parents:
diff changeset
726 // JavaValue serves as a container for arbitrary Java values.
a61af66fc99e Initial load
duke
parents:
diff changeset
727
a61af66fc99e Initial load
duke
parents:
diff changeset
728 class JavaValue {
a61af66fc99e Initial load
duke
parents:
diff changeset
729
a61af66fc99e Initial load
duke
parents:
diff changeset
730 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
731 typedef union JavaCallValue {
a61af66fc99e Initial load
duke
parents:
diff changeset
732 jfloat f;
a61af66fc99e Initial load
duke
parents:
diff changeset
733 jdouble d;
a61af66fc99e Initial load
duke
parents:
diff changeset
734 jint i;
a61af66fc99e Initial load
duke
parents:
diff changeset
735 jlong l;
a61af66fc99e Initial load
duke
parents:
diff changeset
736 jobject h;
a61af66fc99e Initial load
duke
parents:
diff changeset
737 } JavaCallValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
738
a61af66fc99e Initial load
duke
parents:
diff changeset
739 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
740 BasicType _type;
a61af66fc99e Initial load
duke
parents:
diff changeset
741 JavaCallValue _value;
a61af66fc99e Initial load
duke
parents:
diff changeset
742
a61af66fc99e Initial load
duke
parents:
diff changeset
743 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
744 JavaValue(BasicType t = T_ILLEGAL) { _type = t; }
a61af66fc99e Initial load
duke
parents:
diff changeset
745
a61af66fc99e Initial load
duke
parents:
diff changeset
746 JavaValue(jfloat value) {
a61af66fc99e Initial load
duke
parents:
diff changeset
747 _type = T_FLOAT;
a61af66fc99e Initial load
duke
parents:
diff changeset
748 _value.f = value;
a61af66fc99e Initial load
duke
parents:
diff changeset
749 }
a61af66fc99e Initial load
duke
parents:
diff changeset
750
a61af66fc99e Initial load
duke
parents:
diff changeset
751 JavaValue(jdouble value) {
a61af66fc99e Initial load
duke
parents:
diff changeset
752 _type = T_DOUBLE;
a61af66fc99e Initial load
duke
parents:
diff changeset
753 _value.d = value;
a61af66fc99e Initial load
duke
parents:
diff changeset
754 }
a61af66fc99e Initial load
duke
parents:
diff changeset
755
a61af66fc99e Initial load
duke
parents:
diff changeset
756 jfloat get_jfloat() const { return _value.f; }
a61af66fc99e Initial load
duke
parents:
diff changeset
757 jdouble get_jdouble() const { return _value.d; }
a61af66fc99e Initial load
duke
parents:
diff changeset
758 jint get_jint() const { return _value.i; }
a61af66fc99e Initial load
duke
parents:
diff changeset
759 jlong get_jlong() const { return _value.l; }
a61af66fc99e Initial load
duke
parents:
diff changeset
760 jobject get_jobject() const { return _value.h; }
a61af66fc99e Initial load
duke
parents:
diff changeset
761 JavaCallValue* get_value_addr() { return &_value; }
a61af66fc99e Initial load
duke
parents:
diff changeset
762 BasicType get_type() const { return _type; }
a61af66fc99e Initial load
duke
parents:
diff changeset
763
a61af66fc99e Initial load
duke
parents:
diff changeset
764 void set_jfloat(jfloat f) { _value.f = f;}
a61af66fc99e Initial load
duke
parents:
diff changeset
765 void set_jdouble(jdouble d) { _value.d = d;}
a61af66fc99e Initial load
duke
parents:
diff changeset
766 void set_jint(jint i) { _value.i = i;}
a61af66fc99e Initial load
duke
parents:
diff changeset
767 void set_jlong(jlong l) { _value.l = l;}
a61af66fc99e Initial load
duke
parents:
diff changeset
768 void set_jobject(jobject h) { _value.h = h;}
a61af66fc99e Initial load
duke
parents:
diff changeset
769 void set_type(BasicType t) { _type = t; }
a61af66fc99e Initial load
duke
parents:
diff changeset
770
a61af66fc99e Initial load
duke
parents:
diff changeset
771 jboolean get_jboolean() const { return (jboolean) (_value.i);}
a61af66fc99e Initial load
duke
parents:
diff changeset
772 jbyte get_jbyte() const { return (jbyte) (_value.i);}
a61af66fc99e Initial load
duke
parents:
diff changeset
773 jchar get_jchar() const { return (jchar) (_value.i);}
a61af66fc99e Initial load
duke
parents:
diff changeset
774 jshort get_jshort() const { return (jshort) (_value.i);}
a61af66fc99e Initial load
duke
parents:
diff changeset
775
a61af66fc99e Initial load
duke
parents:
diff changeset
776 };
a61af66fc99e Initial load
duke
parents:
diff changeset
777
a61af66fc99e Initial load
duke
parents:
diff changeset
778
a61af66fc99e Initial load
duke
parents:
diff changeset
779 #define STACK_BIAS 0
a61af66fc99e Initial load
duke
parents:
diff changeset
780 // V9 Sparc CPU's running in 64 Bit mode use a stack bias of 7ff
a61af66fc99e Initial load
duke
parents:
diff changeset
781 // in order to extend the reach of the stack pointer.
a61af66fc99e Initial load
duke
parents:
diff changeset
782 #if defined(SPARC) && defined(_LP64)
a61af66fc99e Initial load
duke
parents:
diff changeset
783 #undef STACK_BIAS
a61af66fc99e Initial load
duke
parents:
diff changeset
784 #define STACK_BIAS 0x7ff
a61af66fc99e Initial load
duke
parents:
diff changeset
785 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
786
a61af66fc99e Initial load
duke
parents:
diff changeset
787
a61af66fc99e Initial load
duke
parents:
diff changeset
788 // TosState describes the top-of-stack state before and after the execution of
a61af66fc99e Initial load
duke
parents:
diff changeset
789 // a bytecode or method. The top-of-stack value may be cached in one or more CPU
a61af66fc99e Initial load
duke
parents:
diff changeset
790 // registers. The TosState corresponds to the 'machine represention' of this cached
a61af66fc99e Initial load
duke
parents:
diff changeset
791 // value. There's 4 states corresponding to the JAVA types int, long, float & double
a61af66fc99e Initial load
duke
parents:
diff changeset
792 // as well as a 5th state in case the top-of-stack value is actually on the top
a61af66fc99e Initial load
duke
parents:
diff changeset
793 // of stack (in memory) and thus not cached. The atos state corresponds to the itos
a61af66fc99e Initial load
duke
parents:
diff changeset
794 // state when it comes to machine representation but is used separately for (oop)
a61af66fc99e Initial load
duke
parents:
diff changeset
795 // type specific operations (e.g. verification code).
a61af66fc99e Initial load
duke
parents:
diff changeset
796
a61af66fc99e Initial load
duke
parents:
diff changeset
797 enum TosState { // describes the tos cache contents
a61af66fc99e Initial load
duke
parents:
diff changeset
798 btos = 0, // byte, bool tos cached
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
799 ctos = 1, // char tos cached
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
800 stos = 2, // short tos cached
0
a61af66fc99e Initial load
duke
parents:
diff changeset
801 itos = 3, // int tos cached
a61af66fc99e Initial load
duke
parents:
diff changeset
802 ltos = 4, // long tos cached
a61af66fc99e Initial load
duke
parents:
diff changeset
803 ftos = 5, // float tos cached
a61af66fc99e Initial load
duke
parents:
diff changeset
804 dtos = 6, // double tos cached
a61af66fc99e Initial load
duke
parents:
diff changeset
805 atos = 7, // object cached
a61af66fc99e Initial load
duke
parents:
diff changeset
806 vtos = 8, // tos not cached
a61af66fc99e Initial load
duke
parents:
diff changeset
807 number_of_states,
a61af66fc99e Initial load
duke
parents:
diff changeset
808 ilgl // illegal state: should not occur
a61af66fc99e Initial load
duke
parents:
diff changeset
809 };
a61af66fc99e Initial load
duke
parents:
diff changeset
810
a61af66fc99e Initial load
duke
parents:
diff changeset
811
a61af66fc99e Initial load
duke
parents:
diff changeset
812 inline TosState as_TosState(BasicType type) {
a61af66fc99e Initial load
duke
parents:
diff changeset
813 switch (type) {
a61af66fc99e Initial load
duke
parents:
diff changeset
814 case T_BYTE : return btos;
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
815 case T_BOOLEAN: return btos; // FIXME: Add ztos
0
a61af66fc99e Initial load
duke
parents:
diff changeset
816 case T_CHAR : return ctos;
a61af66fc99e Initial load
duke
parents:
diff changeset
817 case T_SHORT : return stos;
a61af66fc99e Initial load
duke
parents:
diff changeset
818 case T_INT : return itos;
a61af66fc99e Initial load
duke
parents:
diff changeset
819 case T_LONG : return ltos;
a61af66fc99e Initial load
duke
parents:
diff changeset
820 case T_FLOAT : return ftos;
a61af66fc99e Initial load
duke
parents:
diff changeset
821 case T_DOUBLE : return dtos;
a61af66fc99e Initial load
duke
parents:
diff changeset
822 case T_VOID : return vtos;
a61af66fc99e Initial load
duke
parents:
diff changeset
823 case T_ARRAY : // fall through
a61af66fc99e Initial load
duke
parents:
diff changeset
824 case T_OBJECT : return atos;
a61af66fc99e Initial load
duke
parents:
diff changeset
825 }
a61af66fc99e Initial load
duke
parents:
diff changeset
826 return ilgl;
a61af66fc99e Initial load
duke
parents:
diff changeset
827 }
a61af66fc99e Initial load
duke
parents:
diff changeset
828
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
829 inline BasicType as_BasicType(TosState state) {
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
830 switch (state) {
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
831 //case ztos: return T_BOOLEAN;//FIXME
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
832 case btos : return T_BYTE;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
833 case ctos : return T_CHAR;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
834 case stos : return T_SHORT;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
835 case itos : return T_INT;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
836 case ltos : return T_LONG;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
837 case ftos : return T_FLOAT;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
838 case dtos : return T_DOUBLE;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
839 case atos : return T_OBJECT;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
840 case vtos : return T_VOID;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
841 }
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
842 return T_ILLEGAL;
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
843 }
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
844
0
a61af66fc99e Initial load
duke
parents:
diff changeset
845
a61af66fc99e Initial load
duke
parents:
diff changeset
846 // Helper function to convert BasicType info into TosState
a61af66fc99e Initial load
duke
parents:
diff changeset
847 // Note: Cannot define here as it uses global constant at the time being.
a61af66fc99e Initial load
duke
parents:
diff changeset
848 TosState as_TosState(BasicType type);
a61af66fc99e Initial load
duke
parents:
diff changeset
849
a61af66fc99e Initial load
duke
parents:
diff changeset
850
a61af66fc99e Initial load
duke
parents:
diff changeset
851 // JavaThreadState keeps track of which part of the code a thread is executing in. This
a61af66fc99e Initial load
duke
parents:
diff changeset
852 // information is needed by the safepoint code.
a61af66fc99e Initial load
duke
parents:
diff changeset
853 //
a61af66fc99e Initial load
duke
parents:
diff changeset
854 // There are 4 essential states:
a61af66fc99e Initial load
duke
parents:
diff changeset
855 //
a61af66fc99e Initial load
duke
parents:
diff changeset
856 // _thread_new : Just started, but not executed init. code yet (most likely still in OS init code)
a61af66fc99e Initial load
duke
parents:
diff changeset
857 // _thread_in_native : In native code. This is a safepoint region, since all oops will be in jobject handles
a61af66fc99e Initial load
duke
parents:
diff changeset
858 // _thread_in_vm : Executing in the vm
a61af66fc99e Initial load
duke
parents:
diff changeset
859 // _thread_in_Java : Executing either interpreted or compiled Java code (or could be in a stub)
a61af66fc99e Initial load
duke
parents:
diff changeset
860 //
a61af66fc99e Initial load
duke
parents:
diff changeset
861 // Each state has an associated xxxx_trans state, which is an intermediate state used when a thread is in
a61af66fc99e Initial load
duke
parents:
diff changeset
862 // a transition from one state to another. These extra states makes it possible for the safepoint code to
a61af66fc99e Initial load
duke
parents:
diff changeset
863 // handle certain thread_states without having to suspend the thread - making the safepoint code faster.
a61af66fc99e Initial load
duke
parents:
diff changeset
864 //
a61af66fc99e Initial load
duke
parents:
diff changeset
865 // Given a state, the xxx_trans state can always be found by adding 1.
a61af66fc99e Initial load
duke
parents:
diff changeset
866 //
a61af66fc99e Initial load
duke
parents:
diff changeset
867 enum JavaThreadState {
a61af66fc99e Initial load
duke
parents:
diff changeset
868 _thread_uninitialized = 0, // should never happen (missing initialization)
a61af66fc99e Initial load
duke
parents:
diff changeset
869 _thread_new = 2, // just starting up, i.e., in process of being initialized
a61af66fc99e Initial load
duke
parents:
diff changeset
870 _thread_new_trans = 3, // corresponding transition state (not used, included for completness)
a61af66fc99e Initial load
duke
parents:
diff changeset
871 _thread_in_native = 4, // running in native code
a61af66fc99e Initial load
duke
parents:
diff changeset
872 _thread_in_native_trans = 5, // corresponding transition state
a61af66fc99e Initial load
duke
parents:
diff changeset
873 _thread_in_vm = 6, // running in VM
a61af66fc99e Initial load
duke
parents:
diff changeset
874 _thread_in_vm_trans = 7, // corresponding transition state
a61af66fc99e Initial load
duke
parents:
diff changeset
875 _thread_in_Java = 8, // running in Java or in stub code
a61af66fc99e Initial load
duke
parents:
diff changeset
876 _thread_in_Java_trans = 9, // corresponding transition state (not used, included for completness)
a61af66fc99e Initial load
duke
parents:
diff changeset
877 _thread_blocked = 10, // blocked in vm
a61af66fc99e Initial load
duke
parents:
diff changeset
878 _thread_blocked_trans = 11, // corresponding transition state
a61af66fc99e Initial load
duke
parents:
diff changeset
879 _thread_max_state = 12 // maximum thread state+1 - used for statistics allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
880 };
a61af66fc99e Initial load
duke
parents:
diff changeset
881
a61af66fc99e Initial load
duke
parents:
diff changeset
882
a61af66fc99e Initial load
duke
parents:
diff changeset
883 // Handy constants for deciding which compiler mode to use.
a61af66fc99e Initial load
duke
parents:
diff changeset
884 enum MethodCompilation {
a61af66fc99e Initial load
duke
parents:
diff changeset
885 InvocationEntryBci = -1, // i.e., not a on-stack replacement compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
886 InvalidOSREntryBci = -2
a61af66fc99e Initial load
duke
parents:
diff changeset
887 };
a61af66fc99e Initial load
duke
parents:
diff changeset
888
a61af66fc99e Initial load
duke
parents:
diff changeset
889 // Enumeration to distinguish tiers of compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
890 enum CompLevel {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
891 CompLevel_any = -1,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
892 CompLevel_all = -1,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
893 CompLevel_none = 0, // Interpreter
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
894 CompLevel_simple = 1, // C1
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
895 CompLevel_limited_profile = 2, // C1, invocation & backedge counters
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
896 CompLevel_full_profile = 3, // C1, invocation & backedge counters + mdo
2447
e863062e521d 7032458: Zero and Shark fixes
twisti
parents: 2361
diff changeset
897 CompLevel_full_optimization = 4, // C2 or Shark
0
a61af66fc99e Initial load
duke
parents:
diff changeset
898
2447
e863062e521d 7032458: Zero and Shark fixes
twisti
parents: 2361
diff changeset
899 #if defined(COMPILER2) || defined(SHARK)
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
900 CompLevel_highest_tier = CompLevel_full_optimization, // pure C2 and tiered
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
901 #elif defined(COMPILER1)
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
902 CompLevel_highest_tier = CompLevel_simple, // pure C1
0
a61af66fc99e Initial load
duke
parents:
diff changeset
903 #else
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
904 CompLevel_highest_tier = CompLevel_none,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
905 #endif
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
906
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
907 #if defined(TIERED)
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
908 CompLevel_initial_compile = CompLevel_full_profile // tiered
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
909 #elif defined(COMPILER1)
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
910 CompLevel_initial_compile = CompLevel_simple // pure C1
2447
e863062e521d 7032458: Zero and Shark fixes
twisti
parents: 2361
diff changeset
911 #elif defined(COMPILER2) || defined(SHARK)
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
912 CompLevel_initial_compile = CompLevel_full_optimization // pure C2
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
913 #else
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
914 CompLevel_initial_compile = CompLevel_none
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
915 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
916 };
a61af66fc99e Initial load
duke
parents:
diff changeset
917
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
918 inline bool is_c1_compile(int comp_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
919 return comp_level > CompLevel_none && comp_level < CompLevel_full_optimization;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
920 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
921
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
922 inline bool is_c2_compile(int comp_level) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
923 return comp_level == CompLevel_full_optimization;
a61af66fc99e Initial load
duke
parents:
diff changeset
924 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1763
diff changeset
925
0
a61af66fc99e Initial load
duke
parents:
diff changeset
926 inline bool is_highest_tier_compile(int comp_level) {
a61af66fc99e Initial load
duke
parents:
diff changeset
927 return comp_level == CompLevel_highest_tier;
a61af66fc99e Initial load
duke
parents:
diff changeset
928 }
a61af66fc99e Initial load
duke
parents:
diff changeset
929
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 7623
diff changeset
930 inline bool is_compile(int comp_level) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 7623
diff changeset
931 return is_c1_compile(comp_level) || is_c2_compile(comp_level);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 7623
diff changeset
932 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 7623
diff changeset
933
0
a61af66fc99e Initial load
duke
parents:
diff changeset
934 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
935 // 'Forward' declarations of frequently used classes
a61af66fc99e Initial load
duke
parents:
diff changeset
936 // (in order to reduce interface dependencies & reduce
a61af66fc99e Initial load
duke
parents:
diff changeset
937 // number of unnecessary compilations after changes)
a61af66fc99e Initial load
duke
parents:
diff changeset
938
a61af66fc99e Initial load
duke
parents:
diff changeset
939 class symbolTable;
a61af66fc99e Initial load
duke
parents:
diff changeset
940 class ClassFileStream;
a61af66fc99e Initial load
duke
parents:
diff changeset
941
a61af66fc99e Initial load
duke
parents:
diff changeset
942 class Event;
a61af66fc99e Initial load
duke
parents:
diff changeset
943
a61af66fc99e Initial load
duke
parents:
diff changeset
944 class Thread;
a61af66fc99e Initial load
duke
parents:
diff changeset
945 class VMThread;
a61af66fc99e Initial load
duke
parents:
diff changeset
946 class JavaThread;
a61af66fc99e Initial load
duke
parents:
diff changeset
947 class Threads;
a61af66fc99e Initial load
duke
parents:
diff changeset
948
a61af66fc99e Initial load
duke
parents:
diff changeset
949 class VM_Operation;
a61af66fc99e Initial load
duke
parents:
diff changeset
950 class VMOperationQueue;
a61af66fc99e Initial load
duke
parents:
diff changeset
951
a61af66fc99e Initial load
duke
parents:
diff changeset
952 class CodeBlob;
a61af66fc99e Initial load
duke
parents:
diff changeset
953 class nmethod;
a61af66fc99e Initial load
duke
parents:
diff changeset
954 class OSRAdapter;
a61af66fc99e Initial load
duke
parents:
diff changeset
955 class I2CAdapter;
a61af66fc99e Initial load
duke
parents:
diff changeset
956 class C2IAdapter;
a61af66fc99e Initial load
duke
parents:
diff changeset
957 class CompiledIC;
a61af66fc99e Initial load
duke
parents:
diff changeset
958 class relocInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
959 class ScopeDesc;
a61af66fc99e Initial load
duke
parents:
diff changeset
960 class PcDesc;
a61af66fc99e Initial load
duke
parents:
diff changeset
961
a61af66fc99e Initial load
duke
parents:
diff changeset
962 class Recompiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
963 class Recompilee;
a61af66fc99e Initial load
duke
parents:
diff changeset
964 class RecompilationPolicy;
a61af66fc99e Initial load
duke
parents:
diff changeset
965 class RFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
966 class CompiledRFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
967 class InterpretedRFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
968
a61af66fc99e Initial load
duke
parents:
diff changeset
969 class frame;
a61af66fc99e Initial load
duke
parents:
diff changeset
970
a61af66fc99e Initial load
duke
parents:
diff changeset
971 class vframe;
a61af66fc99e Initial load
duke
parents:
diff changeset
972 class javaVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
973 class interpretedVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
974 class compiledVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
975 class deoptimizedVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
976 class externalVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
977 class entryVFrame;
a61af66fc99e Initial load
duke
parents:
diff changeset
978
a61af66fc99e Initial load
duke
parents:
diff changeset
979 class RegisterMap;
a61af66fc99e Initial load
duke
parents:
diff changeset
980
a61af66fc99e Initial load
duke
parents:
diff changeset
981 class Mutex;
a61af66fc99e Initial load
duke
parents:
diff changeset
982 class Monitor;
a61af66fc99e Initial load
duke
parents:
diff changeset
983 class BasicLock;
a61af66fc99e Initial load
duke
parents:
diff changeset
984 class BasicObjectLock;
a61af66fc99e Initial load
duke
parents:
diff changeset
985
a61af66fc99e Initial load
duke
parents:
diff changeset
986 class PeriodicTask;
a61af66fc99e Initial load
duke
parents:
diff changeset
987
a61af66fc99e Initial load
duke
parents:
diff changeset
988 class JavaCallWrapper;
a61af66fc99e Initial load
duke
parents:
diff changeset
989
a61af66fc99e Initial load
duke
parents:
diff changeset
990 class oopDesc;
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
991 class metaDataOopDesc;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
992
a61af66fc99e Initial load
duke
parents:
diff changeset
993 class NativeCall;
a61af66fc99e Initial load
duke
parents:
diff changeset
994
a61af66fc99e Initial load
duke
parents:
diff changeset
995 class zone;
a61af66fc99e Initial load
duke
parents:
diff changeset
996
a61af66fc99e Initial load
duke
parents:
diff changeset
997 class StubQueue;
a61af66fc99e Initial load
duke
parents:
diff changeset
998
a61af66fc99e Initial load
duke
parents:
diff changeset
999 class outputStream;
a61af66fc99e Initial load
duke
parents:
diff changeset
1000
a61af66fc99e Initial load
duke
parents:
diff changeset
1001 class ResourceArea;
a61af66fc99e Initial load
duke
parents:
diff changeset
1002
a61af66fc99e Initial load
duke
parents:
diff changeset
1003 class DebugInformationRecorder;
a61af66fc99e Initial load
duke
parents:
diff changeset
1004 class ScopeValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
1005 class CompressedStream;
a61af66fc99e Initial load
duke
parents:
diff changeset
1006 class DebugInfoReadStream;
a61af66fc99e Initial load
duke
parents:
diff changeset
1007 class DebugInfoWriteStream;
a61af66fc99e Initial load
duke
parents:
diff changeset
1008 class LocationValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
1009 class ConstantValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
1010 class IllegalValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
1011
a61af66fc99e Initial load
duke
parents:
diff changeset
1012 class PrivilegedElement;
a61af66fc99e Initial load
duke
parents:
diff changeset
1013 class MonitorArray;
a61af66fc99e Initial load
duke
parents:
diff changeset
1014
a61af66fc99e Initial load
duke
parents:
diff changeset
1015 class MonitorInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
1016
a61af66fc99e Initial load
duke
parents:
diff changeset
1017 class OffsetClosure;
a61af66fc99e Initial load
duke
parents:
diff changeset
1018 class OopMapCache;
a61af66fc99e Initial load
duke
parents:
diff changeset
1019 class InterpreterOopMap;
a61af66fc99e Initial load
duke
parents:
diff changeset
1020 class OopMapCacheEntry;
a61af66fc99e Initial load
duke
parents:
diff changeset
1021 class OSThread;
a61af66fc99e Initial load
duke
parents:
diff changeset
1022
a61af66fc99e Initial load
duke
parents:
diff changeset
1023 typedef int (*OSThreadStartFunc)(void*);
a61af66fc99e Initial load
duke
parents:
diff changeset
1024
a61af66fc99e Initial load
duke
parents:
diff changeset
1025 class Space;
a61af66fc99e Initial load
duke
parents:
diff changeset
1026
a61af66fc99e Initial load
duke
parents:
diff changeset
1027 class JavaValue;
a61af66fc99e Initial load
duke
parents:
diff changeset
1028 class methodHandle;
a61af66fc99e Initial load
duke
parents:
diff changeset
1029 class JavaCallArguments;
a61af66fc99e Initial load
duke
parents:
diff changeset
1030
a61af66fc99e Initial load
duke
parents:
diff changeset
1031 // Basic support for errors (general debug facilities not defined at this point fo the include phase)
a61af66fc99e Initial load
duke
parents:
diff changeset
1032
a61af66fc99e Initial load
duke
parents:
diff changeset
1033 extern void basic_fatal(const char* msg);
a61af66fc99e Initial load
duke
parents:
diff changeset
1034
a61af66fc99e Initial load
duke
parents:
diff changeset
1035
a61af66fc99e Initial load
duke
parents:
diff changeset
1036 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1037 // Special constants for debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
1038
a61af66fc99e Initial load
duke
parents:
diff changeset
1039 const jint badInt = -3; // generic "bad int" value
a61af66fc99e Initial load
duke
parents:
diff changeset
1040 const long badAddressVal = -2; // generic "bad address" value
a61af66fc99e Initial load
duke
parents:
diff changeset
1041 const long badOopVal = -1; // generic "bad oop" value
a61af66fc99e Initial load
duke
parents:
diff changeset
1042 const intptr_t badHeapOopVal = (intptr_t) CONST64(0x2BAD4B0BBAADBABE); // value used to zap heap after GC
a61af66fc99e Initial load
duke
parents:
diff changeset
1043 const int badHandleValue = 0xBC; // value used to zap vm handle area
a61af66fc99e Initial load
duke
parents:
diff changeset
1044 const int badResourceValue = 0xAB; // value used to zap resource area
a61af66fc99e Initial load
duke
parents:
diff changeset
1045 const int freeBlockPad = 0xBA; // value used to pad freed blocks.
a61af66fc99e Initial load
duke
parents:
diff changeset
1046 const int uninitBlockPad = 0xF1; // value used to zap newly malloc'd blocks.
a61af66fc99e Initial load
duke
parents:
diff changeset
1047 const intptr_t badJNIHandleVal = (intptr_t) CONST64(0xFEFEFEFEFEFEFEFE); // value used to zap jni handle area
a61af66fc99e Initial load
duke
parents:
diff changeset
1048 const juint badHeapWordVal = 0xBAADBABE; // value used to zap heap after GC
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6107
diff changeset
1049 const juint badMetaWordVal = 0xBAADFADE; // value used to zap metadata heap after GC
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1050 const int badCodeHeapNewVal= 0xCC; // value used to zap Code heap at allocation
a61af66fc99e Initial load
duke
parents:
diff changeset
1051 const int badCodeHeapFreeVal = 0xDD; // value used to zap Code heap at deallocation
a61af66fc99e Initial load
duke
parents:
diff changeset
1052
a61af66fc99e Initial load
duke
parents:
diff changeset
1053
a61af66fc99e Initial load
duke
parents:
diff changeset
1054 // (These must be implemented as #defines because C++ compilers are
a61af66fc99e Initial load
duke
parents:
diff changeset
1055 // not obligated to inline non-integral constants!)
a61af66fc99e Initial load
duke
parents:
diff changeset
1056 #define badAddress ((address)::badAddressVal)
12316
190899198332 7195622: CheckUnhandledOops has limited usefulness now
hseigel
parents: 12110
diff changeset
1057 #define badOop (cast_to_oop(::badOopVal))
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1058 #define badHeapWord (::badHeapWordVal)
12316
190899198332 7195622: CheckUnhandledOops has limited usefulness now
hseigel
parents: 12110
diff changeset
1059 #define badJNIHandle (cast_to_oop(::badJNIHandleVal))
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1060
1311
2a1472c30599 4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents: 1261
diff changeset
1061 // Default TaskQueue size is 16K (32-bit) or 128K (64-bit)
2a1472c30599 4396719: Mark Sweep stack overflow on deeply nested Object arrays
jcoomes
parents: 1261
diff changeset
1062 #define TASKQUEUE_SIZE (NOT_LP64(1<<14) LP64_ONLY(1<<17))
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1063
a61af66fc99e Initial load
duke
parents:
diff changeset
1064 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1065 // Utility functions for bitfield manipulations
a61af66fc99e Initial load
duke
parents:
diff changeset
1066
a61af66fc99e Initial load
duke
parents:
diff changeset
1067 const intptr_t AllBits = ~0; // all bits set in a word
a61af66fc99e Initial load
duke
parents:
diff changeset
1068 const intptr_t NoBits = 0; // no bits set in a word
a61af66fc99e Initial load
duke
parents:
diff changeset
1069 const jlong NoLongBits = 0; // no bits set in a long
a61af66fc99e Initial load
duke
parents:
diff changeset
1070 const intptr_t OneBit = 1; // only right_most bit set in a word
a61af66fc99e Initial load
duke
parents:
diff changeset
1071
a61af66fc99e Initial load
duke
parents:
diff changeset
1072 // get a word with the n.th or the right-most or left-most n bits set
a61af66fc99e Initial load
duke
parents:
diff changeset
1073 // (note: #define used only so that they can be used in enum constant definitions)
a61af66fc99e Initial load
duke
parents:
diff changeset
1074 #define nth_bit(n) (n >= BitsPerWord ? 0 : OneBit << (n))
a61af66fc99e Initial load
duke
parents:
diff changeset
1075 #define right_n_bits(n) (nth_bit(n) - 1)
a61af66fc99e Initial load
duke
parents:
diff changeset
1076 #define left_n_bits(n) (right_n_bits(n) << (n >= BitsPerWord ? 0 : (BitsPerWord - n)))
a61af66fc99e Initial load
duke
parents:
diff changeset
1077
a61af66fc99e Initial load
duke
parents:
diff changeset
1078 // bit-operations using a mask m
a61af66fc99e Initial load
duke
parents:
diff changeset
1079 inline void set_bits (intptr_t& x, intptr_t m) { x |= m; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1080 inline void clear_bits (intptr_t& x, intptr_t m) { x &= ~m; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1081 inline intptr_t mask_bits (intptr_t x, intptr_t m) { return x & m; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1082 inline jlong mask_long_bits (jlong x, jlong m) { return x & m; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1083 inline bool mask_bits_are_true (intptr_t flags, intptr_t mask) { return (flags & mask) == mask; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1084
a61af66fc99e Initial load
duke
parents:
diff changeset
1085 // bit-operations using the n.th bit
a61af66fc99e Initial load
duke
parents:
diff changeset
1086 inline void set_nth_bit(intptr_t& x, int n) { set_bits (x, nth_bit(n)); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1087 inline void clear_nth_bit(intptr_t& x, int n) { clear_bits(x, nth_bit(n)); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1088 inline bool is_set_nth_bit(intptr_t x, int n) { return mask_bits (x, nth_bit(n)) != NoBits; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1089
a61af66fc99e Initial load
duke
parents:
diff changeset
1090 // returns the bitfield of x starting at start_bit_no with length field_length (no sign-extension!)
a61af66fc99e Initial load
duke
parents:
diff changeset
1091 inline intptr_t bitfield(intptr_t x, int start_bit_no, int field_length) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1092 return mask_bits(x >> start_bit_no, right_n_bits(field_length));
a61af66fc99e Initial load
duke
parents:
diff changeset
1093 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1094
a61af66fc99e Initial load
duke
parents:
diff changeset
1095
a61af66fc99e Initial load
duke
parents:
diff changeset
1096 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1097 // Utility functions for integers
a61af66fc99e Initial load
duke
parents:
diff changeset
1098
a61af66fc99e Initial load
duke
parents:
diff changeset
1099 // Avoid use of global min/max macros which may cause unwanted double
a61af66fc99e Initial load
duke
parents:
diff changeset
1100 // evaluation of arguments.
a61af66fc99e Initial load
duke
parents:
diff changeset
1101 #ifdef max
a61af66fc99e Initial load
duke
parents:
diff changeset
1102 #undef max
a61af66fc99e Initial load
duke
parents:
diff changeset
1103 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
1104
a61af66fc99e Initial load
duke
parents:
diff changeset
1105 #ifdef min
a61af66fc99e Initial load
duke
parents:
diff changeset
1106 #undef min
a61af66fc99e Initial load
duke
parents:
diff changeset
1107 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
1108
a61af66fc99e Initial load
duke
parents:
diff changeset
1109 #define max(a,b) Do_not_use_max_use_MAX2_instead
a61af66fc99e Initial load
duke
parents:
diff changeset
1110 #define min(a,b) Do_not_use_min_use_MIN2_instead
a61af66fc99e Initial load
duke
parents:
diff changeset
1111
a61af66fc99e Initial load
duke
parents:
diff changeset
1112 // It is necessary to use templates here. Having normal overloaded
a61af66fc99e Initial load
duke
parents:
diff changeset
1113 // functions does not work because it is necessary to provide both 32-
a61af66fc99e Initial load
duke
parents:
diff changeset
1114 // and 64-bit overloaded functions, which does not work, and having
a61af66fc99e Initial load
duke
parents:
diff changeset
1115 // explicitly-typed versions of these routines (i.e., MAX2I, MAX2L)
a61af66fc99e Initial load
duke
parents:
diff changeset
1116 // will be even more error-prone than macros.
a61af66fc99e Initial load
duke
parents:
diff changeset
1117 template<class T> inline T MAX2(T a, T b) { return (a > b) ? a : b; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1118 template<class T> inline T MIN2(T a, T b) { return (a < b) ? a : b; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1119 template<class T> inline T MAX3(T a, T b, T c) { return MAX2(MAX2(a, b), c); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1120 template<class T> inline T MIN3(T a, T b, T c) { return MIN2(MIN2(a, b), c); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1121 template<class T> inline T MAX4(T a, T b, T c, T d) { return MAX2(MAX3(a, b, c), d); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1122 template<class T> inline T MIN4(T a, T b, T c, T d) { return MIN2(MIN3(a, b, c), d); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1123
a61af66fc99e Initial load
duke
parents:
diff changeset
1124 template<class T> inline T ABS(T x) { return (x > 0) ? x : -x; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1125
a61af66fc99e Initial load
duke
parents:
diff changeset
1126 // true if x is a power of 2, false otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
1127 inline bool is_power_of_2(intptr_t x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1128 return ((x != NoBits) && (mask_bits(x, x - 1) == NoBits));
a61af66fc99e Initial load
duke
parents:
diff changeset
1129 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1130
a61af66fc99e Initial load
duke
parents:
diff changeset
1131 // long version of is_power_of_2
a61af66fc99e Initial load
duke
parents:
diff changeset
1132 inline bool is_power_of_2_long(jlong x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1133 return ((x != NoLongBits) && (mask_long_bits(x, x - 1) == NoLongBits));
a61af66fc99e Initial load
duke
parents:
diff changeset
1134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1135
a61af66fc99e Initial load
duke
parents:
diff changeset
1136 //* largest i such that 2^i <= x
a61af66fc99e Initial load
duke
parents:
diff changeset
1137 // A negative value of 'x' will return '31'
a61af66fc99e Initial load
duke
parents:
diff changeset
1138 inline int log2_intptr(intptr_t x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1139 int i = -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1140 uintptr_t p = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1141 while (p != 0 && p <= (uintptr_t)x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1142 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
a61af66fc99e Initial load
duke
parents:
diff changeset
1143 i++; p *= 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
1144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1145 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
605
98cb887364d3 6810672: Comment typos
twisti
parents: 570
diff changeset
1146 // (if p = 0 then overflow occurred and i = 31)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1147 return i;
a61af66fc99e Initial load
duke
parents:
diff changeset
1148 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1149
a61af66fc99e Initial load
duke
parents:
diff changeset
1150 //* largest i such that 2^i <= x
a61af66fc99e Initial load
duke
parents:
diff changeset
1151 // A negative value of 'x' will return '63'
a61af66fc99e Initial load
duke
parents:
diff changeset
1152 inline int log2_long(jlong x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1153 int i = -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1154 julong p = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1155 while (p != 0 && p <= (julong)x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1156 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
a61af66fc99e Initial load
duke
parents:
diff changeset
1157 i++; p *= 2;
a61af66fc99e Initial load
duke
parents:
diff changeset
1158 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1159 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
605
98cb887364d3 6810672: Comment typos
twisti
parents: 570
diff changeset
1160 // (if p = 0 then overflow occurred and i = 63)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1161 return i;
a61af66fc99e Initial load
duke
parents:
diff changeset
1162 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1163
a61af66fc99e Initial load
duke
parents:
diff changeset
1164 //* the argument must be exactly a power of 2
a61af66fc99e Initial load
duke
parents:
diff changeset
1165 inline int exact_log2(intptr_t x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1166 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
1167 if (!is_power_of_2(x)) basic_fatal("x must be a power of 2");
a61af66fc99e Initial load
duke
parents:
diff changeset
1168 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
1169 return log2_intptr(x);
a61af66fc99e Initial load
duke
parents:
diff changeset
1170 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1171
568
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1172 //* the argument must be exactly a power of 2
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1173 inline int exact_log2_long(jlong x) {
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1174 #ifdef ASSERT
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1175 if (!is_power_of_2_long(x)) basic_fatal("x must be a power of 2");
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1176 #endif
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1177 return log2_long(x);
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1178 }
30663ca5e8f4 6805724: ModLNode::Ideal() generates functionally incorrect graph when divisor is any (2^k-1) constant.
twisti
parents: 559
diff changeset
1179
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1180
a61af66fc99e Initial load
duke
parents:
diff changeset
1181 // returns integer round-up to the nearest multiple of s (s must be a power of two)
a61af66fc99e Initial load
duke
parents:
diff changeset
1182 inline intptr_t round_to(intptr_t x, uintx s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1183 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
1184 if (!is_power_of_2(s)) basic_fatal("s must be a power of 2");
a61af66fc99e Initial load
duke
parents:
diff changeset
1185 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
1186 const uintx m = s - 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1187 return mask_bits(x + m, ~m);
a61af66fc99e Initial load
duke
parents:
diff changeset
1188 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1189
a61af66fc99e Initial load
duke
parents:
diff changeset
1190 // returns integer round-down to the nearest multiple of s (s must be a power of two)
a61af66fc99e Initial load
duke
parents:
diff changeset
1191 inline intptr_t round_down(intptr_t x, uintx s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1192 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
1193 if (!is_power_of_2(s)) basic_fatal("s must be a power of 2");
a61af66fc99e Initial load
duke
parents:
diff changeset
1194 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
1195 const uintx m = s - 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
1196 return mask_bits(x, ~m);
a61af66fc99e Initial load
duke
parents:
diff changeset
1197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1198
a61af66fc99e Initial load
duke
parents:
diff changeset
1199
a61af66fc99e Initial load
duke
parents:
diff changeset
1200 inline bool is_odd (intx x) { return x & 1; }
a61af66fc99e Initial load
duke
parents:
diff changeset
1201 inline bool is_even(intx x) { return !is_odd(x); }
a61af66fc99e Initial load
duke
parents:
diff changeset
1202
a61af66fc99e Initial load
duke
parents:
diff changeset
1203 // "to" should be greater than "from."
a61af66fc99e Initial load
duke
parents:
diff changeset
1204 inline intx byte_size(void* from, void* to) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1205 return (address)to - (address)from;
a61af66fc99e Initial load
duke
parents:
diff changeset
1206 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1207
a61af66fc99e Initial load
duke
parents:
diff changeset
1208 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1209 // Avoid non-portable casts with these routines (DEPRECATED)
a61af66fc99e Initial load
duke
parents:
diff changeset
1210
a61af66fc99e Initial load
duke
parents:
diff changeset
1211 // NOTE: USE Bytes class INSTEAD WHERE POSSIBLE
a61af66fc99e Initial load
duke
parents:
diff changeset
1212 // Bytes is optimized machine-specifically and may be much faster then the portable routines below.
a61af66fc99e Initial load
duke
parents:
diff changeset
1213
a61af66fc99e Initial load
duke
parents:
diff changeset
1214 // Given sequence of four bytes, build into a 32-bit word
a61af66fc99e Initial load
duke
parents:
diff changeset
1215 // following the conventions used in class files.
a61af66fc99e Initial load
duke
parents:
diff changeset
1216 // On the 386, this could be realized with a simple address cast.
a61af66fc99e Initial load
duke
parents:
diff changeset
1217 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1218
a61af66fc99e Initial load
duke
parents:
diff changeset
1219 // This routine takes eight bytes:
a61af66fc99e Initial load
duke
parents:
diff changeset
1220 inline u8 build_u8_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
1789
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1221 return (( u8(c1) << 56 ) & ( u8(0xff) << 56 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1222 | (( u8(c2) << 48 ) & ( u8(0xff) << 48 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1223 | (( u8(c3) << 40 ) & ( u8(0xff) << 40 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1224 | (( u8(c4) << 32 ) & ( u8(0xff) << 32 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1225 | (( u8(c5) << 24 ) & ( u8(0xff) << 24 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1226 | (( u8(c6) << 16 ) & ( u8(0xff) << 16 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1227 | (( u8(c7) << 8 ) & ( u8(0xff) << 8 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1228 | (( u8(c8) << 0 ) & ( u8(0xff) << 0 ));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1229 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1230
a61af66fc99e Initial load
duke
parents:
diff changeset
1231 // This routine takes four bytes:
a61af66fc99e Initial load
duke
parents:
diff changeset
1232 inline u4 build_u4_from( u1 c1, u1 c2, u1 c3, u1 c4 ) {
1789
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1233 return (( u4(c1) << 24 ) & 0xff000000)
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1234 | (( u4(c2) << 16 ) & 0x00ff0000)
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1235 | (( u4(c3) << 8 ) & 0x0000ff00)
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1236 | (( u4(c4) << 0 ) & 0x000000ff);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1237 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1238
a61af66fc99e Initial load
duke
parents:
diff changeset
1239 // And this one works if the four bytes are contiguous in memory:
a61af66fc99e Initial load
duke
parents:
diff changeset
1240 inline u4 build_u4_from( u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1241 return build_u4_from( p[0], p[1], p[2], p[3] );
a61af66fc99e Initial load
duke
parents:
diff changeset
1242 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1243
a61af66fc99e Initial load
duke
parents:
diff changeset
1244 // Ditto for two-byte ints:
a61af66fc99e Initial load
duke
parents:
diff changeset
1245 inline u2 build_u2_from( u1 c1, u1 c2 ) {
1789
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1246 return u2((( u2(c1) << 8 ) & 0xff00)
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1247 | (( u2(c2) << 0 ) & 0x00ff));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1248 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1249
a61af66fc99e Initial load
duke
parents:
diff changeset
1250 // And this one works if the two bytes are contiguous in memory:
a61af66fc99e Initial load
duke
parents:
diff changeset
1251 inline u2 build_u2_from( u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1252 return build_u2_from( p[0], p[1] );
a61af66fc99e Initial load
duke
parents:
diff changeset
1253 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1254
a61af66fc99e Initial load
duke
parents:
diff changeset
1255 // Ditto for floats:
a61af66fc99e Initial load
duke
parents:
diff changeset
1256 inline jfloat build_float_from( u1 c1, u1 c2, u1 c3, u1 c4 ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1257 u4 u = build_u4_from( c1, c2, c3, c4 );
a61af66fc99e Initial load
duke
parents:
diff changeset
1258 return *(jfloat*)&u;
a61af66fc99e Initial load
duke
parents:
diff changeset
1259 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1260
a61af66fc99e Initial load
duke
parents:
diff changeset
1261 inline jfloat build_float_from( u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1262 u4 u = build_u4_from( p );
a61af66fc99e Initial load
duke
parents:
diff changeset
1263 return *(jfloat*)&u;
a61af66fc99e Initial load
duke
parents:
diff changeset
1264 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1265
a61af66fc99e Initial load
duke
parents:
diff changeset
1266
a61af66fc99e Initial load
duke
parents:
diff changeset
1267 // now (64-bit) longs
a61af66fc99e Initial load
duke
parents:
diff changeset
1268
a61af66fc99e Initial load
duke
parents:
diff changeset
1269 inline jlong build_long_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
1789
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1270 return (( jlong(c1) << 56 ) & ( jlong(0xff) << 56 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1271 | (( jlong(c2) << 48 ) & ( jlong(0xff) << 48 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1272 | (( jlong(c3) << 40 ) & ( jlong(0xff) << 40 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1273 | (( jlong(c4) << 32 ) & ( jlong(0xff) << 32 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1274 | (( jlong(c5) << 24 ) & ( jlong(0xff) << 24 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1275 | (( jlong(c6) << 16 ) & ( jlong(0xff) << 16 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1276 | (( jlong(c7) << 8 ) & ( jlong(0xff) << 8 ))
a83b0246bb77 6934483: GCC 4.5 errors "suggest parentheses around something..." when compiling with -Werror and -Wall
twisti
parents: 1783
diff changeset
1277 | (( jlong(c8) << 0 ) & ( jlong(0xff) << 0 ));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1278 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1279
a61af66fc99e Initial load
duke
parents:
diff changeset
1280 inline jlong build_long_from( u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1281 return build_long_from( p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7] );
a61af66fc99e Initial load
duke
parents:
diff changeset
1282 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1283
a61af66fc99e Initial load
duke
parents:
diff changeset
1284
a61af66fc99e Initial load
duke
parents:
diff changeset
1285 // Doubles, too!
a61af66fc99e Initial load
duke
parents:
diff changeset
1286 inline jdouble build_double_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1287 jlong u = build_long_from( c1, c2, c3, c4, c5, c6, c7, c8 );
a61af66fc99e Initial load
duke
parents:
diff changeset
1288 return *(jdouble*)&u;
a61af66fc99e Initial load
duke
parents:
diff changeset
1289 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1290
a61af66fc99e Initial load
duke
parents:
diff changeset
1291 inline jdouble build_double_from( u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1292 jlong u = build_long_from( p );
a61af66fc99e Initial load
duke
parents:
diff changeset
1293 return *(jdouble*)&u;
a61af66fc99e Initial load
duke
parents:
diff changeset
1294 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1295
a61af66fc99e Initial load
duke
parents:
diff changeset
1296
a61af66fc99e Initial load
duke
parents:
diff changeset
1297 // Portable routines to go the other way:
a61af66fc99e Initial load
duke
parents:
diff changeset
1298
a61af66fc99e Initial load
duke
parents:
diff changeset
1299 inline void explode_short_to( u2 x, u1& c1, u1& c2 ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1300 c1 = u1(x >> 8);
a61af66fc99e Initial load
duke
parents:
diff changeset
1301 c2 = u1(x);
a61af66fc99e Initial load
duke
parents:
diff changeset
1302 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1303
a61af66fc99e Initial load
duke
parents:
diff changeset
1304 inline void explode_short_to( u2 x, u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1305 explode_short_to( x, p[0], p[1]);
a61af66fc99e Initial load
duke
parents:
diff changeset
1306 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1307
a61af66fc99e Initial load
duke
parents:
diff changeset
1308 inline void explode_int_to( u4 x, u1& c1, u1& c2, u1& c3, u1& c4 ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1309 c1 = u1(x >> 24);
a61af66fc99e Initial load
duke
parents:
diff changeset
1310 c2 = u1(x >> 16);
a61af66fc99e Initial load
duke
parents:
diff changeset
1311 c3 = u1(x >> 8);
a61af66fc99e Initial load
duke
parents:
diff changeset
1312 c4 = u1(x);
a61af66fc99e Initial load
duke
parents:
diff changeset
1313 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1314
a61af66fc99e Initial load
duke
parents:
diff changeset
1315 inline void explode_int_to( u4 x, u1* p ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1316 explode_int_to( x, p[0], p[1], p[2], p[3]);
a61af66fc99e Initial load
duke
parents:
diff changeset
1317 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1318
a61af66fc99e Initial load
duke
parents:
diff changeset
1319
a61af66fc99e Initial load
duke
parents:
diff changeset
1320 // Pack and extract shorts to/from ints:
a61af66fc99e Initial load
duke
parents:
diff changeset
1321
a61af66fc99e Initial load
duke
parents:
diff changeset
1322 inline int extract_low_short_from_int(jint x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1323 return x & 0xffff;
a61af66fc99e Initial load
duke
parents:
diff changeset
1324 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1325
a61af66fc99e Initial load
duke
parents:
diff changeset
1326 inline int extract_high_short_from_int(jint x) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1327 return (x >> 16) & 0xffff;
a61af66fc99e Initial load
duke
parents:
diff changeset
1328 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1329
a61af66fc99e Initial load
duke
parents:
diff changeset
1330 inline int build_int_from_shorts( jushort low, jushort high ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1331 return ((int)((unsigned int)high << 16) | (unsigned int)low);
a61af66fc99e Initial load
duke
parents:
diff changeset
1332 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1333
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1334 // Convert pointer to intptr_t, for use in printing pointers.
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1335 inline intptr_t p2i(const void * p) {
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1336 return (intptr_t) p;
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1337 }
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1338
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1339 // Printf-style formatters for fixed- and variable-width types as pointers and
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1340 // integers. These are derived from the definitions in inttypes.h. If the platform
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1341 // doesn't provide appropriate definitions, they should be provided in
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1342 // the compiler-specific definitions file (e.g., globalDefinitions_gcc.hpp)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1343
2361
1216415d8e35 7014923: G1: code cleanup
tonyp
parents: 2192
diff changeset
1344 #define BOOL_TO_STR(_b_) ((_b_) ? "true" : "false")
2152
0fa27f37d4d4 6977804: G1: remove the zero-filling thread
tonyp
parents: 1972
diff changeset
1345
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1346 // Format 32-bit quantities.
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1347 #define INT32_FORMAT "%" PRId32
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1348 #define UINT32_FORMAT "%" PRIu32
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1349 #define INT32_FORMAT_W(width) "%" #width PRId32
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1350 #define UINT32_FORMAT_W(width) "%" #width PRIu32
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1351
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1352 #define PTR32_FORMAT "0x%08" PRIx32
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1353
a61af66fc99e Initial load
duke
parents:
diff changeset
1354 // Format 64-bit quantities.
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1355 #define INT64_FORMAT "%" PRId64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1356 #define UINT64_FORMAT "%" PRIu64
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1357 #define UINT64_FORMAT_X "%" PRIx64
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1358 #define INT64_FORMAT_W(width) "%" #width PRId64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1359 #define UINT64_FORMAT_W(width) "%" #width PRIu64
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1360
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1361 #define PTR64_FORMAT "0x%016" PRIx64
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1362
7623
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1363 // Format jlong, if necessary
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1364 #ifndef JLONG_FORMAT
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1365 #define JLONG_FORMAT INT64_FORMAT
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1366 #endif
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1367 #ifndef JULONG_FORMAT
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1368 #define JULONG_FORMAT UINT64_FORMAT
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1369 #endif
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 7176
diff changeset
1370
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1371 // Format pointers which change size between 32- and 64-bit.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1372 #ifdef _LP64
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1373 #define INTPTR_FORMAT "0x%016" PRIxPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1374 #define PTR_FORMAT "0x%016" PRIxPTR
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1375 #else // !_LP64
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1376 #define INTPTR_FORMAT "0x%08" PRIxPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1377 #define PTR_FORMAT "0x%08" PRIxPTR
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1378 #endif // _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
1379
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1380 #define INTPTR_FORMAT_W(width) "%" #width PRIxPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1381
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1382 #define SSIZE_FORMAT "%" PRIdPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1383 #define SIZE_FORMAT "%" PRIuPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1384 #define SIZE_FORMAT_HEX "0x%" PRIxPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1385 #define SSIZE_FORMAT_W(width) "%" #width PRIdPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1386 #define SIZE_FORMAT_W(width) "%" #width PRIuPTR
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17935
diff changeset
1387 #define SIZE_FORMAT_HEX_W(width) "0x%" #width PRIxPTR
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1388
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1389 #define INTX_FORMAT "%" PRIdPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1390 #define UINTX_FORMAT "%" PRIuPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1391 #define INTX_FORMAT_W(width) "%" #width PRIdPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1392 #define UINTX_FORMAT_W(width) "%" #width PRIuPTR
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2447
diff changeset
1393
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1394
a61af66fc99e Initial load
duke
parents:
diff changeset
1395 // Enable zap-a-lot if in debug version.
a61af66fc99e Initial load
duke
parents:
diff changeset
1396
a61af66fc99e Initial load
duke
parents:
diff changeset
1397 # ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
1398 # ifdef COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
1399 # define ENABLE_ZAP_DEAD_LOCALS
a61af66fc99e Initial load
duke
parents:
diff changeset
1400 #endif /* COMPILER2 */
a61af66fc99e Initial load
duke
parents:
diff changeset
1401 # endif /* ASSERT */
a61af66fc99e Initial load
duke
parents:
diff changeset
1402
a61af66fc99e Initial load
duke
parents:
diff changeset
1403 #define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
1404
7176
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1405 // Dereference vptr
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1406 // All C++ compilers that we know of have the vtbl pointer in the first
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1407 // word. If there are exceptions, this function needs to be made compiler
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1408 // specific.
17935
7384f6a12fc1 8038212: Method::is_valid_method() check has performance regression impact for stackwalking
coleenp
parents: 17810
diff changeset
1409 static inline void* dereference_vptr(const void* addr) {
7176
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1410 return *(void**)addr;
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1411 }
59c790074993 8003635: NPG: AsynchGetCallTrace broken by Method* virtual call
coleenp
parents: 6982
diff changeset
1412
9060
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1413 #ifndef PRODUCT
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1414
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1415 // For unit testing only
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1416 class GlobalDefinitions {
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1417 public:
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1418 static void test_globals();
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1419 };
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1420
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1421 #endif // PRODUCT
cc32ccaaf47f 8003310: Enable -Wunused-function when compiling with gcc
mikael
parents: 7623
diff changeset
1422
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1789
diff changeset
1423 #endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_HPP