# HG changeset patch # User Doug Simon # Date 1363683416 -3600 # Node ID 733e2b88ff2658dfd25e3b2c85796697468e3c82 # Parent 2e27c84305a2f7740b372b6473723604dcf572de moved HotSpot specific AMD64FrameOmissionTest to (new) project com.oracle.graal.hotspot.amd64.test and renamed it to AMD64HotSpotFrameOmissionTest diff -r 2e27c84305a2 -r 733e2b88ff26 graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/AMD64FrameOmissionTest.java --- a/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/AMD64FrameOmissionTest.java Tue Mar 19 09:51:40 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +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.compiler.amd64.test; - -import static com.oracle.graal.amd64.AMD64.*; - -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.compiler.test.*; -import com.oracle.graal.phases.*; - -/** - * Ensures that frame omission works in cases where it is expected to. - */ -public class AMD64FrameOmissionTest extends GraalCompilerTest { - - interface CodeGenerator { - - void generateCode(AMD64Assembler asm); - } - - public static void test1snippet() { - return; - } - - @Test - public void test1() { - testHelper("test1snippet", new CodeGenerator() { - - @Override - public void generateCode(AMD64Assembler asm) { - asm.ret(0); - } - }); - } - - public static int test2snippet(int x) { - return x + 5; - } - - @Test - public void test2() { - testHelper("test2snippet", new CodeGenerator() { - - @Override - public void generateCode(AMD64Assembler asm) { - asm.addl(rsi, 5); - asm.movl(rax, rsi); - asm.ret(0); - } - }); - } - - public static double test3snippet(double x) { - return 42.0D / x; - } - - @Test - public void test3() { - testHelper("test3snippet", new CodeGenerator() { - - @Override - public void generateCode(AMD64Assembler asm) { - asm.movsd(xmm1, new AMD64Address(rip, -40)); - asm.divsd(xmm1, xmm0); - asm.movapd(xmm0, xmm1); - asm.ret(0); - } - }); - } - - private void testHelper(String name, CodeGenerator gen) { - Method method = getMethod(name); - ResolvedJavaMethod javaMethod = runtime.lookupJavaMethod(method); - InstalledCode installedCode = getCode(javaMethod, parse(method)); - - CodeCacheProvider codeCache = Graal.getRequiredCapability(CodeCacheProvider.class); - TargetDescription target = codeCache.getTarget(); - RegisterConfig registerConfig = codeCache.lookupRegisterConfig(); - AMD64Assembler asm = new AMD64Assembler(target, registerConfig); - - gen.generateCode(asm); - for (int i = 0; i < GraalOptions.MethodEndBreakpointGuards; ++i) { - asm.int3(); - } - while ((asm.codeBuffer.position() % 8) != 0) { - asm.hlt(); - } - - byte[] expectedCode = asm.codeBuffer.close(true); - byte[] actualCode = installedCode.getCode(); - - Assert.assertArrayEquals(expectedCode, actualCode); - } -} diff -r 2e27c84305a2 -r 733e2b88ff26 graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/AMD64HotSpotFrameOmissionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/AMD64HotSpotFrameOmissionTest.java Tue Mar 19 09:56:56 2013 +0100 @@ -0,0 +1,121 @@ +/* + * 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.hotspot.amd64.test; + +import static com.oracle.graal.amd64.AMD64.*; + +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.compiler.test.*; +import com.oracle.graal.phases.*; + +/** + * Ensures that frame omission works in cases where it is expected to. + */ +public class AMD64HotSpotFrameOmissionTest extends GraalCompilerTest { + + interface CodeGenerator { + + void generateCode(AMD64Assembler asm); + } + + public static void test1snippet() { + return; + } + + @Test + public void test1() { + testHelper("test1snippet", new CodeGenerator() { + + @Override + public void generateCode(AMD64Assembler asm) { + asm.ret(0); + } + }); + } + + public static int test2snippet(int x) { + return x + 5; + } + + @Test + public void test2() { + testHelper("test2snippet", new CodeGenerator() { + + @Override + public void generateCode(AMD64Assembler asm) { + asm.addl(rsi, 5); + asm.movl(rax, rsi); + asm.ret(0); + } + }); + } + + public static double test3snippet(double x) { + return 42.0D / x; + } + + @Test + public void test3() { + testHelper("test3snippet", new CodeGenerator() { + + @Override + public void generateCode(AMD64Assembler asm) { + asm.movsd(xmm1, new AMD64Address(rip, -40)); + asm.divsd(xmm1, xmm0); + asm.movapd(xmm0, xmm1); + asm.ret(0); + } + }); + } + + private void testHelper(String name, CodeGenerator gen) { + Method method = getMethod(name); + ResolvedJavaMethod javaMethod = runtime.lookupJavaMethod(method); + InstalledCode installedCode = getCode(javaMethod, parse(method)); + + CodeCacheProvider codeCache = Graal.getRequiredCapability(CodeCacheProvider.class); + TargetDescription target = codeCache.getTarget(); + RegisterConfig registerConfig = codeCache.lookupRegisterConfig(); + AMD64Assembler asm = new AMD64Assembler(target, registerConfig); + + gen.generateCode(asm); + for (int i = 0; i < GraalOptions.MethodEndBreakpointGuards; ++i) { + asm.int3(); + } + while ((asm.codeBuffer.position() % 8) != 0) { + asm.hlt(); + } + + byte[] expectedCode = asm.codeBuffer.close(true); + byte[] actualCode = installedCode.getCode(); + + Assert.assertArrayEquals(expectedCode, actualCode); + } +} diff -r 2e27c84305a2 -r 733e2b88ff26 mx/projects --- a/mx/projects Tue Mar 19 09:51:40 2013 +0100 +++ b/mx/projects Tue Mar 19 09:56:56 2013 +0100 @@ -114,6 +114,13 @@ project@com.oracle.graal.hotspot.test@checkstyle=com.oracle.graal.graph project@com.oracle.graal.hotspot.test@javaCompliance=1.7 +# graal.hotspot.amd64.test +project@com.oracle.graal.hotspot.amd64.test@subDir=graal +project@com.oracle.graal.hotspot.amd64.test@sourceDirs=src +project@com.oracle.graal.hotspot.amd64.test@dependencies=com.oracle.graal.hotspot.amd64,com.oracle.graal.compiler.test +project@com.oracle.graal.hotspot.amd64.test@checkstyle=com.oracle.graal.graph +project@com.oracle.graal.hotspot.amd64.test@javaCompliance=1.7 + # graal.graph project@com.oracle.graal.graph@subDir=graal project@com.oracle.graal.graph@sourceDirs=src