diff c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java @ 1429:abc670a709dc

* -XX:TraceC1X=0...5 controls the native c1x tracing * -Dc1x.debug=true turns on the logging proxies and lots of log output on the java side * provide more information about types to the compiler (type hierarchy, etc) * provide exception handler tables to the compiler * add exception handlers to the nmethod * correct implementation of ExceptionObject * exception handling/unwinding entry points * modified versions of handle/unwind exception stubs using standard calling conventions * exception throwing * implicit null pointer exception, implicit div by 0 exception * arraystore/classcast/arrayindex exceptions * checkcast implementation * newarray, anewarray, multinewarray implementation * correct new instance initialization * access to java class mirrors (for ldc) * unresolved methods * class resolving - class patching (asssembly prototype copying)
author Lukas Stadler <lukas.stadler@oracle.com>
date Tue, 31 Aug 2010 22:13:30 -0700
parents 149b1d2316de
children 9e5e83ca2259
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java	Thu Aug 19 14:34:52 2010 -0700
+++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotTargetMethod.java	Tue Aug 31 22:13:30 2010 -0700
@@ -21,6 +21,7 @@
 
 import com.sun.cri.ci.*;
 import com.sun.cri.ci.CiTargetMethod.*;
+import com.sun.hotspot.c1x.logging.*;
 
 /**
  * CiTargetMethod augmented with HotSpot-specific information.
@@ -30,17 +31,23 @@
 public class HotSpotTargetMethod implements CompilerObject {
 
     public final CiTargetMethod targetMethod;
-    public final HotSpotMethod method;                  // used only for methods
-    public final String name;                           // used only for stubs
+    public final HotSpotMethodResolved method; // used only for methods
+    public final String name; // used only for stubs
 
     public final Site[] sites;
+    public final ExceptionHandler[] exceptionHandlers;
 
-    private HotSpotTargetMethod(HotSpotMethod method, CiTargetMethod targetMethod) {
+    private HotSpotTargetMethod(HotSpotMethodResolved method, CiTargetMethod targetMethod) {
         this.method = method;
         this.targetMethod = targetMethod;
         this.name = null;
 
         sites = getSortedSites(targetMethod);
+        if (targetMethod.exceptionHandlers == null) {
+            exceptionHandlers = null;
+        } else {
+            exceptionHandlers = targetMethod.exceptionHandlers.toArray(new ExceptionHandler[targetMethod.exceptionHandlers.size()]);
+        }
     }
 
     private HotSpotTargetMethod(CiTargetMethod targetMethod, String name) {
@@ -49,10 +56,12 @@
         this.name = name;
 
         sites = getSortedSites(targetMethod);
+        assert targetMethod.exceptionHandlers == null || targetMethod.exceptionHandlers.size() == 0;
+        exceptionHandlers = null;
     }
 
     private Site[] getSortedSites(CiTargetMethod target) {
-        List<?>[] lists = new List<?>[] {target.directCalls, target.indirectCalls, target.safepoints, target.dataReferences, target.exceptionHandlers, target.marks};
+        List<?>[] lists = new List<?>[] { target.directCalls, target.indirectCalls, target.safepoints, target.dataReferences, target.marks};
         int count = 0;
         for (List<?> list : lists) {
             count += list.size();
@@ -73,12 +82,13 @@
                 return s1.pcOffset - s2.pcOffset;
             }
         });
-        for(Site site : result)
-            System.out.println(site.pcOffset + ": " + site);
+        if (Logger.ENABLED)
+            for (Site site : result)
+                Logger.log(site.pcOffset + ": " + site);
         return result;
     }
 
-    public static void installMethod(HotSpotMethod method, CiTargetMethod targetMethod) {
+    public static void installMethod(HotSpotMethodResolved method, CiTargetMethod targetMethod) {
         Compiler.getVMEntries().installMethod(new HotSpotTargetMethod(method, targetMethod));
     }