7071427: AdapterFingerPrint can hold 8 entries per int
authornever
Wed, 27 Jul 2011 15:06:35 -0700
changeset 10254 406448a00c51
parent 10253 35b975b1e8f3
child 10255 bab46e6f7661
7071427: AdapterFingerPrint can hold 8 entries per int Reviewed-by: kvn
hotspot/src/share/vm/runtime/java.cpp
hotspot/src/share/vm/runtime/sharedRuntime.cpp
--- a/hotspot/src/share/vm/runtime/java.cpp	Tue Jul 26 19:35:23 2011 -0700
+++ b/hotspot/src/share/vm/runtime/java.cpp	Wed Jul 27 15:06:35 2011 -0700
@@ -243,6 +243,7 @@
     FlagSetting fs(DisplayVMOutput, DisplayVMOutput && PrintC1Statistics);
     Runtime1::print_statistics();
     Deoptimization::print_statistics();
+    SharedRuntime::print_statistics();
     nmethod::print_statistics();
   }
 #endif /* COMPILER1 */
@@ -254,8 +255,8 @@
 #ifndef COMPILER1
     Deoptimization::print_statistics();
     nmethod::print_statistics();
+    SharedRuntime::print_statistics();
 #endif //COMPILER1
-    SharedRuntime::print_statistics();
     os::print_statistics();
   }
 
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Tue Jul 26 19:35:23 2011 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Wed Jul 27 15:06:35 2011 -0700
@@ -2130,9 +2130,9 @@
  public:
   AdapterFingerPrint(int total_args_passed, BasicType* sig_bt) {
     // The fingerprint is based on the BasicType signature encoded
-    // into an array of ints with four entries per int.
+    // into an array of ints with eight entries per int.
     int* ptr;
-    int len = (total_args_passed + 3) >> 2;
+    int len = (total_args_passed + 7) >> 3;
     if (len <= (int)(sizeof(_value._compact) / sizeof(int))) {
       _value._compact[0] = _value._compact[1] = _value._compact[2] = 0;
       // Storing the signature encoded as signed chars hits about 98%
@@ -2145,11 +2145,11 @@
       ptr = _value._fingerprint;
     }
 
-    // Now pack the BasicTypes with 4 per int
+    // Now pack the BasicTypes with 8 per int
     int sig_index = 0;
     for (int index = 0; index < len; index++) {
       int value = 0;
-      for (int byte = 0; byte < 4; byte++) {
+      for (int byte = 0; byte < 8; byte++) {
         if (sig_index < total_args_passed) {
           value = (value << 4) | adapter_encoding(sig_bt[sig_index++]);
         }
@@ -2190,8 +2190,9 @@
 
   const char* as_string() {
     stringStream st;
+    st.print("0x");
     for (int i = 0; i < length(); i++) {
-      st.print(PTR_FORMAT, value(i));
+      st.print("%08x", value(i));
     }
     return st.as_string();
   }