changeset 18961:afa70d3e8159

Allow users to provide their own TruffleRuntime implementation and add ForceInterpreter option to TruffleOptions.
author Paul Woegerer <paul.woegerer@oracle.com>
date Tue, 27 Jan 2015 14:11:52 +0100
parents 858b1e3ab2ee
children cfb85e1f4ca5
files graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java src/share/vm/graal/graalRuntime.cpp
diffstat 6 files changed, 22 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java	Tue Jan 27 12:05:41 2015 +0100
+++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java	Tue Jan 27 14:11:52 2015 +0100
@@ -63,7 +63,10 @@
  */
 public final class HotSpotTruffleRuntime extends GraalTruffleRuntime {
 
-    public static HotSpotTruffleRuntime makeInstance() {
+    public static TruffleRuntime makeInstance() {
+        if (GraalTruffleRuntime.alternateRuntime != null) {
+            return GraalTruffleRuntime.alternateRuntime;
+        }
         return new HotSpotTruffleRuntime();
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java	Tue Jan 27 12:05:41 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java	Tue Jan 27 14:11:52 2015 +0100
@@ -41,6 +41,8 @@
 
 public abstract class GraalTruffleRuntime implements TruffleRuntime {
 
+    public static TruffleRuntime alternateRuntime;
+
     private ArrayList<String> includes;
     private ArrayList<String> excludes;
 
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Tue Jan 27 12:05:41 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Tue Jan 27 14:11:52 2015 +0100
@@ -49,6 +49,14 @@
     }
 
     private static TruffleRuntime initRuntime() {
+        if (TruffleOptions.ForceInterpreter) {
+            /*
+             * Force Truffle to run in interpreter mode even if we have a specialized implementation
+             * of TruffleRuntime available.
+             */
+            return new DefaultTruffleRuntime();
+        }
+
         try {
             return AccessController.doPrivileged(new PrivilegedAction<TruffleRuntime>() {
                 public TruffleRuntime run() {
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Tue Jan 27 12:05:41 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Tue Jan 27 14:11:52 2015 +0100
@@ -34,6 +34,13 @@
 public class TruffleOptions {
 
     /**
+     * Force truffle to run in interpreter mode.
+     * <p>
+     * Can be set with {@code -Dtruffle.ForceInterpreter=true}.
+     */
+    public static boolean ForceInterpreter = Boolean.getBoolean("truffle.ForceInterpreter");
+
+    /**
      * Enables/disables the rewriting of traces in the Truffle runtime to stdout.
      * <p>
      * Can be set with {@code -Dtruffle.TraceRewrites=true}.
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Tue Jan 27 12:05:41 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Tue Jan 27 14:11:52 2015 +0100
@@ -44,9 +44,6 @@
     private final Map<RootCallTarget, Void> callTargets = Collections.synchronizedMap(new WeakHashMap<RootCallTarget, Void>());
 
     public DefaultTruffleRuntime() {
-        if (Truffle.getRuntime() != null) {
-            throw new IllegalArgumentException("Cannot instantiate DefaultTruffleRuntime. Use Truffle.getRuntime() instead.");
-        }
     }
 
     @Override
--- a/src/share/vm/graal/graalRuntime.cpp	Tue Jan 27 12:05:41 2015 +0100
+++ b/src/share/vm/graal/graalRuntime.cpp	Tue Jan 27 14:11:52 2015 +0100
@@ -684,7 +684,7 @@
   KlassHandle klass = GraalRuntime::resolve_or_fail(name, CHECK_NULL);
 
   TempNewSymbol makeInstance = SymbolTable::new_symbol("makeInstance", CHECK_NULL);
-  TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime;", CHECK_NULL);
+  TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/truffle/api/TruffleRuntime;", CHECK_NULL);
   JavaValue result(T_OBJECT);
   JavaCalls::call_static(&result, klass, makeInstance, sig, CHECK_NULL);
   return JNIHandles::make_local((oop) result.get_jobject());