changeset 7746:2c1ae1a125bd

Pull out test code that's useful for other assemblers.
author Roland Schatz <roland.schatz@oracle.com>
date Fri, 08 Feb 2013 11:49:48 +0100
parents 4c0a36672095
children 142dffbd0a5d
files graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/AMD64AssemblerTest.java graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java mx/projects
diffstat 4 files changed, 90 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/AMD64AssemblerTest.java	Thu Feb 07 18:59:56 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.graal.asm.amd64.test;
-
-import java.lang.reflect.*;
-
-import org.junit.*;
-
-import com.oracle.graal.api.code.*;
-import com.oracle.graal.api.meta.*;
-import com.oracle.graal.api.runtime.*;
-import com.oracle.graal.asm.amd64.*;
-import com.oracle.graal.test.*;
-
-public abstract class AMD64AssemblerTest extends GraalTest {
-
-    protected final CodeCacheProvider codeCache;
-
-    public interface CodeGenTest {
-
-        void generateCode(CompilationResult compResult, AMD64MacroAssembler asm, RegisterConfig registerConfig);
-    }
-
-    public AMD64AssemblerTest() {
-        this.codeCache = Graal.getRequiredCapability(CodeCacheProvider.class);
-    }
-
-    protected InstalledCode assembleMethod(Method m, CodeGenTest test) {
-        ResolvedJavaMethod method = codeCache.lookupJavaMethod(m);
-        RegisterConfig registerConfig = codeCache.lookupRegisterConfig(method);
-
-        CompilationResult compResult = new CompilationResult();
-        AMD64MacroAssembler asm = new AMD64MacroAssembler(codeCache.getTarget(), registerConfig);
-
-        test.generateCode(compResult, asm, registerConfig);
-
-        compResult.setTargetCode(asm.codeBuffer.close(true), asm.codeBuffer.position());
-        InstalledCode code = codeCache.addMethod(method, compResult, null);
-
-        return code;
-    }
-
-    protected void assertReturn(String methodName, CodeGenTest test, Object expected, Object... args) {
-        Method method = getMethod(methodName);
-        InstalledCode code = assembleMethod(method, test);
-
-        Object actual = code.executeVarargs(args);
-        Assert.assertEquals("unexpected return value: " + actual, actual, expected);
-    }
-}
--- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java	Thu Feb 07 18:59:56 2013 +0100
+++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java	Fri Feb 08 11:49:48 2013 +0100
@@ -27,15 +27,21 @@
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.asm.amd64.*;
+import com.oracle.graal.asm.test.*;
 
-public class SimpleAssemblerTest extends AMD64AssemblerTest {
+public class SimpleAssemblerTest extends AssemblerTest<AMD64MacroAssembler> {
+
+    @Override
+    protected AMD64MacroAssembler createAssembler(TargetDescription target, RegisterConfig registerConfig) {
+        return new AMD64MacroAssembler(target, registerConfig);
+    }
 
     @Test
     public void intTest() {
-        CodeGenTest test = new CodeGenTest() {
+        CodeGenTest<AMD64Assembler> test = new CodeGenTest<AMD64Assembler>() {
 
             @Override
-            public void generateCode(CompilationResult compResult, AMD64MacroAssembler asm, RegisterConfig registerConfig) {
+            public void generateCode(CompilationResult compResult, AMD64Assembler asm, RegisterConfig registerConfig) {
                 Register ret = registerConfig.getReturnRegister(Kind.Int);
                 asm.movl(ret, 8472);
                 asm.ret(0);
@@ -46,7 +52,7 @@
 
     @Test
     public void doubleTest() {
-        CodeGenTest test = new CodeGenTest() {
+        CodeGenTest<AMD64MacroAssembler> test = new CodeGenTest<AMD64MacroAssembler>() {
 
             @Override
             public void generateCode(CompilationResult compResult, AMD64MacroAssembler asm, RegisterConfig registerConfig) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java	Fri Feb 08 11:49:48 2013 +0100
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.asm.test;
+
+import java.lang.reflect.*;
+
+import org.junit.*;
+
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.api.meta.*;
+import com.oracle.graal.api.runtime.*;
+import com.oracle.graal.asm.*;
+import com.oracle.graal.test.*;
+
+public abstract class AssemblerTest<T extends AbstractAssembler> extends GraalTest {
+
+    protected final CodeCacheProvider codeCache;
+
+    public interface CodeGenTest<T> {
+
+        void generateCode(CompilationResult compResult, T asm, RegisterConfig registerConfig);
+    }
+
+    public AssemblerTest() {
+        this.codeCache = Graal.getRequiredCapability(CodeCacheProvider.class);
+    }
+
+    protected abstract T createAssembler(TargetDescription target, RegisterConfig registerConfig);
+
+    protected InstalledCode assembleMethod(Method m, CodeGenTest<? super T> test) {
+        ResolvedJavaMethod method = codeCache.lookupJavaMethod(m);
+        RegisterConfig registerConfig = codeCache.lookupRegisterConfig(method);
+
+        CompilationResult compResult = new CompilationResult();
+        T asm = createAssembler(codeCache.getTarget(), registerConfig);
+
+        test.generateCode(compResult, asm, registerConfig);
+
+        compResult.setTargetCode(asm.codeBuffer.close(true), asm.codeBuffer.position());
+        InstalledCode code = codeCache.addMethod(method, compResult, null);
+
+        return code;
+    }
+
+    protected void assertReturn(String methodName, CodeGenTest<? super T> test, Object expected, Object... args) {
+        Method method = getMethod(methodName);
+        InstalledCode code = assembleMethod(method, test);
+
+        Object actual = code.executeVarargs(args);
+        Assert.assertEquals("unexpected return value: " + actual, actual, expected);
+    }
+}
--- a/mx/projects	Thu Feb 07 18:59:56 2013 +0100
+++ b/mx/projects	Fri Feb 08 11:49:48 2013 +0100
@@ -276,6 +276,13 @@
 project@com.oracle.graal.asm@checkstyle=com.oracle.graal.graph
 project@com.oracle.graal.asm@javaCompliance=1.7
 
+# graal.asm.test
+project@com.oracle.graal.asm.test@subDir=graal
+project@com.oracle.graal.asm.test@sourceDirs=src
+project@com.oracle.graal.asm.test@dependencies=com.oracle.graal.api.runtime,com.oracle.graal.test,com.oracle.graal.asm
+project@com.oracle.graal.asm.test@checkstyle=com.oracle.graal.graph
+project@com.oracle.graal.asm.test@javaCompliance=1.7
+
 # graal.asm.amd64
 project@com.oracle.graal.asm.amd64@subDir=graal
 project@com.oracle.graal.asm.amd64@sourceDirs=src
@@ -286,7 +293,7 @@
 # graal.asm.amd64.test
 project@com.oracle.graal.asm.amd64.test@subDir=graal
 project@com.oracle.graal.asm.amd64.test@sourceDirs=src
-project@com.oracle.graal.asm.amd64.test@dependencies=com.oracle.graal.api.runtime,com.oracle.graal.test,com.oracle.graal.asm.amd64
+project@com.oracle.graal.asm.amd64.test@dependencies=com.oracle.graal.asm.test,com.oracle.graal.asm.amd64
 project@com.oracle.graal.asm.amd64.test@checkstyle=com.oracle.graal.graph
 project@com.oracle.graal.asm.amd64.test@javaCompliance=1.7