diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java @ 1427:149b1d2316de

basic invokeinterface and invokevirtual support
author Lukas Stadler <lukas.stadler@oracle.com>
date Wed, 18 Aug 2010 16:47:06 -0700
parents 760213a60e8b
children abc670a709dc
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java	Wed Aug 18 11:44:04 2010 -0700
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java	Wed Aug 18 16:47:06 2010 -0700
@@ -20,7 +20,7 @@
 import java.util.*;
 
 import com.sun.cri.ci.*;
-import com.sun.cri.ci.CiTargetMethod.Site;
+import com.sun.cri.ci.CiTargetMethod.*;
 
 /**
  * CiTargetMethod augmented with HotSpot-specific information.
@@ -54,21 +54,27 @@
     private Site[] getSortedSites(CiTargetMethod target) {
         List<?>[] lists = new List<?>[] {target.directCalls, target.indirectCalls, target.safepoints, target.dataReferences, target.exceptionHandlers, target.marks};
         int count = 0;
-        for (List<?> list: lists) {
+        for (List<?> list : lists) {
             count += list.size();
         }
         Site[] result = new Site[count];
         int pos = 0;
-        for (List<?> list: lists) {
-            for (Object elem: list) {
-                result[pos++] = (Site)elem;
+        for (List<?> list : lists) {
+            for (Object elem : list) {
+                result[pos++] = (Site) elem;
             }
         }
         Arrays.sort(result, new Comparator<Site>() {
+
             public int compare(Site s1, Site s2) {
+                if (s1.pcOffset == s2.pcOffset && (s1 instanceof Mark ^ s2 instanceof Mark)) {
+                    return s1 instanceof Mark ? -1 : 1;
+                }
                 return s1.pcOffset - s2.pcOffset;
             }
         });
+        for(Site site : result)
+            System.out.println(site.pcOffset + ": " + site);
         return result;
     }