# HG changeset patch # User Doug Simon # Date 1385081413 -3600 # Node ID b96536453a74cd0735a4d97befb76e710cbfc362 # Parent 58dfd753ada87365dcddead85ca7aad0d67b6a8e HSAIL: added support for LREM Contributed-by: Vasanth Venkatachalam diff -r 58dfd753ada8 -r b96536453a74 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/LongModTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/LongModTest.java Fri Nov 22 01:50:13 2013 +0100 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2009, 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.hsail.test; + +import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; +import org.junit.Test; + +/** + * Tests the remainder operation (%) on two longs. Generates a rem_s64 instruction. + */ +public class LongModTest extends GraalKernelTester { + + static final int num = 20; + @Result protected long[] outArray = new long[num]; + + /** + * The static "kernel" method we will be testing. By convention the gid is the last parameter. + * This routine performs the remainder operation (%) on elements from two input arrays and + * writes the result to the corresponding index of an output array. + * + * @param out the output array + * @param ina the first input array + * @param inb the second input array + * @param gid the parameter used to index into the input and output arrays + */ + public static void run(long[] out, long[] ina, long[] inb, int gid) { + out[gid] = (ina[gid] % inb[gid]); + } + + @Test + public void test() { + super.testGeneratedHsail(); + } + + /** + * Initialize input and output arrays. + * + * @param in first input array + * @param in2 second input array + */ + void setupArrays(long[] in, long[] in2) { + for (int i = 0; i < num; i++) { + // Fill input arrays with a mix of positive and negative values. + in[i] = i < num / 2 ? i + 1 : -(i + 1); + in2[i] = (i & 1) == 0 ? i + 10 : -(i + 10); + outArray[i] = 0; + } + } + + /** + * Dispatches the HSAIL kernel for this test case. + */ + @Override + public void runTest() { + long[] inArray = new long[num]; + long[] inArray2 = new long[num]; + setupArrays(inArray, inArray2); + dispatchMethodKernel(num, outArray, inArray, inArray2); + } + +} diff -r 58dfd753ada8 -r b96536453a74 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMethodThreeIntArrays.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMethodThreeIntArrays.java Fri Nov 22 01:40:16 2013 +0100 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticMethodThreeIntArrays.java Fri Nov 22 01:50:13 2013 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 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 @@ -24,15 +24,22 @@ package com.oracle.graal.compiler.hsail.test; /** - * Superclass that initializes two input arrays and one output array. Derived by some of the other - * test cases that take two arrays as input parameters. + * Superclass that initializes two input arrays containing ints and one output array. Derived by + * some of the other test cases that take two arrays of ints as input parameters. */ public abstract class StaticMethodThreeIntArrays extends StaticMethodTwoIntArrays { + /** + * Initialize the input and output arrays. + * + * @param in1 the first input array + * @param in2 the second input array + */ void setupArrays(int[] in1, int[] in2) { for (int i = 0; i < num; i++) { - in1[i] = i + 1; - in2[i] = in1[i] + 10; + // Fill input arrays with a mix of positive and negative values. + in1[i] = i < num / 2 ? i + 1 : -(i + 1); + in2[i] = (i & 1) == 0 ? in1[i] + 10 : -(in1[i] + 10); outArray[i] = -i; } } diff -r 58dfd753ada8 -r b96536453a74 graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILArithmetic.java --- a/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILArithmetic.java Fri Nov 22 01:40:16 2013 +0100 +++ b/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILArithmetic.java Fri Nov 22 01:50:13 2013 +0100 @@ -403,6 +403,7 @@ masm.emitForceBitwise("or", dst, src1, src2); break; case IREM: + case LREM: masm.emit("rem", dst, src1, src2); break; default: