changeset 6487:967a8fa8f210

modified VmErrorStubCall to use information provided by the (platform independent) backend
author Doug Simon <doug.simon@oracle.com>
date Tue, 02 Oct 2012 16:09:06 +0200
parents 6237b10b69db
children b3a75a3d9e1b
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java
diffstat 2 files changed, 22 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Tue Oct 02 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Tue Oct 02 16:09:06 2012 +0200
@@ -22,13 +22,12 @@
  */
 package com.oracle.graal.hotspot.nodes;
 
-import static com.oracle.graal.api.code.CallingConvention.Type.*;
-
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.gen.*;
 import com.oracle.graal.compiler.target.*;
 import com.oracle.graal.hotspot.*;
+import com.oracle.graal.hotspot.target.*;
 import com.oracle.graal.lir.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.type.*;
@@ -51,7 +50,6 @@
 
     @Override
     public void generate(LIRGenerator gen) {
-        long vmErrorStub = HotSpotGraalRuntime.getInstance().getConfig().vmErrorStub;
         String where;
         try {
             LIRFrameState state = gen.state();
@@ -61,9 +59,10 @@
             // Report a less accurate location when debug info cannot be obtained
             where = "in compiled code for " + MetaUtil.format("%H.%n(%p)", gen.method());
         }
-        Kind[] signature = new Kind[] {Kind.Object, Kind.Object, Kind.Long};
-        CallingConvention cc = gen.frameMap().registerConfig.getCallingConvention(RuntimeCall, Kind.Void, signature, gen.target(), false);
-        gen.emitCall(vmErrorStub, cc, false, Constant.forObject(where), gen.operand(format), gen.operand(value));
+
+        HotSpotBackend backend = (HotSpotBackend) HotSpotGraalRuntime.getInstance().getCompiler().backend;
+        HotSpotStub stub = backend.getStub("vm_error");
+        gen.emitCall(stub.address, stub.cc, false, Constant.forObject(where), gen.operand(format), gen.operand(value));
     }
 
     @NodeIntrinsic
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java	Tue Oct 02 15:28:05 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java	Tue Oct 02 16:09:06 2012 +0200
@@ -30,6 +30,7 @@
 import java.lang.reflect.*;
 
 import com.oracle.graal.api.code.*;
+import com.oracle.graal.api.code.Register.RegisterFlag;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.*;
 import com.oracle.graal.compiler.gen.*;
@@ -61,17 +62,22 @@
         HotSpotVMConfig c = hs.config;
         Kind word = target.wordKind;
 
+        Register[] jargs = hs.getGlobalStubRegisterConfig().getCallingConventionRegisters(RuntimeCall, RegisterFlag.CPU);
+        Register jarg0 = jargs[0];
+        Register jarg1 = jargs[1];
+        Register jarg2 = jargs[2];
+
         addStub("monitorenter", c.fastMonitorEnterStub,
                 /*        temps */ new Register[] {rax, rbx},
                 /*          ret */ IllegalValue,
-                /* arg0: object */ rsi.asValue(Kind.Object),
-                /* arg1:   lock */ rdx.asValue(word));
+                /* arg0: object */ jarg0.asValue(Kind.Object),
+                /* arg1:   lock */ jarg1.asValue(word));
 
         addStub("monitorexit", c.fastMonitorExitStub,
                 /*        temps */ new Register[] {rax, rbx},
                 /*          ret */ IllegalValue,
-                /* arg0: object */ rsi.asValue(Kind.Object),
-                /* arg1:   lock */ rdx.asValue(word));
+                /* arg0: object */ jarg0.asValue(Kind.Object),
+                /* arg1:   lock */ jarg1.asValue(word));
 
         addStub("new_object_array", c.newObjectArrayStub,
                 /*        temps */ new Register[] {rcx, rdi, rsi},
@@ -101,6 +107,13 @@
                 /*        temps */ null,
                 /*          ret */ IllegalValue,
                 /* arg0: object */ r13.asValue(Kind.Object));
+
+        addStub("vm_error", c.vmErrorStub,
+                /*        temps */ null,
+                /*          ret */ IllegalValue,
+                /* arg0:  where */ jarg0.asValue(Kind.Object),
+                /* arg1: format */ jarg1.asValue(Kind.Object),
+                /* arg2:  value */ jarg2.asValue(Kind.Object));
     }
 
     @Override