# HG changeset patch # User Doug Simon # Date 1349186946 -7200 # Node ID 967a8fa8f210b17f75d7828252a2025acdecbb19 # Parent 6237b10b69db4c409e45bb116f70daca69cb980a modified VmErrorStubCall to use information provided by the (platform independent) backend diff -r 6237b10b69db -r 967a8fa8f210 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java --- 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 diff -r 6237b10b69db -r 967a8fa8f210 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/amd64/HotSpotAMD64Backend.java --- 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