Mercurial > hg > graal-compiler
changeset 2217:2a36994d0967
Fixed an issue where parameter registers were hard coded to Linux values.
author | Thomas Wuerthinger <thomas.wuerthinger@gmail.com> |
---|---|
date | Mon, 21 Feb 2011 21:16:29 +0100 |
parents | b966d9b66bf9 |
children | 686f5091af28 |
files | c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java |
diffstat | 1 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Mon Feb 21 20:51:59 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Mon Feb 21 21:16:29 2011 +0100 @@ -29,6 +29,7 @@ import com.sun.c1x.target.amd64.*; import com.sun.cri.ci.CiAddress.Scale; +import com.sun.cri.ci.CiRegister.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; import com.sun.cri.ri.RiType.Representation; @@ -320,7 +321,9 @@ final boolean useInfoAfter = true; if (config.useFastLocking) { - useRegisters(asm, AMD64.rbx, AMD64.rsi, AMD64.rdx, AMD64.rax); + useRegisters(asm, AMD64.rax, AMD64.rbx); + useRegisters(asm, getGeneralParameterRegister(0)); + useRegisters(asm, getGeneralParameterRegister(1)); asm.callRuntime(config.fastMonitorEnterStub, null, useInfoAfter, object, lock); } else { asm.reserveOutgoingStack(target.wordSize * 2); @@ -333,6 +336,10 @@ } }; + private static CiRegister getGeneralParameterRegister(int index) { + return Compiler.getInstance().getRegisterConfig().getCallingConventionRegisters(CiCallingConvention.Type.RuntimeCall, RegisterFlag.CPU)[index]; + } + private SimpleTemplates monitorExitTemplates = new SimpleTemplates(NULL_CHECK) { @Override @@ -342,7 +349,9 @@ XirParameter lock = asm.createInputParameter("lock", CiKind.Word); if (config.useFastLocking) { - useRegisters(asm, AMD64.rbx, AMD64.rsi, AMD64.rdx, AMD64.rax); + useRegisters(asm, AMD64.rax, AMD64.rbx); + useRegisters(asm, getGeneralParameterRegister(0)); + useRegisters(asm, getGeneralParameterRegister(1)); asm.callRuntime(config.fastMonitorExitStub, null, object, lock); } else { asm.reserveOutgoingStack(target.wordSize);