annotate src/share/vm/utilities/globalDefinitions.cpp @ 1721:413ad0331a0c

6977924: Changes for 6975078 produce build error with certain gcc versions Summary: The changes introduced for 6975078 assign badHeapOopVal to the _allocation field in the ResourceObj class. In 32 bit linux builds with certain versions of gcc this assignment will be flagged as an error while compiling allocation.cpp. In 32 bit builds the constant value badHeapOopVal (which is cast to an intptr_t) is negative. The _allocation field is typed as an unsigned intptr_t and gcc catches this as an error. Reviewed-by: jcoomes, ysr, phh
author johnc
date Wed, 18 Aug 2010 10:59:06 -0700
parents e9ff18c4ace7
children f95d63e2154a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
2 * Copyright (c) 1997, 2008, 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: 196
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
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: 196
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
a61af66fc99e Initial load
duke
parents:
diff changeset
25 # include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 # include "incls/_globalDefinitions.cpp.incl"
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
27 // Basic error support
0
a61af66fc99e Initial load
duke
parents:
diff changeset
28
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
29 // Info for oops within a java object. Defaults are zero so
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
30 // things will break badly if incorrectly initialized.
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
31 int heapOopSize = 0;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
32 int LogBytesPerHeapOop = 0;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
33 int LogBitsPerHeapOop = 0;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
34 int BytesPerHeapOop = 0;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
35 int BitsPerHeapOop = 0;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
36
1571
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
37 // Object alignment, in units of HeapWords.
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
38 // Defaults are -1 so things will break badly if incorrectly initialized.
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
39 int MinObjAlignment = -1;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
40 int MinObjAlignmentInBytes = -1;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
41 int MinObjAlignmentInBytesMask = 0;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
42
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
43 int LogMinObjAlignment = -1;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
44 int LogMinObjAlignmentInBytes = -1;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
45
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
46 // Oop encoding heap max
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
47 uint64_t OopEncodingHeapMax = 0;
2d127394260e 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
kvn
parents: 196
diff changeset
48
0
a61af66fc99e Initial load
duke
parents:
diff changeset
49 void basic_fatal(const char* msg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
50 fatal(msg);
a61af66fc99e Initial load
duke
parents:
diff changeset
51 }
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53 // Something to help porters sleep at night
a61af66fc99e Initial load
duke
parents:
diff changeset
54
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
55 void basic_types_init() {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
56 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
57 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
58 assert(min_intx == (intx)CONST64(0x8000000000000000), "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
59 assert(max_intx == CONST64(0x7FFFFFFFFFFFFFFF), "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
60 assert(max_uintx == CONST64(0xFFFFFFFFFFFFFFFF), "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
61 assert( 8 == sizeof( intx), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
62 assert( 8 == sizeof( jobject), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
63 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
64 assert(min_intx == (intx)0x80000000, "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
65 assert(max_intx == 0x7FFFFFFF, "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
66 assert(max_uintx == 0xFFFFFFFF, "correct constant");
a61af66fc99e Initial load
duke
parents:
diff changeset
67 assert( 4 == sizeof( intx), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
68 assert( 4 == sizeof( jobject), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
69 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
70 assert( (~max_juint) == 0, "max_juint has all its bits");
a61af66fc99e Initial load
duke
parents:
diff changeset
71 assert( (~max_uintx) == 0, "max_uintx has all its bits");
a61af66fc99e Initial load
duke
parents:
diff changeset
72 assert( (~max_julong) == 0, "max_julong has all its bits");
a61af66fc99e Initial load
duke
parents:
diff changeset
73 assert( 1 == sizeof( jbyte), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
74 assert( 2 == sizeof( jchar), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
75 assert( 2 == sizeof( jshort), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
76 assert( 4 == sizeof( juint), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
77 assert( 4 == sizeof( jint), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
78 assert( 1 == sizeof( jboolean), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
79 assert( 8 == sizeof( jlong), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
80 assert( 4 == sizeof( jfloat), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
81 assert( 8 == sizeof( jdouble), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
82 assert( 1 == sizeof( u1), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
83 assert( 2 == sizeof( u2), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
84 assert( 4 == sizeof( u4), "wrong size for basic type");
a61af66fc99e Initial load
duke
parents:
diff changeset
85
a61af66fc99e Initial load
duke
parents:
diff changeset
86 int num_type_chars = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 for (int i = 0; i < 99; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
88 if (type2char((BasicType)i) != 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
89 assert(char2type(type2char((BasicType)i)) == i, "proper inverses");
a61af66fc99e Initial load
duke
parents:
diff changeset
90 num_type_chars++;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 }
a61af66fc99e Initial load
duke
parents:
diff changeset
92 }
a61af66fc99e Initial load
duke
parents:
diff changeset
93 assert(num_type_chars == 11, "must have tested the right number of mappings");
a61af66fc99e Initial load
duke
parents:
diff changeset
94 assert(char2type(0) == T_ILLEGAL, "correct illegality");
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 {
a61af66fc99e Initial load
duke
parents:
diff changeset
97 for (int i = T_BOOLEAN; i <= T_CONFLICT; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
98 BasicType vt = (BasicType)i;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 BasicType ft = type2field[vt];
a61af66fc99e Initial load
duke
parents:
diff changeset
100 switch (vt) {
a61af66fc99e Initial load
duke
parents:
diff changeset
101 // the following types might plausibly show up in memory layouts:
a61af66fc99e Initial load
duke
parents:
diff changeset
102 case T_BOOLEAN:
a61af66fc99e Initial load
duke
parents:
diff changeset
103 case T_BYTE:
a61af66fc99e Initial load
duke
parents:
diff changeset
104 case T_CHAR:
a61af66fc99e Initial load
duke
parents:
diff changeset
105 case T_SHORT:
a61af66fc99e Initial load
duke
parents:
diff changeset
106 case T_INT:
a61af66fc99e Initial load
duke
parents:
diff changeset
107 case T_FLOAT:
a61af66fc99e Initial load
duke
parents:
diff changeset
108 case T_DOUBLE:
a61af66fc99e Initial load
duke
parents:
diff changeset
109 case T_LONG:
a61af66fc99e Initial load
duke
parents:
diff changeset
110 case T_OBJECT:
a61af66fc99e Initial load
duke
parents:
diff changeset
111 case T_ADDRESS: // random raw pointer
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
112 case T_NARROWOOP: // compressed pointer
0
a61af66fc99e Initial load
duke
parents:
diff changeset
113 case T_CONFLICT: // might as well support a bottom type
a61af66fc99e Initial load
duke
parents:
diff changeset
114 case T_VOID: // padding or other unaddressed word
a61af66fc99e Initial load
duke
parents:
diff changeset
115 // layout type must map to itself
a61af66fc99e Initial load
duke
parents:
diff changeset
116 assert(vt == ft, "");
a61af66fc99e Initial load
duke
parents:
diff changeset
117 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
118 default:
a61af66fc99e Initial load
duke
parents:
diff changeset
119 // non-layout type must map to a (different) layout type
a61af66fc99e Initial load
duke
parents:
diff changeset
120 assert(vt != ft, "");
a61af66fc99e Initial load
duke
parents:
diff changeset
121 assert(ft == type2field[ft], "");
a61af66fc99e Initial load
duke
parents:
diff changeset
122 }
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // every type must map to same-sized layout type:
a61af66fc99e Initial load
duke
parents:
diff changeset
124 assert(type2size[vt] == type2size[ft], "");
a61af66fc99e Initial load
duke
parents:
diff changeset
125 }
a61af66fc99e Initial load
duke
parents:
diff changeset
126 }
a61af66fc99e Initial load
duke
parents:
diff changeset
127 // These are assumed, e.g., when filling HeapWords with juints.
a61af66fc99e Initial load
duke
parents:
diff changeset
128 assert(is_power_of_2(sizeof(juint)), "juint must be power of 2");
a61af66fc99e Initial load
duke
parents:
diff changeset
129 assert(is_power_of_2(HeapWordSize), "HeapWordSize must be power of 2");
a61af66fc99e Initial load
duke
parents:
diff changeset
130 assert((size_t)HeapWordSize >= sizeof(juint),
a61af66fc99e Initial load
duke
parents:
diff changeset
131 "HeapWord should be at least as large as juint");
a61af66fc99e Initial load
duke
parents:
diff changeset
132 assert(sizeof(NULL) == sizeof(char*), "NULL must be same size as pointer");
a61af66fc99e Initial load
duke
parents:
diff changeset
133 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
134
a61af66fc99e Initial load
duke
parents:
diff changeset
135 if( JavaPriority1_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
136 os::java_to_os_priority[1] = JavaPriority1_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
137 if( JavaPriority2_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
138 os::java_to_os_priority[2] = JavaPriority2_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 if( JavaPriority3_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
140 os::java_to_os_priority[3] = JavaPriority3_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 if( JavaPriority4_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
142 os::java_to_os_priority[4] = JavaPriority4_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
143 if( JavaPriority5_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
144 os::java_to_os_priority[5] = JavaPriority5_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
145 if( JavaPriority6_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
146 os::java_to_os_priority[6] = JavaPriority6_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 if( JavaPriority7_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
148 os::java_to_os_priority[7] = JavaPriority7_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
149 if( JavaPriority8_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
150 os::java_to_os_priority[8] = JavaPriority8_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
151 if( JavaPriority9_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
152 os::java_to_os_priority[9] = JavaPriority9_To_OSPriority;
a61af66fc99e Initial load
duke
parents:
diff changeset
153 if(JavaPriority10_To_OSPriority != -1 )
a61af66fc99e Initial load
duke
parents:
diff changeset
154 os::java_to_os_priority[10] = JavaPriority10_To_OSPriority;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
155
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
156 // Set the size of basic types here (after argument parsing but before
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
157 // stub generation).
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
158 if (UseCompressedOops) {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
159 // Size info for oops within java objects is fixed
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
160 heapOopSize = jintSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
161 LogBytesPerHeapOop = LogBytesPerInt;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
162 LogBitsPerHeapOop = LogBitsPerInt;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
163 BytesPerHeapOop = BytesPerInt;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
164 BitsPerHeapOop = BitsPerInt;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
165 } else {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
166 heapOopSize = oopSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
167 LogBytesPerHeapOop = LogBytesPerWord;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
168 LogBitsPerHeapOop = LogBitsPerWord;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
169 BytesPerHeapOop = BytesPerWord;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
170 BitsPerHeapOop = BitsPerWord;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
171 }
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
172 _type2aelembytes[T_OBJECT] = heapOopSize;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
173 _type2aelembytes[T_ARRAY] = heapOopSize;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
174 }
a61af66fc99e Initial load
duke
parents:
diff changeset
175
a61af66fc99e Initial load
duke
parents:
diff changeset
176
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // Map BasicType to signature character
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
178 char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0, 0};
0
a61af66fc99e Initial load
duke
parents:
diff changeset
179
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // Map BasicType to Java type name
a61af66fc99e Initial load
duke
parents:
diff changeset
181 const char* type2name_tab[T_CONFLICT+1] = {
a61af66fc99e Initial load
duke
parents:
diff changeset
182 NULL, NULL, NULL, NULL,
a61af66fc99e Initial load
duke
parents:
diff changeset
183 "boolean",
a61af66fc99e Initial load
duke
parents:
diff changeset
184 "char",
a61af66fc99e Initial load
duke
parents:
diff changeset
185 "float",
a61af66fc99e Initial load
duke
parents:
diff changeset
186 "double",
a61af66fc99e Initial load
duke
parents:
diff changeset
187 "byte",
a61af66fc99e Initial load
duke
parents:
diff changeset
188 "short",
a61af66fc99e Initial load
duke
parents:
diff changeset
189 "int",
a61af66fc99e Initial load
duke
parents:
diff changeset
190 "long",
a61af66fc99e Initial load
duke
parents:
diff changeset
191 "object",
a61af66fc99e Initial load
duke
parents:
diff changeset
192 "array",
a61af66fc99e Initial load
duke
parents:
diff changeset
193 "void",
a61af66fc99e Initial load
duke
parents:
diff changeset
194 "*address*",
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
195 "*narrowoop*",
0
a61af66fc99e Initial load
duke
parents:
diff changeset
196 "*conflict*"
a61af66fc99e Initial load
duke
parents:
diff changeset
197 };
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199
a61af66fc99e Initial load
duke
parents:
diff changeset
200 BasicType name2type(const char* name) {
a61af66fc99e Initial load
duke
parents:
diff changeset
201 for (int i = T_BOOLEAN; i <= T_VOID; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
202 BasicType t = (BasicType)i;
a61af66fc99e Initial load
duke
parents:
diff changeset
203 if (type2name_tab[t] != NULL && 0 == strcmp(type2name_tab[t], name))
a61af66fc99e Initial load
duke
parents:
diff changeset
204 return t;
a61af66fc99e Initial load
duke
parents:
diff changeset
205 }
a61af66fc99e Initial load
duke
parents:
diff changeset
206 return T_ILLEGAL;
a61af66fc99e Initial load
duke
parents:
diff changeset
207 }
a61af66fc99e Initial load
duke
parents:
diff changeset
208
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210 // Map BasicType to size in words
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
211 int type2size[T_CONFLICT+1]={ -1, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, 1, -1};
0
a61af66fc99e Initial load
duke
parents:
diff changeset
212
a61af66fc99e Initial load
duke
parents:
diff changeset
213 BasicType type2field[T_CONFLICT+1] = {
a61af66fc99e Initial load
duke
parents:
diff changeset
214 (BasicType)0, // 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
215 (BasicType)0, // 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
216 (BasicType)0, // 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
217 (BasicType)0, // 3,
a61af66fc99e Initial load
duke
parents:
diff changeset
218 T_BOOLEAN, // T_BOOLEAN = 4,
a61af66fc99e Initial load
duke
parents:
diff changeset
219 T_CHAR, // T_CHAR = 5,
a61af66fc99e Initial load
duke
parents:
diff changeset
220 T_FLOAT, // T_FLOAT = 6,
a61af66fc99e Initial load
duke
parents:
diff changeset
221 T_DOUBLE, // T_DOUBLE = 7,
a61af66fc99e Initial load
duke
parents:
diff changeset
222 T_BYTE, // T_BYTE = 8,
a61af66fc99e Initial load
duke
parents:
diff changeset
223 T_SHORT, // T_SHORT = 9,
a61af66fc99e Initial load
duke
parents:
diff changeset
224 T_INT, // T_INT = 10,
a61af66fc99e Initial load
duke
parents:
diff changeset
225 T_LONG, // T_LONG = 11,
a61af66fc99e Initial load
duke
parents:
diff changeset
226 T_OBJECT, // T_OBJECT = 12,
a61af66fc99e Initial load
duke
parents:
diff changeset
227 T_OBJECT, // T_ARRAY = 13,
a61af66fc99e Initial load
duke
parents:
diff changeset
228 T_VOID, // T_VOID = 14,
a61af66fc99e Initial load
duke
parents:
diff changeset
229 T_ADDRESS, // T_ADDRESS = 15,
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
230 T_NARROWOOP, // T_NARROWOOP= 16,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
231 T_CONFLICT // T_CONFLICT = 17,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
232 };
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234
a61af66fc99e Initial load
duke
parents:
diff changeset
235 BasicType type2wfield[T_CONFLICT+1] = {
a61af66fc99e Initial load
duke
parents:
diff changeset
236 (BasicType)0, // 0,
a61af66fc99e Initial load
duke
parents:
diff changeset
237 (BasicType)0, // 1,
a61af66fc99e Initial load
duke
parents:
diff changeset
238 (BasicType)0, // 2,
a61af66fc99e Initial load
duke
parents:
diff changeset
239 (BasicType)0, // 3,
a61af66fc99e Initial load
duke
parents:
diff changeset
240 T_INT, // T_BOOLEAN = 4,
a61af66fc99e Initial load
duke
parents:
diff changeset
241 T_INT, // T_CHAR = 5,
a61af66fc99e Initial load
duke
parents:
diff changeset
242 T_FLOAT, // T_FLOAT = 6,
a61af66fc99e Initial load
duke
parents:
diff changeset
243 T_DOUBLE, // T_DOUBLE = 7,
a61af66fc99e Initial load
duke
parents:
diff changeset
244 T_INT, // T_BYTE = 8,
a61af66fc99e Initial load
duke
parents:
diff changeset
245 T_INT, // T_SHORT = 9,
a61af66fc99e Initial load
duke
parents:
diff changeset
246 T_INT, // T_INT = 10,
a61af66fc99e Initial load
duke
parents:
diff changeset
247 T_LONG, // T_LONG = 11,
a61af66fc99e Initial load
duke
parents:
diff changeset
248 T_OBJECT, // T_OBJECT = 12,
a61af66fc99e Initial load
duke
parents:
diff changeset
249 T_OBJECT, // T_ARRAY = 13,
a61af66fc99e Initial load
duke
parents:
diff changeset
250 T_VOID, // T_VOID = 14,
a61af66fc99e Initial load
duke
parents:
diff changeset
251 T_ADDRESS, // T_ADDRESS = 15,
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
252 T_NARROWOOP, // T_NARROWOOP = 16,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
253 T_CONFLICT // T_CONFLICT = 17,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
254 };
a61af66fc99e Initial load
duke
parents:
diff changeset
255
a61af66fc99e Initial load
duke
parents:
diff changeset
256
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
257 int _type2aelembytes[T_CONFLICT+1] = {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
258 0, // 0
a61af66fc99e Initial load
duke
parents:
diff changeset
259 0, // 1
a61af66fc99e Initial load
duke
parents:
diff changeset
260 0, // 2
a61af66fc99e Initial load
duke
parents:
diff changeset
261 0, // 3
a61af66fc99e Initial load
duke
parents:
diff changeset
262 T_BOOLEAN_aelem_bytes, // T_BOOLEAN = 4,
a61af66fc99e Initial load
duke
parents:
diff changeset
263 T_CHAR_aelem_bytes, // T_CHAR = 5,
a61af66fc99e Initial load
duke
parents:
diff changeset
264 T_FLOAT_aelem_bytes, // T_FLOAT = 6,
a61af66fc99e Initial load
duke
parents:
diff changeset
265 T_DOUBLE_aelem_bytes, // T_DOUBLE = 7,
a61af66fc99e Initial load
duke
parents:
diff changeset
266 T_BYTE_aelem_bytes, // T_BYTE = 8,
a61af66fc99e Initial load
duke
parents:
diff changeset
267 T_SHORT_aelem_bytes, // T_SHORT = 9,
a61af66fc99e Initial load
duke
parents:
diff changeset
268 T_INT_aelem_bytes, // T_INT = 10,
a61af66fc99e Initial load
duke
parents:
diff changeset
269 T_LONG_aelem_bytes, // T_LONG = 11,
a61af66fc99e Initial load
duke
parents:
diff changeset
270 T_OBJECT_aelem_bytes, // T_OBJECT = 12,
a61af66fc99e Initial load
duke
parents:
diff changeset
271 T_ARRAY_aelem_bytes, // T_ARRAY = 13,
a61af66fc99e Initial load
duke
parents:
diff changeset
272 0, // T_VOID = 14,
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
273 T_OBJECT_aelem_bytes, // T_ADDRESS = 15,
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
274 T_NARROWOOP_aelem_bytes,// T_NARROWOOP= 16,
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
275 0 // T_CONFLICT = 17,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
276 };
a61af66fc99e Initial load
duke
parents:
diff changeset
277
29
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
278 #ifdef ASSERT
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
279 int type2aelembytes(BasicType t, bool allow_address) {
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
280 assert(allow_address || t != T_ADDRESS, " ");
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
281 return _type2aelembytes[t];
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
282 }
d5fc211aea19 6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents: 0
diff changeset
283 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
284
a61af66fc99e Initial load
duke
parents:
diff changeset
285 // Support for 64-bit integer arithmetic
a61af66fc99e Initial load
duke
parents:
diff changeset
286
a61af66fc99e Initial load
duke
parents:
diff changeset
287 // The following code is mostly taken from JVM typedefs_md.h and system_md.c
a61af66fc99e Initial load
duke
parents:
diff changeset
288
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 29
diff changeset
289 static const jlong high_bit = (jlong)1 << (jlong)63;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
290 static const jlong other_bits = ~high_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
291
a61af66fc99e Initial load
duke
parents:
diff changeset
292 jlong float2long(jfloat f) {
a61af66fc99e Initial load
duke
parents:
diff changeset
293 jlong tmp = (jlong) f;
a61af66fc99e Initial load
duke
parents:
diff changeset
294 if (tmp != high_bit) {
a61af66fc99e Initial load
duke
parents:
diff changeset
295 return tmp;
a61af66fc99e Initial load
duke
parents:
diff changeset
296 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
297 if (g_isnan((jdouble)f)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
298 return 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
299 }
a61af66fc99e Initial load
duke
parents:
diff changeset
300 if (f < 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
301 return high_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
302 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
303 return other_bits;
a61af66fc99e Initial load
duke
parents:
diff changeset
304 }
a61af66fc99e Initial load
duke
parents:
diff changeset
305 }
a61af66fc99e Initial load
duke
parents:
diff changeset
306 }
a61af66fc99e Initial load
duke
parents:
diff changeset
307
a61af66fc99e Initial load
duke
parents:
diff changeset
308
a61af66fc99e Initial load
duke
parents:
diff changeset
309 jlong double2long(jdouble f) {
a61af66fc99e Initial load
duke
parents:
diff changeset
310 jlong tmp = (jlong) f;
a61af66fc99e Initial load
duke
parents:
diff changeset
311 if (tmp != high_bit) {
a61af66fc99e Initial load
duke
parents:
diff changeset
312 return tmp;
a61af66fc99e Initial load
duke
parents:
diff changeset
313 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
314 if (g_isnan(f)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
315 return 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
316 }
a61af66fc99e Initial load
duke
parents:
diff changeset
317 if (f < 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
318 return high_bit;
a61af66fc99e Initial load
duke
parents:
diff changeset
319 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
320 return other_bits;
a61af66fc99e Initial load
duke
parents:
diff changeset
321 }
a61af66fc99e Initial load
duke
parents:
diff changeset
322 }
a61af66fc99e Initial load
duke
parents:
diff changeset
323 }
a61af66fc99e Initial load
duke
parents:
diff changeset
324
a61af66fc99e Initial load
duke
parents:
diff changeset
325 // least common multiple
a61af66fc99e Initial load
duke
parents:
diff changeset
326 size_t lcm(size_t a, size_t b) {
a61af66fc99e Initial load
duke
parents:
diff changeset
327 size_t cur, div, next;
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 cur = MAX2(a, b);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 div = MIN2(a, b);
a61af66fc99e Initial load
duke
parents:
diff changeset
331
a61af66fc99e Initial load
duke
parents:
diff changeset
332 assert(div != 0, "lcm requires positive arguments");
a61af66fc99e Initial load
duke
parents:
diff changeset
333
a61af66fc99e Initial load
duke
parents:
diff changeset
334
a61af66fc99e Initial load
duke
parents:
diff changeset
335 while ((next = cur % div) != 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
336 cur = div; div = next;
a61af66fc99e Initial load
duke
parents:
diff changeset
337 }
a61af66fc99e Initial load
duke
parents:
diff changeset
338
a61af66fc99e Initial load
duke
parents:
diff changeset
339
a61af66fc99e Initial load
duke
parents:
diff changeset
340 julong result = julong(a) * b / div;
a61af66fc99e Initial load
duke
parents:
diff changeset
341 assert(result <= (size_t)max_uintx, "Integer overflow in lcm");
a61af66fc99e Initial load
duke
parents:
diff changeset
342
a61af66fc99e Initial load
duke
parents:
diff changeset
343 return size_t(result);
a61af66fc99e Initial load
duke
parents:
diff changeset
344 }