# HG changeset patch # User Thomas Wuerthinger # Date 1298319389 -3600 # Node ID 2a36994d0967f7f29762885e3bc3edaf7cc58aa4 # Parent b966d9b66bf965f32e34a5f406b77cd7ed98cdb2 Fixed an issue where parameter registers were hard coded to Linux values. diff -r b966d9b66bf9 -r 2a36994d0967 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java --- 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);