# HG changeset patch # User Roland Schatz # Date 1360581179 -3600 # Node ID 98143feb3879a209e5208ed2b5e58410d4b1c5a0 # Parent 52fd6491fca8ae7c987825adaca9269c7d7b844e provide calling convention for assembler tests diff -r 52fd6491fca8 -r 98143feb3879 graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java --- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java Fri Feb 08 18:05:40 2013 +0100 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java Mon Feb 11 12:12:59 2013 +0100 @@ -37,7 +37,7 @@ CodeGenTest test = new CodeGenTest() { @Override - public Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig) { + public Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig, CallingConvention cc) { AMD64Assembler asm = new AMD64Assembler(target, registerConfig); Register ret = registerConfig.getReturnRegister(Kind.Int); asm.movl(ret, 8472); @@ -53,7 +53,7 @@ CodeGenTest test = new CodeGenTest() { @Override - public Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig) { + public Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig, CallingConvention cc) { AMD64MacroAssembler asm = new AMD64MacroAssembler(target, registerConfig); Register ret = registerConfig.getReturnRegister(Kind.Double); compResult.recordDataReference(asm.codeBuffer.position(), Constant.forDouble(84.72), 8, false); diff -r 52fd6491fca8 -r 98143feb3879 graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java --- a/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Fri Feb 08 18:05:40 2013 +0100 +++ b/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Mon Feb 11 12:12:59 2013 +0100 @@ -38,7 +38,7 @@ public interface CodeGenTest { - Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig); + Buffer generateCode(CompilationResult compResult, TargetDescription target, RegisterConfig registerConfig, CallingConvention cc); } public AssemblerTest() { @@ -51,17 +51,28 @@ CompilationResult compResult = new CompilationResult(); - Buffer codeBuffer = test.generateCode(compResult, codeCache.getTarget(), registerConfig); + Signature sig = method.getSignature(); + JavaType retType = sig.getReturnType(null); + JavaType[] argTypes = new JavaType[sig.getParameterCount(false)]; + for (int i = 0; i < argTypes.length; i++) { + argTypes[i] = sig.getParameterType(i, null); + } + CallingConvention cc = registerConfig.getCallingConvention(CallingConvention.Type.JavaCallee, retType, argTypes, codeCache.getTarget(), false); + + Buffer codeBuffer = test.generateCode(compResult, codeCache.getTarget(), registerConfig, cc); compResult.setTargetCode(codeBuffer.close(true), codeBuffer.position()); return codeCache.addMethod(method, compResult, null); } - protected void assertReturn(String methodName, CodeGenTest test, Object expected, Object... args) { + protected Object runTest(String methodName, CodeGenTest test, Object... args) { Method method = getMethod(methodName); InstalledCode code = assembleMethod(method, test); + return code.executeVarargs(args); + } - Object actual = code.executeVarargs(args); + protected void assertReturn(String methodName, CodeGenTest test, Object expected, Object... args) { + Object actual = runTest(methodName, test, args); Assert.assertEquals("unexpected return value: " + actual, actual, expected); } }