Request for reviews (XL): 6894206: JVM needs a way to traverse method handle structures

John Rose John.Rose at Sun.COM
Fri Dec 4 00:36:42 PST 2009


On Dec 2, 2009, at 11:00 AM, Vladimir Kozlov wrote:

> I think you can use the original code for this push.
> The John's code is just optimization which could be skipped
> until he figure out how to do it.

Just turning the int to longs.  The following diffs should work.  -- John

diff --git a/src/share/vm/classfile/vmSymbols.cpp b/src/share/vm/classfile/vmSymbols.cpp
--- a/src/share/vm/classfile/vmSymbols.cpp
+++ b/src/share/vm/classfile/vmSymbols.cpp
@@ -377,9 +377,9 @@
 }
 
 // These are for forming case labels:
-#define ID3(x, y, z) (( jint)(z) +                                  \
-                      ((jint)(y) <<    vmSymbols::log2_SID_LIMIT) + \
-                      ((jint)(x) << (2*vmSymbols::log2_SID_LIMIT))  )
+#define ID3(x, y, z) (( jlong)(z) +                                  \
+                      ((jlong)(y) <<    vmSymbols::log2_SID_LIMIT) + \
+                      ((jlong)(x) << (2*vmSymbols::log2_SID_LIMIT))  )
 #define SID_ENUM(n) vmSymbols::VM_SYMBOL_ENUM_NAME(n)
 
 vmIntrinsics::ID vmIntrinsics::find_id(vmSymbols::SID holder,
@@ -437,39 +437,39 @@
 #define VM_INTRINSIC_INFO(ignore_id, klass, name, sig, fcode) \
   ID4(SID_ENUM(klass), SID_ENUM(name), SID_ENUM(sig), vmIntrinsics::fcode),
   
-static const jint intrinsic_info_array[vmIntrinsics::ID_LIMIT+1] = {
+static const jlong intrinsic_info_array[vmIntrinsics::ID_LIMIT+1] = {
   0, VM_INTRINSICS_DO(VM_INTRINSIC_INFO,
                      VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE)
     0
 };
 
-inline jint intrinsic_info(vmIntrinsics::ID id) {
+inline jlong intrinsic_info(vmIntrinsics::ID id) {
   return intrinsic_info_array[vmIntrinsics::ID_from((int)id)];
 }
 
 vmSymbols::SID vmIntrinsics::class_for(vmIntrinsics::ID id) {
-  jint info = intrinsic_info(id);
+  jlong info = intrinsic_info(id);
   int shift = 2*vmSymbols::log2_SID_LIMIT + log2_FLAG_LIMIT, mask = right_n_bits(vmSymbols::log2_SID_LIMIT);
   assert(((ID4(1,3,5,7) >> shift) & mask) == 1, "");
   return vmSymbols::SID( (info >> shift) & mask );
 }
 
 vmSymbols::SID vmIntrinsics::name_for(vmIntrinsics::ID id) {
-  jint info = intrinsic_info(id);
+  jlong info = intrinsic_info(id);
   int shift = vmSymbols::log2_SID_LIMIT + log2_FLAG_LIMIT, mask = right_n_bits(vmSymbols::log2_SID_LIMIT);
   assert(((ID4(1,3,5,7) >> shift) & mask) == 3, "");
   return vmSymbols::SID( (info >> shift) & mask );
 }
 
 vmSymbols::SID vmIntrinsics::signature_for(vmIntrinsics::ID id) {
-  jint info = intrinsic_info(id);
+  jlong info = intrinsic_info(id);
   int shift = log2_FLAG_LIMIT, mask = right_n_bits(vmSymbols::log2_SID_LIMIT);
   assert(((ID4(1,3,5,7) >> shift) & mask) == 5, "");
   return vmSymbols::SID( (info >> shift) & mask );
 }
 
 vmIntrinsics::Flags vmIntrinsics::flags_for(vmIntrinsics::ID id) {
-  jint info = intrinsic_info(id);
+  jlong info = intrinsic_info(id);
   int shift = 0, mask = right_n_bits(log2_FLAG_LIMIT);
   assert(((ID4(1,3,5,7) >> shift) & mask) == 7, "");
   return Flags( (info >> shift) & mask );



More information about the hotspot-compiler-dev mailing list