Mercurial > hg > truffle
view graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/BigMixedParams04.java @ 16934:fc33fd65fbe5
[SPARC] new Unittests for IntegerBits, Switch (with byte, short, char values) and high float register pressure, sign extending short from heap
author | Stefan Anzinger <stefan.anzinger@gmail.com> |
---|---|
date | Mon, 25 Aug 2014 10:24:08 -0700 |
parents | 5391f043d5f5 |
children | ae0f235469db |
line wrap: on
line source
/* * Copyright (c) 2007, 2012, 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. */ /* * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. */ package com.oracle.graal.jtt.micro; import org.junit.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.jtt.*; /** * Tests different alignment on the stack with extended parameters (index > 5) */ public class BigMixedParams04 extends JTTTest { @SuppressWarnings("unused") public static long test(int choice, int i0, int i1, int i2, int i3, double d1, double d2, boolean bo1, boolean bo2, byte by, short sh, char ch, int in) { switch (choice) { case 0: return bo1 ? 1l : 2l; case 1: return bo2 ? 1l : 2l; case 2: return by; case 3: return sh; case 4: return ch; case 5: return in; } return 42; } /** * Test SPARC mixed params with double/single float register overlapping * * @param f1 * @param d2 * @param f3 * @return Must always return the argument d2 */ @SuppressWarnings("all") public static double test2(int i1, float f1, double d2, float f3, // @formatter:off double ad1 , double ad2 , double ad3 , double ad4 , double ad5 , double ad6 , double ad7 , double ad8 , double ad9 , double ad10, double ad11, double ad12, double ad13, double ad14, double ad15, double ad16, float af1 , float af2 , float af3 , float af4 , float af5 , float af6 , float af7 , float af8 , float af9 , float af10, float af11, float af12, float af13, float af14, float af15, float af16 // @formatter:on ) { // now do something with the locals to make sure the locals don't get optimized away. for (int i = 0; i < i1; i++) { af1 += f1; af2 += f1; af3 += f1; af4 += f1; af5 += f1; af6 += f1; af7 += f1; af8 += f1; af9 += f1; af10 += f1; af11 += f1; af12 += f1; af13 += f1; af14 += f1; af15 += f1; af16 += f1; ad1 += f1; ad2 += f1; ad3 += f1; ad4 += f1; ad5 += f1; ad6 += f1; ad7 += f1; ad8 += f1; ad9 += f1; ad10 += f1; ad11 += f1; ad12 += f1; ad13 += f1; ad14 += f1; ad15 += f1; ad16 += f1; } // @formatter:off boolean orderFloat = af1 < af2 && af2 < af3 && af3 < af4 && af4 < af5 && af5 < af6 && af6 < af7 && af7 < af8 && af8 < af9 && af9 < af10 && af10 < af11 && af11 < af12 && af12 < af13 && af13 < af14 && af14 < af15 && af15 < af16; boolean orderDouble = ad1 < ad2 && ad2 < ad3 && ad3 < ad4 && ad4 < ad5 && ad5 < ad6 && ad6 < ad7 && ad7 < ad8 && ad8 < ad9 && ad9 < ad10 && ad10 < ad11 && ad11 < ad12 && ad12 < ad13 && ad13 < ad14 && ad14 < ad15 && ad15 < ad16; // @formatter:on if (orderDouble && orderFloat) { return f1 + d2 + f3; // this should not be destroyed } Assert.fail(); return 0.0; } /** * Test SPARC mixed params with double/single float register overlapping * * @param f1 * @param d2 * @param f3 * @return Must always return the argument d2 */ @SuppressWarnings("all") public static double test3(boolean f, int idx, // @formatter:off double ad1 , double ad2 , double ad3 , double ad4 , double ad5 , double ad6 , double ad7 , double ad8 , double ad9 , double ad10, double ad11, double ad12, double ad13, double ad14, double ad15, double ad16, float af1 , float af2 , float af3 , float af4 , float af5 , float af6 , float af7 , float af8 , float af9 , float af10, float af11, float af12, float af13, float af14, float af15, float af16 ) { switch(f ? idx + 16 : idx) { case 1 : return ad1 ; case 2 : return ad2 ; case 3 : return ad3 ; case 4 : return ad4 ; case 5 : return ad5 ; case 6 : return ad6 ; case 7 : return ad7 ; case 8 : return ad8 ; case 9 : return ad9 ; case 10: return ad10; case 11: return ad11; case 12: return ad12; case 13: return ad13; case 14: return ad14; case 15: return ad15; case 16: return ad16; case 1 + 16: return af1 ; case 2 + 16: return af2 ; case 3 + 16: return af3 ; case 4 + 16: return af4 ; case 5 + 16: return af5 ; case 6 + 16: return af6 ; case 7 + 16: return af7 ; case 8 + 16: return af8 ; case 9 + 16: return af9 ; case 10 + 16: return af10; case 11 + 16: return af11; case 12 + 16: return af12; case 13 + 16: return af13; case 14 + 16: return af14; case 15 + 16: return af15; case 16 + 16: return af16; } Assert.fail(); // should not reach here return 0; } // @formatter:on @Test public void run0() throws Throwable { runTest("test", 0, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run1() throws Throwable { runTest("test", 1, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run2() throws Throwable { runTest("test", 2, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run3() throws Throwable { runTest("test", 3, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run4() throws Throwable { runTest("test", 4, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run5() throws Throwable { runTest("test", 5, -1, -1, -1, -1, 1d, 2d, true, false, (byte) -128, (short) -0x7FFF, (char) 0xFFFF, -0x7FFFFFF); } @Test public void run6() throws Throwable { // @formatter:off runTest("test2", 20, 1.0f, -3.2912948246387967943231233d, 3.0f, 1d, 2d, 3d, 4d, 5d, 6d, 7d, 8d, 9d, 10d, 11d, 12d, 13d, 14d, 15d, 16d, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f ); // @formatter:on } @Test public void run7() throws Throwable { // @formatter:off for(int i =0; i<32*2; i++) runTest("test3", i%2==0, i/2, 1d, 2d, 3d, 4d, 5d, 6d, 7d, 8d, 9d, 10d, 11d, 12d, 13d, 14d, 15d, 16d, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f ); // @formatter:on } }