< prev index next >

src/hotspot/share/utilities/globalDefinitions.hpp

Print this page

        

@@ -469,10 +469,19 @@
 
 #define Unused_Variable(var) var
 
 
 //----------------------------------------------------------------------------------------------------
+// Prototyping
+// "Code Missing Here" macro, un-define when integrating back from prototyping stage and break
+// compilation on purpose (i.e. "forget me not")
+#define PROTOTYPE
+#ifdef PROTOTYPE
+#define CMH(m)
+#endif
+
+//----------------------------------------------------------------------------------------------------
 // Miscellaneous
 
 // 6302670 Eliminate Hotspot __fabsf dependency
 // All fabs() callers should call this function instead, which will implicitly
 // convert the operand to double, avoiding a dependency on __fabsf which

@@ -545,16 +554,17 @@
   T_SHORT       =  9,
   T_INT         = 10,
   T_LONG        = 11,
   T_OBJECT      = 12,
   T_ARRAY       = 13,
-  T_VOID        = 14,
-  T_ADDRESS     = 15,
-  T_NARROWOOP   = 16,
-  T_METADATA    = 17,
-  T_NARROWKLASS = 18,
-  T_CONFLICT    = 19, // for stack value type with conflicting contents
+  T_VALUETYPE   = 14,
+  T_VOID        = 15,
+  T_ADDRESS     = 16,
+  T_NARROWOOP   = 17,
+  T_METADATA    = 18,
+  T_NARROWKLASS = 19,
+  T_CONFLICT    = 20, // for stack value type with conflicting contents
   T_ILLEGAL     = 99
 };
 
 inline bool is_java_primitive(BasicType t) {
   return T_BOOLEAN <= t && t <= T_LONG;

@@ -568,11 +578,11 @@
 inline bool is_signed_subword_type(BasicType t) {
   return (t == T_BYTE || t == T_SHORT);
 }
 
 inline bool is_reference_type(BasicType t) {
-  return (t == T_OBJECT || t == T_ARRAY);
+  return (t == T_OBJECT || t == T_ARRAY || t == T_VALUETYPE);
 }
 
 // Convert a char from a classfile signature to a BasicType
 inline BasicType char2type(char c) {
   switch( c ) {

@@ -585,10 +595,11 @@
   case 'S': return T_SHORT;
   case 'Z': return T_BOOLEAN;
   case 'V': return T_VOID;
   case 'L': return T_OBJECT;
   case '[': return T_ARRAY;
+  case 'Q': return T_VALUETYPE;
   }
   return T_ILLEGAL;
 }
 
 extern char type2char_tab[T_CONFLICT+1];     // Map a BasicType to a jchar

@@ -615,11 +626,12 @@
   T_LONG_size        = 2,
   T_OBJECT_size      = 1,
   T_ARRAY_size       = 1,
   T_NARROWOOP_size   = 1,
   T_NARROWKLASS_size = 1,
-  T_VOID_size        = 0
+  T_VOID_size        = 0,
+  T_VALUETYPE_size   = 1
 };
 
 
 // maps a BasicType to its instance field storage type:
 // all sub-word integral types are widened to T_INT

@@ -638,13 +650,15 @@
   T_INT_aelem_bytes         = 4,
   T_LONG_aelem_bytes        = 8,
 #ifdef _LP64
   T_OBJECT_aelem_bytes      = 8,
   T_ARRAY_aelem_bytes       = 8,
+  T_VALUETYPE_aelem_bytes   = 8,
 #else
   T_OBJECT_aelem_bytes      = 4,
   T_ARRAY_aelem_bytes       = 4,
+  T_VALUETYPE_aelem_bytes   = 4,
 #endif
   T_NARROWOOP_aelem_bytes   = 4,
   T_NARROWKLASS_aelem_bytes = 4,
   T_VOID_aelem_bytes        = 0
 };

@@ -736,11 +750,11 @@
   itos = 4,             // int tos cached
   ltos = 5,             // long tos cached
   ftos = 6,             // float tos cached
   dtos = 7,             // double tos cached
   atos = 8,             // object cached
-  vtos = 9,             // tos not cached
+  vtos = 9,             // tos not cached,
   number_of_states,
   ilgl                  // illegal state: should not occur
 };
 
 

@@ -753,10 +767,11 @@
     case T_INT    : return itos;
     case T_LONG   : return ltos;
     case T_FLOAT  : return ftos;
     case T_DOUBLE : return dtos;
     case T_VOID   : return vtos;
+    case T_VALUETYPE: // fall through
     case T_ARRAY  : // fall through
     case T_OBJECT : return atos;
     default       : return ilgl;
   }
 }

@@ -968,10 +983,20 @@
 inline int exact_log2(intptr_t x) {
   assert(is_power_of_2(x), "x must be a power of 2: " INTPTR_FORMAT, x);
   return log2_intptr(x);
 }
 
+// the argument doesn't need to be a power of two
+inline int upper_log2(intptr_t x) {
+  int shift = log2_intptr(x);
+  intptr_t y = 1ULL << shift;
+  if (y < x) {
+    shift++;
+  }
+  return shift;
+}
+
 //* the argument must be exactly a power of 2
 inline int exact_log2_long(jlong x) {
   assert(is_power_of_2_long(x), "x must be a power of 2: " JLONG_FORMAT, x);
   return log2_long(x);
 }
< prev index next >