1/*
2 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef SHARE_UTILITIES_GLOBALDEFINITIONS_HPP
26#define SHARE_UTILITIES_GLOBALDEFINITIONS_HPP
27
28#include "utilities/compilerWarnings.hpp"
29#include "utilities/debug.hpp"
30#include "utilities/macros.hpp"
31
32#include COMPILER_HEADER(utilities/globalDefinitions)
33
34// Defaults for macros that might be defined per compiler.
35#ifndef NOINLINE
36#define NOINLINE
37#endif
38#ifndef ALWAYSINLINE
39#define ALWAYSINLINE inline
40#endif
41
42#ifndef ATTRIBUTE_ALIGNED
43#define ATTRIBUTE_ALIGNED(x)
44#endif
45
46// These are #defines to selectively turn on/off the Print(Opto)Assembly
47// capabilities. Choices should be led by a tradeoff between
48// code size and improved supportability.
49// if PRINT_ASSEMBLY then PRINT_ABSTRACT_ASSEMBLY must be true as well
50// to have a fallback in case hsdis is not available.
51#if defined(PRODUCT)
52 #define SUPPORT_ABSTRACT_ASSEMBLY
53 #define SUPPORT_ASSEMBLY
54 #undef SUPPORT_OPTO_ASSEMBLY // Can't activate. In PRODUCT, many dump methods are missing.
55 #undef SUPPORT_DATA_STRUCTS // Of limited use. In PRODUCT, many print methods are empty.
56#else
57 #define SUPPORT_ABSTRACT_ASSEMBLY
58 #define SUPPORT_ASSEMBLY
59 #define SUPPORT_OPTO_ASSEMBLY
60 #define SUPPORT_DATA_STRUCTS
61#endif
62#if defined(SUPPORT_ASSEMBLY) && !defined(SUPPORT_ABSTRACT_ASSEMBLY)
63 #define SUPPORT_ABSTRACT_ASSEMBLY
64#endif
65
66// This file holds all globally used constants & types, class (forward)
67// declarations and a few frequently used utility functions.
68
69//----------------------------------------------------------------------------------------------------
70// Printf-style formatters for fixed- and variable-width types as pointers and
71// integers. These are derived from the definitions in inttypes.h. If the platform
72// doesn't provide appropriate definitions, they should be provided in
73// the compiler-specific definitions file (e.g., globalDefinitions_gcc.hpp)
74
75#define BOOL_TO_STR(_b_) ((_b_) ? "true" : "false")
76
77// Format 32-bit quantities.
78#define INT32_FORMAT "%" PRId32
79#define UINT32_FORMAT "%" PRIu32
80#define INT32_FORMAT_W(width) "%" #width PRId32
81#define UINT32_FORMAT_W(width) "%" #width PRIu32
82
83#define PTR32_FORMAT "0x%08" PRIx32
84#define PTR32_FORMAT_W(width) "0x%" #width PRIx32
85
86// Format 64-bit quantities.
87#define INT64_FORMAT "%" PRId64
88#define UINT64_FORMAT "%" PRIu64
89#define UINT64_FORMAT_X "%" PRIx64
90#define INT64_FORMAT_W(width) "%" #width PRId64
91#define UINT64_FORMAT_W(width) "%" #width PRIu64
92#define UINT64_FORMAT_X_W(width) "%" #width PRIx64
93
94#define PTR64_FORMAT "0x%016" PRIx64
95
96// Format jlong, if necessary
97#ifndef JLONG_FORMAT
98#define JLONG_FORMAT INT64_FORMAT
99#endif
100#ifndef JLONG_FORMAT_W
101#define JLONG_FORMAT_W(width) INT64_FORMAT_W(width)
102#endif
103#ifndef JULONG_FORMAT
104#define JULONG_FORMAT UINT64_FORMAT
105#endif
106#ifndef JULONG_FORMAT_X
107#define JULONG_FORMAT_X UINT64_FORMAT_X
108#endif
109
110// Format pointers which change size between 32- and 64-bit.
111#ifdef _LP64
112#define INTPTR_FORMAT "0x%016" PRIxPTR
113#define PTR_FORMAT "0x%016" PRIxPTR
114#else // !_LP64
115#define INTPTR_FORMAT "0x%08" PRIxPTR
116#define PTR_FORMAT "0x%08" PRIxPTR
117#endif // _LP64
118
119// Format pointers without leading zeros
120#define INTPTRNZ_FORMAT "0x%" PRIxPTR
121
122#define INTPTR_FORMAT_W(width) "%" #width PRIxPTR
123
124#define SSIZE_FORMAT "%" PRIdPTR
125#define SIZE_FORMAT "%" PRIuPTR
126#define SIZE_FORMAT_HEX "0x%" PRIxPTR
127#define SSIZE_FORMAT_W(width) "%" #width PRIdPTR
128#define SIZE_FORMAT_W(width) "%" #width PRIuPTR
129#define SIZE_FORMAT_HEX_W(width) "0x%" #width PRIxPTR
130
131#define INTX_FORMAT "%" PRIdPTR
132#define UINTX_FORMAT "%" PRIuPTR
133#define INTX_FORMAT_W(width) "%" #width PRIdPTR
134#define UINTX_FORMAT_W(width) "%" #width PRIuPTR
135
136//----------------------------------------------------------------------------------------------------
137// Constants
138
139const int LogBytesPerShort = 1;
140const int LogBytesPerInt = 2;
141#ifdef _LP64
142const int LogBytesPerWord = 3;
143#else
144const int LogBytesPerWord = 2;
145#endif
146const int LogBytesPerLong = 3;
147
148const int BytesPerShort = 1 << LogBytesPerShort;
149const int BytesPerInt = 1 << LogBytesPerInt;
150const int BytesPerWord = 1 << LogBytesPerWord;
151const int BytesPerLong = 1 << LogBytesPerLong;
152
153const int LogBitsPerByte = 3;
154const int LogBitsPerShort = LogBitsPerByte + LogBytesPerShort;
155const int LogBitsPerInt = LogBitsPerByte + LogBytesPerInt;
156const int LogBitsPerWord = LogBitsPerByte + LogBytesPerWord;
157const int LogBitsPerLong = LogBitsPerByte + LogBytesPerLong;
158
159const int BitsPerByte = 1 << LogBitsPerByte;
160const int BitsPerShort = 1 << LogBitsPerShort;
161const int BitsPerInt = 1 << LogBitsPerInt;
162const int BitsPerWord = 1 << LogBitsPerWord;
163const int BitsPerLong = 1 << LogBitsPerLong;
164
165const int WordAlignmentMask = (1 << LogBytesPerWord) - 1;
166const int LongAlignmentMask = (1 << LogBytesPerLong) - 1;
167
168const int WordsPerLong = 2; // Number of stack entries for longs
169
170const int oopSize = sizeof(char*); // Full-width oop
171extern int heapOopSize; // Oop within a java object
172const int wordSize = sizeof(char*);
173const int longSize = sizeof(jlong);
174const int jintSize = sizeof(jint);
175const int size_tSize = sizeof(size_t);
176
177const int BytesPerOop = BytesPerWord; // Full-width oop
178
179extern int LogBytesPerHeapOop; // Oop within a java object
180extern int LogBitsPerHeapOop;
181extern int BytesPerHeapOop;
182extern int BitsPerHeapOop;
183
184const int BitsPerJavaInteger = 32;
185const int BitsPerJavaLong = 64;
186const int BitsPerSize_t = size_tSize * BitsPerByte;
187
188// Size of a char[] needed to represent a jint as a string in decimal.
189const int jintAsStringSize = 12;
190
191// An opaque type, so that HeapWord* can be a generic pointer into the heap.
192// We require that object sizes be measured in units of heap words (e.g.
193// pointer-sized values), so that given HeapWord* hw,
194// hw += oop(hw)->foo();
195// works, where foo is a method (like size or scavenge) that returns the
196// object size.
197class HeapWordImpl; // Opaque, never defined.
198typedef HeapWordImpl* HeapWord;
199
200// Analogous opaque struct for metadata allocated from metaspaces.
201class MetaWordImpl; // Opaque, never defined.
202typedef MetaWordImpl* MetaWord;
203
204// HeapWordSize must be 2^LogHeapWordSize.
205const int HeapWordSize = sizeof(HeapWord);
206#ifdef _LP64
207const int LogHeapWordSize = 3;
208#else
209const int LogHeapWordSize = 2;
210#endif
211const int HeapWordsPerLong = BytesPerLong / HeapWordSize;
212const int LogHeapWordsPerLong = LogBytesPerLong - LogHeapWordSize;
213
214// The minimum number of native machine words necessary to contain "byte_size"
215// bytes.
216inline size_t heap_word_size(size_t byte_size) {
217 return (byte_size + (HeapWordSize-1)) >> LogHeapWordSize;
218}
219
220//-------------------------------------------
221// Constant for jlong (standardized by C++11)
222
223// Build a 64bit integer constant
224#define CONST64(x) (x ## LL)
225#define UCONST64(x) (x ## ULL)
226
227const jlong min_jlong = CONST64(0x8000000000000000);
228const jlong max_jlong = CONST64(0x7fffffffffffffff);
229
230const size_t K = 1024;
231const size_t M = K*K;
232const size_t G = M*K;
233const size_t HWperKB = K / sizeof(HeapWord);
234
235// Constants for converting from a base unit to milli-base units. For
236// example from seconds to milliseconds and microseconds
237
238const int MILLIUNITS = 1000; // milli units per base unit
239const int MICROUNITS = 1000000; // micro units per base unit
240const int NANOUNITS = 1000000000; // nano units per base unit
241
242const jlong NANOSECS_PER_SEC = CONST64(1000000000);
243const jint NANOSECS_PER_MILLISEC = 1000000;
244
245// Proper units routines try to maintain at least three significant digits.
246// In worst case, it would print five significant digits with lower prefix.
247// G is close to MAX_SIZE on 32-bit platforms, so its product can easily overflow,
248// and therefore we need to be careful.
249
250inline const char* proper_unit_for_byte_size(size_t s) {
251#ifdef _LP64
252 if (s >= 100*G) {
253 return "G";
254 }
255#endif
256 if (s >= 100*M) {
257 return "M";
258 } else if (s >= 100*K) {
259 return "K";
260 } else {
261 return "B";
262 }
263}
264
265template <class T>
266inline T byte_size_in_proper_unit(T s) {
267#ifdef _LP64
268 if (s >= 100*G) {
269 return (T)(s/G);
270 }
271#endif
272 if (s >= 100*M) {
273 return (T)(s/M);
274 } else if (s >= 100*K) {
275 return (T)(s/K);
276 } else {
277 return s;
278 }
279}
280
281inline const char* exact_unit_for_byte_size(size_t s) {
282#ifdef _LP64
283 if (s >= G && (s % G) == 0) {
284 return "G";
285 }
286#endif
287 if (s >= M && (s % M) == 0) {
288 return "M";
289 }
290 if (s >= K && (s % K) == 0) {
291 return "K";
292 }
293 return "B";
294}
295
296inline size_t byte_size_in_exact_unit(size_t s) {
297#ifdef _LP64
298 if (s >= G && (s % G) == 0) {
299 return s / G;
300 }
301#endif
302 if (s >= M && (s % M) == 0) {
303 return s / M;
304 }
305 if (s >= K && (s % K) == 0) {
306 return s / K;
307 }
308 return s;
309}
310
311//----------------------------------------------------------------------------------------------------
312// VM type definitions
313
314// intx and uintx are the 'extended' int and 'extended' unsigned int types;
315// they are 32bit wide on a 32-bit platform, and 64bit wide on a 64bit platform.
316
317typedef intptr_t intx;
318typedef uintptr_t uintx;
319
320const intx min_intx = (intx)1 << (sizeof(intx)*BitsPerByte-1);
321const intx max_intx = (uintx)min_intx - 1;
322const uintx max_uintx = (uintx)-1;
323
324// Table of values:
325// sizeof intx 4 8
326// min_intx 0x80000000 0x8000000000000000
327// max_intx 0x7FFFFFFF 0x7FFFFFFFFFFFFFFF
328// max_uintx 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF
329
330typedef unsigned int uint; NEEDS_CLEANUP
331
332
333//----------------------------------------------------------------------------------------------------
334// Java type definitions
335
336// All kinds of 'plain' byte addresses
337typedef signed char s_char;
338typedef unsigned char u_char;
339typedef u_char* address;
340typedef uintptr_t address_word; // unsigned integer which will hold a pointer
341 // except for some implementations of a C++
342 // linkage pointer to function. Should never
343 // need one of those to be placed in this
344 // type anyway.
345
346// Utility functions to "portably" (?) bit twiddle pointers
347// Where portable means keep ANSI C++ compilers quiet
348
349inline address set_address_bits(address x, int m) { return address(intptr_t(x) | m); }
350inline address clear_address_bits(address x, int m) { return address(intptr_t(x) & ~m); }
351
352// Utility functions to "portably" make cast to/from function pointers.
353
354inline address_word mask_address_bits(address x, int m) { return address_word(x) & m; }
355inline address_word castable_address(address x) { return address_word(x) ; }
356inline address_word castable_address(void* x) { return address_word(x) ; }
357
358// Pointer subtraction.
359// The idea here is to avoid ptrdiff_t, which is signed and so doesn't have
360// the range we might need to find differences from one end of the heap
361// to the other.
362// A typical use might be:
363// if (pointer_delta(end(), top()) >= size) {
364// // enough room for an object of size
365// ...
366// and then additions like
367// ... top() + size ...
368// are safe because we know that top() is at least size below end().
369inline size_t pointer_delta(const volatile void* left,
370 const volatile void* right,
371 size_t element_size) {
372 return (((uintptr_t) left) - ((uintptr_t) right)) / element_size;
373}
374
375// A version specialized for HeapWord*'s.
376inline size_t pointer_delta(const HeapWord* left, const HeapWord* right) {
377 return pointer_delta(left, right, sizeof(HeapWord));
378}
379// A version specialized for MetaWord*'s.
380inline size_t pointer_delta(const MetaWord* left, const MetaWord* right) {
381 return pointer_delta(left, right, sizeof(MetaWord));
382}
383
384//
385// ANSI C++ does not allow casting from one pointer type to a function pointer
386// directly without at best a warning. This macro accomplishes it silently
387// In every case that is present at this point the value be cast is a pointer
388// to a C linkage function. In some case the type used for the cast reflects
389// that linkage and a picky compiler would not complain. In other cases because
390// there is no convenient place to place a typedef with extern C linkage (i.e
391// a platform dependent header file) it doesn't. At this point no compiler seems
392// picky enough to catch these instances (which are few). It is possible that
393// using templates could fix these for all cases. This use of templates is likely
394// so far from the middle of the road that it is likely to be problematic in
395// many C++ compilers.
396//
397#define CAST_TO_FN_PTR(func_type, value) (reinterpret_cast<func_type>(value))
398#define CAST_FROM_FN_PTR(new_type, func_ptr) ((new_type)((address_word)(func_ptr)))
399
400// Unsigned byte types for os and stream.hpp
401
402// Unsigned one, two, four and eigth byte quantities used for describing
403// the .class file format. See JVM book chapter 4.
404
405typedef jubyte u1;
406typedef jushort u2;
407typedef juint u4;
408typedef julong u8;
409
410const jubyte max_jubyte = (jubyte)-1; // 0xFF largest jubyte
411const jushort max_jushort = (jushort)-1; // 0xFFFF largest jushort
412const juint max_juint = (juint)-1; // 0xFFFFFFFF largest juint
413const julong max_julong = (julong)-1; // 0xFF....FF largest julong
414
415typedef jbyte s1;
416typedef jshort s2;
417typedef jint s4;
418typedef jlong s8;
419
420const jbyte min_jbyte = -(1 << 7); // smallest jbyte
421const jbyte max_jbyte = (1 << 7) - 1; // largest jbyte
422const jshort min_jshort = -(1 << 15); // smallest jshort
423const jshort max_jshort = (1 << 15) - 1; // largest jshort
424
425const jint min_jint = (jint)1 << (sizeof(jint)*BitsPerByte-1); // 0x80000000 == smallest jint
426const jint max_jint = (juint)min_jint - 1; // 0x7FFFFFFF == largest jint
427
428//----------------------------------------------------------------------------------------------------
429// JVM spec restrictions
430
431const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134)
432
433//----------------------------------------------------------------------------------------------------
434// Object alignment, in units of HeapWords.
435//
436// Minimum is max(BytesPerLong, BytesPerDouble, BytesPerOop) / HeapWordSize, so jlong, jdouble and
437// reference fields can be naturally aligned.
438
439extern int MinObjAlignment;
440extern int MinObjAlignmentInBytes;
441extern int MinObjAlignmentInBytesMask;
442
443extern int LogMinObjAlignment;
444extern int LogMinObjAlignmentInBytes;
445
446const int LogKlassAlignmentInBytes = 3;
447const int LogKlassAlignment = LogKlassAlignmentInBytes - LogHeapWordSize;
448const int KlassAlignmentInBytes = 1 << LogKlassAlignmentInBytes;
449const int KlassAlignment = KlassAlignmentInBytes / HeapWordSize;
450
451// Maximal size of heap where unscaled compression can be used. Also upper bound
452// for heap placement: 4GB.
453const uint64_t UnscaledOopHeapMax = (uint64_t(max_juint) + 1);
454// Maximal size of heap where compressed oops can be used. Also upper bound for heap
455// placement for zero based compression algorithm: UnscaledOopHeapMax << LogMinObjAlignmentInBytes.
456extern uint64_t OopEncodingHeapMax;
457
458// Maximal size of compressed class space. Above this limit compression is not possible.
459// Also upper bound for placement of zero based class space. (Class space is further limited
460// to be < 3G, see arguments.cpp.)
461const uint64_t KlassEncodingMetaspaceMax = (uint64_t(max_juint) + 1) << LogKlassAlignmentInBytes;
462
463// Machine dependent stuff
464
465// The maximum size of the code cache. Can be overridden by targets.
466#define CODE_CACHE_SIZE_LIMIT (2*G)
467// Allow targets to reduce the default size of the code cache.
468#define CODE_CACHE_DEFAULT_LIMIT CODE_CACHE_SIZE_LIMIT
469
470#include CPU_HEADER(globalDefinitions)
471
472// To assure the IRIW property on processors that are not multiple copy
473// atomic, sync instructions must be issued between volatile reads to
474// assure their ordering, instead of after volatile stores.
475// (See "A Tutorial Introduction to the ARM and POWER Relaxed Memory Models"
476// by Luc Maranget, Susmit Sarkar and Peter Sewell, INRIA/Cambridge)
477#ifdef CPU_NOT_MULTIPLE_COPY_ATOMIC
478const bool support_IRIW_for_not_multiple_copy_atomic_cpu = true;
479#else
480const bool support_IRIW_for_not_multiple_copy_atomic_cpu = false;
481#endif
482
483// The expected size in bytes of a cache line, used to pad data structures.
484#ifndef DEFAULT_CACHE_LINE_SIZE
485 #define DEFAULT_CACHE_LINE_SIZE 64
486#endif
487
488
489//----------------------------------------------------------------------------------------------------
490// Utility macros for compilers
491// used to silence compiler warnings
492
493#define Unused_Variable(var) var
494
495
496//----------------------------------------------------------------------------------------------------
497// Miscellaneous
498
499// 6302670 Eliminate Hotspot __fabsf dependency
500// All fabs() callers should call this function instead, which will implicitly
501// convert the operand to double, avoiding a dependency on __fabsf which
502// doesn't exist in early versions of Solaris 8.
503inline double fabsd(double value) {
504 return fabs(value);
505}
506
507// Returns numerator/denominator as percentage value from 0 to 100. If denominator
508// is zero, return 0.0.
509template<typename T>
510inline double percent_of(T numerator, T denominator) {
511 return denominator != 0 ? (double)numerator / denominator * 100.0 : 0.0;
512}
513
514//----------------------------------------------------------------------------------------------------
515// Special casts
516// Cast floats into same-size integers and vice-versa w/o changing bit-pattern
517typedef union {
518 jfloat f;
519 jint i;
520} FloatIntConv;
521
522typedef union {
523 jdouble d;
524 jlong l;
525 julong ul;
526} DoubleLongConv;
527
528inline jint jint_cast (jfloat x) { return ((FloatIntConv*)&x)->i; }
529inline jfloat jfloat_cast (jint x) { return ((FloatIntConv*)&x)->f; }
530
531inline jlong jlong_cast (jdouble x) { return ((DoubleLongConv*)&x)->l; }
532inline julong julong_cast (jdouble x) { return ((DoubleLongConv*)&x)->ul; }
533inline jdouble jdouble_cast (jlong x) { return ((DoubleLongConv*)&x)->d; }
534
535inline jint low (jlong value) { return jint(value); }
536inline jint high(jlong value) { return jint(value >> 32); }
537
538// the fancy casts are a hopefully portable way
539// to do unsigned 32 to 64 bit type conversion
540inline void set_low (jlong* value, jint low ) { *value &= (jlong)0xffffffff << 32;
541 *value |= (jlong)(julong)(juint)low; }
542
543inline void set_high(jlong* value, jint high) { *value &= (jlong)(julong)(juint)0xffffffff;
544 *value |= (jlong)high << 32; }
545
546inline jlong jlong_from(jint h, jint l) {
547 jlong result = 0; // initialization to avoid warning
548 set_high(&result, h);
549 set_low(&result, l);
550 return result;
551}
552
553union jlong_accessor {
554 jint words[2];
555 jlong long_value;
556};
557
558void basic_types_init(); // cannot define here; uses assert
559
560
561// NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
562enum BasicType {
563 T_BOOLEAN = 4,
564 T_CHAR = 5,
565 T_FLOAT = 6,
566 T_DOUBLE = 7,
567 T_BYTE = 8,
568 T_SHORT = 9,
569 T_INT = 10,
570 T_LONG = 11,
571 T_OBJECT = 12,
572 T_ARRAY = 13,
573 T_VOID = 14,
574 T_ADDRESS = 15,
575 T_NARROWOOP = 16,
576 T_METADATA = 17,
577 T_NARROWKLASS = 18,
578 T_CONFLICT = 19, // for stack value type with conflicting contents
579 T_ILLEGAL = 99
580};
581
582inline bool is_java_primitive(BasicType t) {
583 return T_BOOLEAN <= t && t <= T_LONG;
584}
585
586inline bool is_subword_type(BasicType t) {
587 // these guys are processed exactly like T_INT in calling sequences:
588 return (t == T_BOOLEAN || t == T_CHAR || t == T_BYTE || t == T_SHORT);
589}
590
591inline bool is_signed_subword_type(BasicType t) {
592 return (t == T_BYTE || t == T_SHORT);
593}
594
595inline bool is_reference_type(BasicType t) {
596 return (t == T_OBJECT || t == T_ARRAY);
597}
598
599// Convert a char from a classfile signature to a BasicType
600inline BasicType char2type(char c) {
601 switch( c ) {
602 case 'B': return T_BYTE;
603 case 'C': return T_CHAR;
604 case 'D': return T_DOUBLE;
605 case 'F': return T_FLOAT;
606 case 'I': return T_INT;
607 case 'J': return T_LONG;
608 case 'S': return T_SHORT;
609 case 'Z': return T_BOOLEAN;
610 case 'V': return T_VOID;
611 case 'L': return T_OBJECT;
612 case '[': return T_ARRAY;
613 }
614 return T_ILLEGAL;
615}
616
617extern char type2char_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
618inline char type2char(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2char_tab[t] : 0; }
619extern int type2size[T_CONFLICT+1]; // Map BasicType to result stack elements
620extern const char* type2name_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
621inline const char* type2name(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2name_tab[t] : NULL; }
622extern BasicType name2type(const char* name);
623
624// Auxiliary math routines
625// least common multiple
626extern size_t lcm(size_t a, size_t b);
627
628
629// NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
630enum BasicTypeSize {
631 T_BOOLEAN_size = 1,
632 T_CHAR_size = 1,
633 T_FLOAT_size = 1,
634 T_DOUBLE_size = 2,
635 T_BYTE_size = 1,
636 T_SHORT_size = 1,
637 T_INT_size = 1,
638 T_LONG_size = 2,
639 T_OBJECT_size = 1,
640 T_ARRAY_size = 1,
641 T_NARROWOOP_size = 1,
642 T_NARROWKLASS_size = 1,
643 T_VOID_size = 0
644};
645
646
647// maps a BasicType to its instance field storage type:
648// all sub-word integral types are widened to T_INT
649extern BasicType type2field[T_CONFLICT+1];
650extern BasicType type2wfield[T_CONFLICT+1];
651
652
653// size in bytes
654enum ArrayElementSize {
655 T_BOOLEAN_aelem_bytes = 1,
656 T_CHAR_aelem_bytes = 2,
657 T_FLOAT_aelem_bytes = 4,
658 T_DOUBLE_aelem_bytes = 8,
659 T_BYTE_aelem_bytes = 1,
660 T_SHORT_aelem_bytes = 2,
661 T_INT_aelem_bytes = 4,
662 T_LONG_aelem_bytes = 8,
663#ifdef _LP64
664 T_OBJECT_aelem_bytes = 8,
665 T_ARRAY_aelem_bytes = 8,
666#else
667 T_OBJECT_aelem_bytes = 4,
668 T_ARRAY_aelem_bytes = 4,
669#endif
670 T_NARROWOOP_aelem_bytes = 4,
671 T_NARROWKLASS_aelem_bytes = 4,
672 T_VOID_aelem_bytes = 0
673};
674
675extern int _type2aelembytes[T_CONFLICT+1]; // maps a BasicType to nof bytes used by its array element
676#ifdef ASSERT
677extern int type2aelembytes(BasicType t, bool allow_address = false); // asserts
678#else
679inline int type2aelembytes(BasicType t, bool allow_address = false) { return _type2aelembytes[t]; }
680#endif
681
682
683// JavaValue serves as a container for arbitrary Java values.
684
685class JavaValue {
686
687 public:
688 typedef union JavaCallValue {
689 jfloat f;
690 jdouble d;
691 jint i;
692 jlong l;
693 jobject h;
694 } JavaCallValue;
695
696 private:
697 BasicType _type;
698 JavaCallValue _value;
699
700 public:
701 JavaValue(BasicType t = T_ILLEGAL) { _type = t; }
702
703 JavaValue(jfloat value) {
704 _type = T_FLOAT;
705 _value.f = value;
706 }
707
708 JavaValue(jdouble value) {
709 _type = T_DOUBLE;
710 _value.d = value;
711 }
712
713 jfloat get_jfloat() const { return _value.f; }
714 jdouble get_jdouble() const { return _value.d; }
715 jint get_jint() const { return _value.i; }
716 jlong get_jlong() const { return _value.l; }
717 jobject get_jobject() const { return _value.h; }
718 JavaCallValue* get_value_addr() { return &_value; }
719 BasicType get_type() const { return _type; }
720
721 void set_jfloat(jfloat f) { _value.f = f;}
722 void set_jdouble(jdouble d) { _value.d = d;}
723 void set_jint(jint i) { _value.i = i;}
724 void set_jlong(jlong l) { _value.l = l;}
725 void set_jobject(jobject h) { _value.h = h;}
726 void set_type(BasicType t) { _type = t; }
727
728 jboolean get_jboolean() const { return (jboolean) (_value.i);}
729 jbyte get_jbyte() const { return (jbyte) (_value.i);}
730 jchar get_jchar() const { return (jchar) (_value.i);}
731 jshort get_jshort() const { return (jshort) (_value.i);}
732
733};
734
735
736#define STACK_BIAS 0
737// V9 Sparc CPU's running in 64 Bit mode use a stack bias of 7ff
738// in order to extend the reach of the stack pointer.
739#if defined(SPARC) && defined(_LP64)
740#undef STACK_BIAS
741#define STACK_BIAS 0x7ff
742#endif
743
744
745// TosState describes the top-of-stack state before and after the execution of
746// a bytecode or method. The top-of-stack value may be cached in one or more CPU
747// registers. The TosState corresponds to the 'machine representation' of this cached
748// value. There's 4 states corresponding to the JAVA types int, long, float & double
749// as well as a 5th state in case the top-of-stack value is actually on the top
750// of stack (in memory) and thus not cached. The atos state corresponds to the itos
751// state when it comes to machine representation but is used separately for (oop)
752// type specific operations (e.g. verification code).
753
754enum TosState { // describes the tos cache contents
755 btos = 0, // byte, bool tos cached
756 ztos = 1, // byte, bool tos cached
757 ctos = 2, // char tos cached
758 stos = 3, // short tos cached
759 itos = 4, // int tos cached
760 ltos = 5, // long tos cached
761 ftos = 6, // float tos cached
762 dtos = 7, // double tos cached
763 atos = 8, // object cached
764 vtos = 9, // tos not cached
765 number_of_states,
766 ilgl // illegal state: should not occur
767};
768
769
770inline TosState as_TosState(BasicType type) {
771 switch (type) {
772 case T_BYTE : return btos;
773 case T_BOOLEAN: return ztos;
774 case T_CHAR : return ctos;
775 case T_SHORT : return stos;
776 case T_INT : return itos;
777 case T_LONG : return ltos;
778 case T_FLOAT : return ftos;
779 case T_DOUBLE : return dtos;
780 case T_VOID : return vtos;
781 case T_ARRAY : // fall through
782 case T_OBJECT : return atos;
783 default : return ilgl;
784 }
785}
786
787inline BasicType as_BasicType(TosState state) {
788 switch (state) {
789 case btos : return T_BYTE;
790 case ztos : return T_BOOLEAN;
791 case ctos : return T_CHAR;
792 case stos : return T_SHORT;
793 case itos : return T_INT;
794 case ltos : return T_LONG;
795 case ftos : return T_FLOAT;
796 case dtos : return T_DOUBLE;
797 case atos : return T_OBJECT;
798 case vtos : return T_VOID;
799 default : return T_ILLEGAL;
800 }
801}
802
803
804// Helper function to convert BasicType info into TosState
805// Note: Cannot define here as it uses global constant at the time being.
806TosState as_TosState(BasicType type);
807
808
809// JavaThreadState keeps track of which part of the code a thread is executing in. This
810// information is needed by the safepoint code.
811//
812// There are 4 essential states:
813//
814// _thread_new : Just started, but not executed init. code yet (most likely still in OS init code)
815// _thread_in_native : In native code. This is a safepoint region, since all oops will be in jobject handles
816// _thread_in_vm : Executing in the vm
817// _thread_in_Java : Executing either interpreted or compiled Java code (or could be in a stub)
818//
819// Each state has an associated xxxx_trans state, which is an intermediate state used when a thread is in
820// a transition from one state to another. These extra states makes it possible for the safepoint code to
821// handle certain thread_states without having to suspend the thread - making the safepoint code faster.
822//
823// Given a state, the xxxx_trans state can always be found by adding 1.
824//
825enum JavaThreadState {
826 _thread_uninitialized = 0, // should never happen (missing initialization)
827 _thread_new = 2, // just starting up, i.e., in process of being initialized
828 _thread_new_trans = 3, // corresponding transition state (not used, included for completness)
829 _thread_in_native = 4, // running in native code
830 _thread_in_native_trans = 5, // corresponding transition state
831 _thread_in_vm = 6, // running in VM
832 _thread_in_vm_trans = 7, // corresponding transition state
833 _thread_in_Java = 8, // running in Java or in stub code
834 _thread_in_Java_trans = 9, // corresponding transition state (not used, included for completness)
835 _thread_blocked = 10, // blocked in vm
836 _thread_blocked_trans = 11, // corresponding transition state
837 _thread_max_state = 12 // maximum thread state+1 - used for statistics allocation
838};
839
840//----------------------------------------------------------------------------------------------------
841// Special constants for debugging
842
843const jint badInt = -3; // generic "bad int" value
844const intptr_t badAddressVal = -2; // generic "bad address" value
845const intptr_t badOopVal = -1; // generic "bad oop" value
846const intptr_t badHeapOopVal = (intptr_t) CONST64(0x2BAD4B0BBAADBABE); // value used to zap heap after GC
847const int badStackSegVal = 0xCA; // value used to zap stack segments
848const int badHandleValue = 0xBC; // value used to zap vm handle area
849const int badResourceValue = 0xAB; // value used to zap resource area
850const int freeBlockPad = 0xBA; // value used to pad freed blocks.
851const int uninitBlockPad = 0xF1; // value used to zap newly malloc'd blocks.
852const juint uninitMetaWordVal= 0xf7f7f7f7; // value used to zap newly allocated metachunk
853const juint badHeapWordVal = 0xBAADBABE; // value used to zap heap after GC
854const juint badMetaWordVal = 0xBAADFADE; // value used to zap metadata heap after GC
855const int badCodeHeapNewVal= 0xCC; // value used to zap Code heap at allocation
856const int badCodeHeapFreeVal = 0xDD; // value used to zap Code heap at deallocation
857
858
859// (These must be implemented as #defines because C++ compilers are
860// not obligated to inline non-integral constants!)
861#define badAddress ((address)::badAddressVal)
862#define badOop (cast_to_oop(::badOopVal))
863#define badHeapWord (::badHeapWordVal)
864
865// Default TaskQueue size is 16K (32-bit) or 128K (64-bit)
866#define TASKQUEUE_SIZE (NOT_LP64(1<<14) LP64_ONLY(1<<17))
867
868//----------------------------------------------------------------------------------------------------
869// Utility functions for bitfield manipulations
870
871const intptr_t AllBits = ~0; // all bits set in a word
872const intptr_t NoBits = 0; // no bits set in a word
873const jlong NoLongBits = 0; // no bits set in a long
874const intptr_t OneBit = 1; // only right_most bit set in a word
875
876// get a word with the n.th or the right-most or left-most n bits set
877// (note: #define used only so that they can be used in enum constant definitions)
878#define nth_bit(n) (((n) >= BitsPerWord) ? 0 : (OneBit << (n)))
879#define right_n_bits(n) (nth_bit(n) - 1)
880#define left_n_bits(n) (right_n_bits(n) << (((n) >= BitsPerWord) ? 0 : (BitsPerWord - (n))))
881
882// bit-operations using a mask m
883inline void set_bits (intptr_t& x, intptr_t m) { x |= m; }
884inline void clear_bits (intptr_t& x, intptr_t m) { x &= ~m; }
885inline intptr_t mask_bits (intptr_t x, intptr_t m) { return x & m; }
886inline jlong mask_long_bits (jlong x, jlong m) { return x & m; }
887inline bool mask_bits_are_true (intptr_t flags, intptr_t mask) { return (flags & mask) == mask; }
888
889// bit-operations using the n.th bit
890inline void set_nth_bit(intptr_t& x, int n) { set_bits (x, nth_bit(n)); }
891inline void clear_nth_bit(intptr_t& x, int n) { clear_bits(x, nth_bit(n)); }
892inline bool is_set_nth_bit(intptr_t x, int n) { return mask_bits (x, nth_bit(n)) != NoBits; }
893
894// returns the bitfield of x starting at start_bit_no with length field_length (no sign-extension!)
895inline intptr_t bitfield(intptr_t x, int start_bit_no, int field_length) {
896 return mask_bits(x >> start_bit_no, right_n_bits(field_length));
897}
898
899
900//----------------------------------------------------------------------------------------------------
901// Utility functions for integers
902
903// Avoid use of global min/max macros which may cause unwanted double
904// evaluation of arguments.
905#ifdef max
906#undef max
907#endif
908
909#ifdef min
910#undef min
911#endif
912
913// It is necessary to use templates here. Having normal overloaded
914// functions does not work because it is necessary to provide both 32-
915// and 64-bit overloaded functions, which does not work, and having
916// explicitly-typed versions of these routines (i.e., MAX2I, MAX2L)
917// will be even more error-prone than macros.
918template<class T> inline T MAX2(T a, T b) { return (a > b) ? a : b; }
919template<class T> inline T MIN2(T a, T b) { return (a < b) ? a : b; }
920template<class T> inline T MAX3(T a, T b, T c) { return MAX2(MAX2(a, b), c); }
921template<class T> inline T MIN3(T a, T b, T c) { return MIN2(MIN2(a, b), c); }
922template<class T> inline T MAX4(T a, T b, T c, T d) { return MAX2(MAX3(a, b, c), d); }
923template<class T> inline T MIN4(T a, T b, T c, T d) { return MIN2(MIN3(a, b, c), d); }
924
925template<class T> inline T ABS(T x) { return (x > 0) ? x : -x; }
926
927// true if x is a power of 2, false otherwise
928inline bool is_power_of_2(intptr_t x) {
929 return ((x != NoBits) && (mask_bits(x, x - 1) == NoBits));
930}
931
932// long version of is_power_of_2
933inline bool is_power_of_2_long(jlong x) {
934 return ((x != NoLongBits) && (mask_long_bits(x, x - 1) == NoLongBits));
935}
936
937// Returns largest i such that 2^i <= x.
938// If x == 0, the function returns -1.
939inline int log2_intptr(uintptr_t x) {
940 int i = -1;
941 uintptr_t p = 1;
942 while (p != 0 && p <= x) {
943 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
944 i++; p *= 2;
945 }
946 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
947 // If p = 0, overflow has occurred and i = 31 or i = 63 (depending on the machine word size).
948 return i;
949}
950
951//* largest i such that 2^i <= x
952inline int log2_long(julong x) {
953 int i = -1;
954 julong p = 1;
955 while (p != 0 && p <= x) {
956 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
957 i++; p *= 2;
958 }
959 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
960 // (if p = 0 then overflow occurred and i = 63)
961 return i;
962}
963
964// If x < 0, the function returns 31 on a 32-bit machine and 63 on a 64-bit machine.
965inline int log2_intptr(intptr_t x) {
966 return log2_intptr((uintptr_t)x);
967}
968
969inline int log2_int(int x) {
970 STATIC_ASSERT(sizeof(int) <= sizeof(uintptr_t));
971 return log2_intptr((uintptr_t)x);
972}
973
974inline int log2_jint(jint x) {
975 STATIC_ASSERT(sizeof(jint) <= sizeof(uintptr_t));
976 return log2_intptr((uintptr_t)x);
977}
978
979inline int log2_uint(uint x) {
980 STATIC_ASSERT(sizeof(uint) <= sizeof(uintptr_t));
981 return log2_intptr((uintptr_t)x);
982}
983
984// A negative value of 'x' will return '63'
985inline int log2_jlong(jlong x) {
986 STATIC_ASSERT(sizeof(jlong) <= sizeof(julong));
987 return log2_long((julong)x);
988}
989
990//* the argument must be exactly a power of 2
991inline int exact_log2(intptr_t x) {
992 assert(is_power_of_2(x), "x must be a power of 2: " INTPTR_FORMAT, x);
993 return log2_intptr(x);
994}
995
996//* the argument must be exactly a power of 2
997inline int exact_log2_long(jlong x) {
998 assert(is_power_of_2_long(x), "x must be a power of 2: " JLONG_FORMAT, x);
999 return log2_long(x);
1000}
1001
1002inline bool is_odd (intx x) { return x & 1; }
1003inline bool is_even(intx x) { return !is_odd(x); }
1004
1005// abs methods which cannot overflow and so are well-defined across
1006// the entire domain of integer types.
1007static inline unsigned int uabs(unsigned int n) {
1008 union {
1009 unsigned int result;
1010 int value;
1011 };
1012 result = n;
1013 if (value < 0) result = 0-result;
1014 return result;
1015}
1016static inline julong uabs(julong n) {
1017 union {
1018 julong result;
1019 jlong value;
1020 };
1021 result = n;
1022 if (value < 0) result = 0-result;
1023 return result;
1024}
1025static inline julong uabs(jlong n) { return uabs((julong)n); }
1026static inline unsigned int uabs(int n) { return uabs((unsigned int)n); }
1027
1028// "to" should be greater than "from."
1029inline intx byte_size(void* from, void* to) {
1030 return (address)to - (address)from;
1031}
1032
1033
1034// Pack and extract shorts to/from ints:
1035
1036inline int extract_low_short_from_int(jint x) {
1037 return x & 0xffff;
1038}
1039
1040inline int extract_high_short_from_int(jint x) {
1041 return (x >> 16) & 0xffff;
1042}
1043
1044inline int build_int_from_shorts( jushort low, jushort high ) {
1045 return ((int)((unsigned int)high << 16) | (unsigned int)low);
1046}
1047
1048// Convert pointer to intptr_t, for use in printing pointers.
1049inline intptr_t p2i(const void * p) {
1050 return (intptr_t) p;
1051}
1052
1053// swap a & b
1054template<class T> static void swap(T& a, T& b) {
1055 T tmp = a;
1056 a = b;
1057 b = tmp;
1058}
1059
1060#define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))
1061
1062//----------------------------------------------------------------------------------------------------
1063// Sum and product which can never overflow: they wrap, just like the
1064// Java operations. Note that we don't intend these to be used for
1065// general-purpose arithmetic: their purpose is to emulate Java
1066// operations.
1067
1068// The goal of this code to avoid undefined or implementation-defined
1069// behavior. The use of an lvalue to reference cast is explicitly
1070// permitted by Lvalues and rvalues [basic.lval]. [Section 3.10 Para
1071// 15 in C++03]
1072#define JAVA_INTEGER_OP(OP, NAME, TYPE, UNSIGNED_TYPE) \
1073inline TYPE NAME (TYPE in1, TYPE in2) { \
1074 UNSIGNED_TYPE ures = static_cast<UNSIGNED_TYPE>(in1); \
1075 ures OP ## = static_cast<UNSIGNED_TYPE>(in2); \
1076 return reinterpret_cast<TYPE&>(ures); \
1077}
1078
1079JAVA_INTEGER_OP(+, java_add, jint, juint)
1080JAVA_INTEGER_OP(-, java_subtract, jint, juint)
1081JAVA_INTEGER_OP(*, java_multiply, jint, juint)
1082JAVA_INTEGER_OP(+, java_add, jlong, julong)
1083JAVA_INTEGER_OP(-, java_subtract, jlong, julong)
1084JAVA_INTEGER_OP(*, java_multiply, jlong, julong)
1085
1086#undef JAVA_INTEGER_OP
1087
1088//----------------------------------------------------------------------------------------------------
1089// The goal of this code is to provide saturating operations for int/uint.
1090// Checks overflow conditions and saturates the result to min_jint/max_jint.
1091#define SATURATED_INTEGER_OP(OP, NAME, TYPE1, TYPE2) \
1092inline int NAME (TYPE1 in1, TYPE2 in2) { \
1093 jlong res = static_cast<jlong>(in1); \
1094 res OP ## = static_cast<jlong>(in2); \
1095 if (res > max_jint) { \
1096 res = max_jint; \
1097 } else if (res < min_jint) { \
1098 res = min_jint; \
1099 } \
1100 return static_cast<int>(res); \
1101}
1102
1103SATURATED_INTEGER_OP(+, saturated_add, int, int)
1104SATURATED_INTEGER_OP(+, saturated_add, int, uint)
1105SATURATED_INTEGER_OP(+, saturated_add, uint, int)
1106SATURATED_INTEGER_OP(+, saturated_add, uint, uint)
1107
1108#undef SATURATED_INTEGER_OP
1109
1110// Dereference vptr
1111// All C++ compilers that we know of have the vtbl pointer in the first
1112// word. If there are exceptions, this function needs to be made compiler
1113// specific.
1114static inline void* dereference_vptr(const void* addr) {
1115 return *(void**)addr;
1116}
1117
1118//----------------------------------------------------------------------------------------------------
1119// String type aliases used by command line flag declarations and
1120// processing utilities.
1121
1122typedef const char* ccstr;
1123typedef const char* ccstrlist; // represents string arguments which accumulate
1124
1125//----------------------------------------------------------------------------------------------------
1126// Default hash/equals functions used by ResourceHashtable and KVHashtable
1127
1128template<typename K> unsigned primitive_hash(const K& k) {
1129 unsigned hash = (unsigned)((uintptr_t)k);
1130 return hash ^ (hash >> 3); // just in case we're dealing with aligned ptrs
1131}
1132
1133template<typename K> bool primitive_equals(const K& k0, const K& k1) {
1134 return k0 == k1;
1135}
1136
1137
1138#endif // SHARE_UTILITIES_GLOBALDEFINITIONS_HPP
1139