Mercurial > hg > truffle
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