7915a1fc4c
Reviewed-by: kvn
846 lines
37 KiB
Java
846 lines
37 KiB
Java
/*
|
|
* Copyright (c) 2019, 2021, 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.
|
|
*/
|
|
|
|
/**
|
|
* @test
|
|
* @bug 8248830 8256823
|
|
* @summary Support for scalar rotates ([Integer/Long].rotate[Left/Right]).
|
|
* @library /test/lib
|
|
* @run main/othervm/timeout=600 -XX:-TieredCompilation -XX:CompileThreshold=1000 -Xbatch
|
|
* -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure
|
|
* compiler.intrinsics.TestRotate
|
|
*/
|
|
package compiler.intrinsics;
|
|
|
|
public class TestRotate {
|
|
|
|
static final int ITERS = 50000;
|
|
static final int[] INT_VALUES = {Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 1, 2, 3, 5, 8, 13};
|
|
static final long[] LONG_VALUES = {Long.MIN_VALUE, Long.MAX_VALUE, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
// expected resules
|
|
static final int[] TEST_ROR_OR_INT_1_EXPECTED = {1073741824, -1073741825, 0, -2147483648, 1, -2147483647, -2147483646, 4, -2147483642};
|
|
|
|
static final int[] TEST_ROR_OR_INT_16_EXPECTED = {32768, -32769, 0, 65536, 131072, 196608, 327680, 524288, 851968};
|
|
|
|
static final int[] TEST_ROR_OR_INT_31_EXPECTED = {1, -2, 0, 2, 4, 6, 10, 16, 26};
|
|
|
|
static final int[] TEST_ROR_OR_INT_32_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
|
|
|
|
static final long[] TEST_ROR_OR_LONG_1_EXPECTED = {4611686018427387904L, -4611686018427387905L, 0L, -9223372036854775808L, 1L, -9223372036854775807L, -9223372036854775806L, 4L, -9223372036854775802L};
|
|
|
|
static final long[] TEST_ROR_OR_LONG_16_EXPECTED = {140737488355328L, -140737488355329L, 0L, 281474976710656L, 562949953421312L, 844424930131968L, 1407374883553280L, 2251799813685248L, 3659174697238528L};
|
|
|
|
static final long[] TEST_ROR_OR_LONG_63_EXPECTED = {1L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
|
|
|
|
static final long[] TEST_ROR_OR_LONG_64_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
static final int[] TEST_ROR_ADD_INT_1_EXPECTED = TEST_ROR_OR_INT_1_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_ADD_INT_16_EXPECTED = TEST_ROR_OR_INT_16_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_ADD_INT_31_EXPECTED = TEST_ROR_OR_INT_31_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_ADD_INT_32_EXPECTED = {0, -2, 0, 2, 4, 6, 10, 16, 26};
|
|
|
|
static final long[] TEST_ROR_ADD_LONG_1_EXPECTED = TEST_ROR_OR_LONG_1_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_ADD_LONG_16_EXPECTED = TEST_ROR_OR_LONG_16_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_ADD_LONG_63_EXPECTED = TEST_ROR_OR_LONG_63_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_ADD_LONG_64_EXPECTED = {0L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
|
|
|
|
// eor shift expected
|
|
static final int[] TEST_EOR_ROR_SHIFT_1_INT_EXPECTED = {-1073741824, -1073741824, 0, -2147483647, 3, -2147483646, -2147483641, 12, -2147483637};
|
|
|
|
static final int[] TEST_EOR_ROR_SHIFT_16_INT_EXPECTED = {-2147450880, -2147450880, 0, 65537, 131074, 196611, 327685, 524296, 851981};
|
|
|
|
static final int[] TEST_EOR_ROR_SHIFT_31_INT_EXPECTED = {-2147483647, -2147483647, 0, 3, 6, 5, 15, 24, 23};
|
|
|
|
static final int[] TEST_EOR_ROR_SHIFT_32_INT_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
|
|
static final long[] TEST_EOR_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387904L, -4611686018427387904L, 0L, -9223372036854775807L, 3L, -9223372036854775806L, -9223372036854775801L, 12L, -9223372036854775797L};
|
|
|
|
static final long[] TEST_EOR_ROR_SHIFT_16_LONG_EXPECTED = {-9223231299366420480L, -9223231299366420480L, 0L, 281474976710657L, 562949953421314L, 844424930131971L, 1407374883553285L, 2251799813685256L, 3659174697238541L};
|
|
|
|
static final long[] TEST_EOR_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775807L, -9223372036854775807L, 0L, 3L, 6L, 5L, 15L, 24L, 23L};
|
|
|
|
static final long[] TEST_EOR_ROR_SHIFT_64_LONG_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
|
|
// and shift expected
|
|
static final int[] TEST_AND_ROR_SHIFT_1_INT_EXPECTED = {0, 1073741823, 0, 0, 0, 1, 0, 0, 4};
|
|
|
|
static final int[] TEST_AND_ROR_SHIFT_16_INT_EXPECTED = {0, 2147450879, 0, 0, 0, 0, 0, 0, 0};
|
|
|
|
static final int[] TEST_AND_ROR_SHIFT_31_INT_EXPECTED = {0, 2147483646, 0, 0, 0, 2, 0, 0, 8};
|
|
|
|
static final int[] TEST_AND_ROR_SHIFT_32_INT_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
|
|
|
|
static final long[] TEST_AND_ROR_SHIFT_1_LONG_EXPECTED = {0L, 4611686018427387903L, 0L, 0L, 0L, 1L, 0L, 0L, 4L};
|
|
|
|
static final long[] TEST_AND_ROR_SHIFT_16_LONG_EXPECTED = {0L, 9223231299366420479L, 0L, 0L, 0L, 0L, 0L, 0L, 0L};
|
|
|
|
static final long[] TEST_AND_ROR_SHIFT_63_LONG_EXPECTED = {0L, 9223372036854775806L, 0L, 0L, 0L, 2L, 0L, 0L, 8L};
|
|
|
|
static final long[] TEST_AND_ROR_SHIFT_64_LONG_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
// or shift expected
|
|
static final int[] TEST_OR_ROR_SHIFT_1_INT_EXPECTED = {-1073741824, -1, 0, -2147483647, 3, -2147483645, -2147483641, 12, -2147483633};
|
|
|
|
static final int[] TEST_OR_ROR_SHIFT_16_INT_EXPECTED = {-2147450880, -1, 0, 65537, 131074, 196611, 327685, 524296, 851981};
|
|
|
|
static final int[] TEST_OR_ROR_SHIFT_31_INT_EXPECTED = {-2147483647, -1, 0, 3, 6, 7, 15, 24, 31};
|
|
|
|
static final int[] TEST_OR_ROR_SHIFT_32_INT_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
|
|
|
|
static final long[] TEST_OR_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387904L, -1L, 0L, -9223372036854775807L, 3L, -9223372036854775805L, -9223372036854775801L, 12L, -9223372036854775793L};
|
|
|
|
static final long[] TEST_OR_ROR_SHIFT_16_LONG_EXPECTED = {-9223231299366420480L, -1L, 0L, 281474976710657L, 562949953421314L, 844424930131971L, 1407374883553285L, 2251799813685256L, 3659174697238541L};
|
|
|
|
static final long[] TEST_OR_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775807L, -1L, 0L, 3L, 6L, 7L, 15L, 24L, 31L};
|
|
|
|
static final long[] TEST_OR_ROR_SHIFT_64_LONG_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
// eon shift expected
|
|
static final int[] TEST_EON_ROR_SHIFT_1_INT_EXPECTED = {1073741823, 1073741823, -1, 2147483646, -4, 2147483645, 2147483640, -13, 2147483636};
|
|
|
|
static final int[] TEST_EON_ROR_SHIFT_16_INT_EXPECTED = {2147450879, 2147450879, -1, -65538, -131075, -196612, -327686, -524297, -851982};
|
|
|
|
static final int[] TEST_EON_ROR_SHIFT_31_INT_EXPECTED = {2147483646, 2147483646, -1, -4, -7, -6, -16, -25, -24};
|
|
|
|
static final int[] TEST_EON_ROR_SHIFT_32_INT_EXPECTED = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
|
|
|
|
static final long[] TEST_EON_ROR_SHIFT_1_LONG_EXPECTED = {4611686018427387903L, 4611686018427387903L, -1L, 9223372036854775806L, -4L, 9223372036854775805L, 9223372036854775800L, -13L, 9223372036854775796L};
|
|
|
|
static final long[] TEST_EON_ROR_SHIFT_16_LONG_EXPECTED = {9223231299366420479L, 9223231299366420479L, -1L, -281474976710658L, -562949953421315L, -844424930131972L, -1407374883553286L, -2251799813685257L, -3659174697238542L};
|
|
|
|
static final long[] TEST_EON_ROR_SHIFT_63_LONG_EXPECTED = {9223372036854775806L, 9223372036854775806L, -1L, -4L, -7L, -6L, -16L, -25L, -24L};
|
|
|
|
static final long[] TEST_EON_ROR_SHIFT_64_LONG_EXPECTED = {-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L};
|
|
|
|
// bic shift expected
|
|
static final int[] TEST_BIC_ROR_SHIFT_1_INT_EXPECTED = {-2147483648, 1073741824, 0, 1, 2, 2, 5, 8, 9};
|
|
|
|
static final int[] TEST_BIC_ROR_SHIFT_16_INT_EXPECTED = {-2147483648, 32768, 0, 1, 2, 3, 5, 8, 13};
|
|
|
|
static final int[] TEST_BIC_ROR_SHIFT_31_INT_EXPECTED = {-2147483648, 1, 0, 1, 2, 1, 5, 8, 5};
|
|
|
|
static final int[] TEST_BIC_ROR_SHIFT_32_INT_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
|
|
static final long[] TEST_BIC_ROR_SHIFT_1_LONG_EXPECTED = {-9223372036854775808L, 4611686018427387904L, 0L, 1L, 2L, 2L, 5L, 8L, 9L};
|
|
|
|
static final long[] TEST_BIC_ROR_SHIFT_16_LONG_EXPECTED = {-9223372036854775808L, 140737488355328L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
static final long[] TEST_BIC_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775808L, 1L, 0L, 1L, 2L, 1L, 5L, 8L, 5L};
|
|
|
|
static final long[] TEST_BIC_ROR_SHIFT_64_LONG_EXPECTED = {0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L};
|
|
|
|
// orn shift expected
|
|
static final int[] TEST_ORN_ROR_SHIFT_1_INT_EXPECTED = {-1073741825, 2147483647, -1, 2147483647, -2, 2147483647, 2147483645, -5, 2147483645};
|
|
|
|
static final int[] TEST_ORN_ROR_SHIFT_16_INT_EXPECTED = {-32769, 2147483647, -1, -65537, -131073, -196609, -327681, -524289, -851969};
|
|
|
|
static final int[] TEST_ORN_ROR_SHIFT_31_INT_EXPECTED = {-2, 2147483647, -1, -3, -5, -5, -11, -17, -19};
|
|
|
|
static final int[] TEST_ORN_ROR_SHIFT_32_INT_EXPECTED = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
|
|
|
|
static final long[] TEST_ORN_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387905L, 9223372036854775807L, -1L, 9223372036854775807L, -2L, 9223372036854775807L, 9223372036854775805L, -5L, 9223372036854775805L};
|
|
|
|
static final long[] TEST_ORN_ROR_SHIFT_16_LONG_EXPECTED = {-140737488355329L, 9223372036854775807L, -1L, -281474976710657L, -562949953421313L, -844424930131969L, -1407374883553281L, -2251799813685249L, -3659174697238529L};
|
|
|
|
static final long[] TEST_ORN_ROR_SHIFT_63_LONG_EXPECTED = {-2L, 9223372036854775807L, -1L, -3L, -5L, -5L, -11L, -17L, -19L};
|
|
|
|
static final long[] TEST_ORN_ROR_SHIFT_64_LONG_EXPECTED = {-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L};
|
|
|
|
static final int[] TEST_ROR_INT_API_1_EXPECTED = TEST_ROR_OR_INT_1_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_INT_API_16_EXPECTED = TEST_ROR_OR_INT_16_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_INT_API_31_EXPECTED = TEST_ROR_OR_INT_31_EXPECTED;
|
|
|
|
static final int[] TEST_ROR_INT_API_32_EXPECTED = TEST_ROR_OR_INT_32_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_LONG_API_1_EXPECTED = TEST_ROR_OR_LONG_1_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_LONG_API_16_EXPECTED = TEST_ROR_OR_LONG_16_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_LONG_API_63_EXPECTED = TEST_ROR_OR_LONG_63_EXPECTED;
|
|
|
|
static final long[] TEST_ROR_LONG_API_64_EXPECTED = TEST_ROR_OR_LONG_64_EXPECTED;
|
|
|
|
static final int[] TEST_ROL_INT_API_1_EXPECTED = {1, -2, 0, 2, 4, 6, 10, 16, 26};
|
|
|
|
static final int[] TEST_ROL_INT_API_16_EXPECTED = {32768, -32769, 0, 65536, 131072, 196608, 327680, 524288, 851968};
|
|
|
|
static final int[] TEST_ROL_INT_API_31_EXPECTED = {1073741824, -1073741825, 0, -2147483648, 1, -2147483647, -2147483646, 4, -2147483642};
|
|
|
|
static final int[] TEST_ROL_INT_API_32_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
|
|
|
|
static final long[] TEST_ROL_LONG_API_1_EXPECTED = {1L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
|
|
|
|
static final long[] TEST_ROL_LONG_API_16_EXPECTED = {32768L, -32769L, 0L, 65536L, 131072L, 196608L, 327680L, 524288L, 851968L};
|
|
|
|
static final long[] TEST_ROL_LONG_API_63_EXPECTED = {4611686018427387904L, -4611686018427387905L, 0L, -9223372036854775808L, 1L, -9223372036854775807L, -9223372036854775806L, 4L, -9223372036854775802L};
|
|
|
|
static final long[] TEST_ROL_LONG_API_64_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
|
|
|
|
// verify
|
|
static void verify(String text, long ref, long actual) {
|
|
if (ref != actual) {
|
|
System.err.println(text + " " + ref + " != " + actual);
|
|
throw new Error("Fail");
|
|
}
|
|
}
|
|
|
|
static void verify(String text, int ref, int actual) {
|
|
if (ref != actual) {
|
|
System.err.println(text + " " + ref + " != " + actual);
|
|
throw new Error("Fail");
|
|
}
|
|
}
|
|
|
|
// ror test constant
|
|
public static int testRorOrInt1(int val) {
|
|
return (val >>> 1) | (val << (32 - 1));
|
|
}
|
|
|
|
public static int testRorOrInt16(int val) {
|
|
return (val >>> 16) | (val << (32 - 16));
|
|
}
|
|
|
|
public static int testRorOrInt31(int val) {
|
|
return (val >>> 31) | (val << (32 - 31));
|
|
}
|
|
|
|
public static int testRorOrInt32(int val) {
|
|
return (val >>> 32) | (val << (32 - 32));
|
|
}
|
|
|
|
public static long testRorOrLong1(long val) {
|
|
return (val >>> 1) | (val << (64 - 1));
|
|
}
|
|
|
|
public static long testRorOrLong16(long val) {
|
|
return (val >>> 16) | (val << (64 - 16));
|
|
}
|
|
|
|
public static long testRorOrLong63(long val) {
|
|
return (val >>> 63) | (val << (64 - 63));
|
|
}
|
|
|
|
public static long testRorOrLong64(long val) {
|
|
return (val >>> 64) | (val << (64 - 64));
|
|
}
|
|
|
|
public static int testRorAddInt1(int val) {
|
|
return (val >>> 1) + (val << (32 - 1));
|
|
}
|
|
|
|
public static int testRorAddInt16(int val) {
|
|
return (val >>> 16) + (val << (32 - 16));
|
|
}
|
|
|
|
public static int testRorAddInt31(int val) {
|
|
return (val >>> 31) + (val << (32 - 31));
|
|
}
|
|
|
|
public static int testRorAddInt32(int val) {
|
|
return (val >>> 32) + (val << (32 - 32));
|
|
}
|
|
|
|
public static long testRorAddLong1(long val) {
|
|
return (val >>> 1) + (val << (64 - 1));
|
|
}
|
|
|
|
public static long testRorAddLong16(long val) {
|
|
return (val >>> 16) + (val << (64 - 16));
|
|
}
|
|
|
|
public static long testRorAddLong63(long val) {
|
|
return (val >>> 63) + (val << (64 - 63));
|
|
}
|
|
|
|
public static long testRorAddLong64(long val) {
|
|
return (val >>> 64) + (val << (64 - 64));
|
|
}
|
|
|
|
// eor(ROR shift)
|
|
public static int testRorOrInt1Eor(int val) {
|
|
return val ^ ((val >>> 1) | (val << (32 - 1)));
|
|
}
|
|
|
|
public static int testRorOrInt16Eor(int val) {
|
|
return val ^ ((val >>> 16) | (val << (32 - 16)));
|
|
}
|
|
|
|
public static int testRorOrInt31Eor(int val) {
|
|
return val ^ ((val >>> 31) | (val << (32 - 31)));
|
|
}
|
|
|
|
public static int testRorOrInt32Eor(int val) {
|
|
return val ^ ((val >>> 32) | (val << (32 - 32)));
|
|
}
|
|
|
|
public static long testRorOrLong1Eor(long val) {
|
|
return val ^ ((val >>> 1) | (val << (64 - 1)));
|
|
}
|
|
|
|
public static long testRorOrLong16Eor(long val) {
|
|
return val ^ ((val >>> 16) | (val << (64 - 16)));
|
|
}
|
|
|
|
public static long testRorOrLong63Eor(long val) {
|
|
return val ^ ((val >>> 63) | (val << (64 - 63)));
|
|
}
|
|
|
|
public static long testRorOrLong64Eor(long val) {
|
|
return val ^ ((val >>> 64) | (val << (64 - 64)));
|
|
}
|
|
|
|
// and(ROR shift)
|
|
public static int testRorOrInt1And(int val) {
|
|
return val & ((val >>> 1) | (val << (32 - 1)));
|
|
}
|
|
|
|
public static int testRorOrInt16And(int val) {
|
|
return val & ((val >>> 16) | (val << (32 - 16)));
|
|
}
|
|
|
|
public static int testRorOrInt31And(int val) {
|
|
return val & ((val >>> 31) | (val << (32 - 31)));
|
|
}
|
|
|
|
public static int testRorOrInt32And(int val) {
|
|
return val & ((val >>> 32) | (val << (32 - 32)));
|
|
}
|
|
|
|
public static long testRorOrLong1And(long val) {
|
|
return val & ((val >>> 1) | (val << (64 - 1)));
|
|
}
|
|
|
|
public static long testRorOrLong16And(long val) {
|
|
return val & ((val >>> 16) | (val << (64 - 16)));
|
|
}
|
|
|
|
public static long testRorOrLong63And(long val) {
|
|
return val & ((val >>> 63) | (val << (64 - 63)));
|
|
}
|
|
|
|
public static long testRorOrLong64And(long val) {
|
|
return val & ((val >>> 64) | (val << (64 - 64)));
|
|
}
|
|
|
|
// or(ROR shift)
|
|
public static int testRorOrInt1Or(int val) {
|
|
return val | ((val >>> 1) | (val << (32 - 1)));
|
|
}
|
|
|
|
public static int testRorOrInt16Or(int val) {
|
|
return val | ((val >>> 16) | (val << (32 - 16)));
|
|
}
|
|
|
|
public static int testRorOrInt31Or(int val) {
|
|
return val | ((val >>> 31) | (val << (32 - 31)));
|
|
}
|
|
|
|
public static int testRorOrInt32Or(int val) {
|
|
return val | ((val >>> 32) | (val << (32 - 32)));
|
|
}
|
|
|
|
public static long testRorOrLong1Or(long val) {
|
|
return val | ((val >>> 1) | (val << (64 - 1)));
|
|
}
|
|
|
|
public static long testRorOrLong16Or(long val) {
|
|
return val | ((val >>> 16) | (val << (64 - 16)));
|
|
}
|
|
|
|
public static long testRorOrLong63Or(long val) {
|
|
return val | ((val >>> 63) | (val << (64 - 63)));
|
|
}
|
|
|
|
public static long testRorOrLong64Or(long val) {
|
|
return val | ((val >>> 64) | (val << (64 - 64)));
|
|
}
|
|
|
|
// eon (ROR shift)
|
|
public static int testRorOrInt1Eon(int val) {
|
|
return val ^ (-1 ^ ((val >>> 1) | (val << (32 - 1))));
|
|
}
|
|
|
|
public static int testRorOrInt16Eon(int val) {
|
|
return val ^ (-1 ^ ((val >>> 16) | (val << (32 - 16))));
|
|
}
|
|
|
|
public static int testRorOrInt31Eon(int val) {
|
|
return val ^ (-1 ^ ((val >>> 31) | (val << (32 - 31))));
|
|
}
|
|
|
|
public static int testRorOrInt32Eon(int val) {
|
|
return val ^ (-1 ^ ((val >>> 32) | (val << (32 - 32))));
|
|
}
|
|
|
|
public static long testRorOrLong1Eon(long val) {
|
|
return val ^ (-1 ^ ((val >>> 1) | (val << (64 - 1))));
|
|
}
|
|
|
|
public static long testRorOrLong16Eon(long val) {
|
|
return val ^ (-1 ^ ((val >>> 16) | (val << (64 - 16))));
|
|
}
|
|
|
|
public static long testRorOrLong63Eon(long val) {
|
|
return val ^ (-1 ^ ((val >>> 63) | (val << (64 - 63))));
|
|
}
|
|
|
|
public static long testRorOrLong64Eon(long val) {
|
|
return val ^ (-1 ^ ((val >>> 64) | (val << (64 - 64))));
|
|
}
|
|
|
|
// and (ROR shift)
|
|
public static int testRorOrInt1Bic(int val) {
|
|
return val & (-1 ^ ((val >>> 1) | (val << (32 - 1))));
|
|
}
|
|
|
|
public static int testRorOrInt16Bic(int val) {
|
|
return val & (-1 ^ ((val >>> 16) | (val << (32 - 16))));
|
|
}
|
|
|
|
public static int testRorOrInt31Bic(int val) {
|
|
return val & (-1 ^ ((val >>> 31) | (val << (32 - 31))));
|
|
}
|
|
|
|
public static int testRorOrInt32Bic(int val) {
|
|
return val & (-1 ^ ((val >>> 32) | (val << (32 - 32))));
|
|
}
|
|
|
|
public static long testRorOrLong1Bic(long val) {
|
|
return val & (-1 ^ ((val >>> 1) | (val << (64 - 1))));
|
|
}
|
|
|
|
public static long testRorOrLong16Bic(long val) {
|
|
return val & (-1 ^ ((val >>> 16) | (val << (64 - 16))));
|
|
}
|
|
|
|
public static long testRorOrLong63Bic(long val) {
|
|
return val & (-1 ^ ((val >>> 63) | (val << (64 - 63))));
|
|
}
|
|
|
|
public static long testRorOrLong64Bic(long val) {
|
|
return val & (-1 ^ ((val >>> 64) | (val << (64 - 64))));
|
|
}
|
|
|
|
// or (ROR shift)
|
|
public static int testRorOrInt1Orn(int val) {
|
|
return val | (-1 ^ ((val >>> 1) | (val << (32 - 1))));
|
|
}
|
|
|
|
public static int testRorOrInt16Orn(int val) {
|
|
return val | (-1 ^ ((val >>> 16) | (val << (32 - 16))));
|
|
}
|
|
|
|
public static int testRorOrInt31Orn(int val) {
|
|
return val | (-1 ^ ((val >>> 31) | (val << (32 - 31))));
|
|
}
|
|
|
|
public static int testRorOrInt32Orn(int val) {
|
|
return val | (-1 ^ ((val >>> 32) | (val << (32 - 32))));
|
|
}
|
|
|
|
public static long testRorOrLong1Orn(long val) {
|
|
return val | (-1 ^ ((val >>> 1) | (val << (64 - 1))));
|
|
}
|
|
|
|
public static long testRorOrLong16Orn(long val) {
|
|
return val | (-1 ^ ((val >>> 16) | (val << (64 - 16))));
|
|
}
|
|
|
|
public static long testRorOrLong63Orn(long val) {
|
|
return val | (-1 ^ ((val >>> 63) | (val << (64 - 63))));
|
|
}
|
|
|
|
public static long testRorOrLong64Orn(long val) {
|
|
return val | (-1 ^ ((val >>> 64) | (val << (64 - 64))));
|
|
}
|
|
|
|
// test rotate API
|
|
public static int testRorIntApi(int val, int distance) {
|
|
return Integer.rotateRight(val, distance);
|
|
}
|
|
|
|
public static long testRorLongApi(long val, int distance) {
|
|
return Long.rotateRight(val, distance);
|
|
}
|
|
|
|
public static int testRolIntApi(int val, int distance) {
|
|
return Integer.rotateLeft(val, distance);
|
|
}
|
|
|
|
public static long testRolLongApi(long val, int distance) {
|
|
return Long.rotateLeft(val, distance);
|
|
}
|
|
|
|
public static void testRolIntZero(int val) {
|
|
// Count is known to be zero only after loop opts
|
|
int count = 42;
|
|
for (int i = 0; i < 4; i++) {
|
|
if ((i % 2) == 0) {
|
|
count = 0;
|
|
}
|
|
}
|
|
int res = Integer.rotateLeft(val, count);
|
|
if (res != val) {
|
|
throw new RuntimeException("test_rol_int_zero failed: " + res + " != " + val);
|
|
}
|
|
}
|
|
|
|
public static void testRolLongZero(long val) {
|
|
// Count is known to be zero only after loop opts
|
|
int count = 42;
|
|
for (int i = 0; i < 4; i++) {
|
|
if ((i % 2) == 0) {
|
|
count = 0;
|
|
}
|
|
}
|
|
long res = Long.rotateLeft(val, count);
|
|
if (res != val) {
|
|
throw new RuntimeException("test_rol_long_zero failed: " + res + " != " + val);
|
|
}
|
|
}
|
|
|
|
public static void testRorIntZero(int val) {
|
|
// Count is known to be zero only after loop opts
|
|
int count = 42;
|
|
for (int i = 0; i < 4; i++) {
|
|
if ((i % 2) == 0) {
|
|
count = 0;
|
|
}
|
|
}
|
|
int res = Integer.rotateRight(val, count);
|
|
if (res != val) {
|
|
throw new RuntimeException("test_ror_int_zero failed: " + res + " != " + val);
|
|
}
|
|
}
|
|
|
|
public static void testRorLongZero(long val) {
|
|
// Count is known to be zero only after loop opts
|
|
int count = 42;
|
|
for (int i = 0; i < 4; i++) {
|
|
if ((i % 2) == 0) {
|
|
count = 0;
|
|
}
|
|
}
|
|
long res = Long.rotateRight(val, count);
|
|
if (res != val) {
|
|
throw new RuntimeException("test_ror_long_zero failed: " + res + " != " + val);
|
|
}
|
|
}
|
|
|
|
public static void testRorOrInts() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1(" + val + ")", testRorOrInt1(val), TEST_ROR_OR_INT_1_EXPECTED[i]);
|
|
verify("testRorOrInt16(" + val + ")", testRorOrInt16(val), TEST_ROR_OR_INT_16_EXPECTED[i]);
|
|
verify("testRorOrInt31(" + val + ")", testRorOrInt31(val), TEST_ROR_OR_INT_31_EXPECTED[i]);
|
|
verify("testRorOrInt32(" + val + ")", testRorOrInt32(val), TEST_ROR_OR_INT_32_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorAddInts() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorAddInt1(" + val + ")", testRorAddInt1(val), TEST_ROR_ADD_INT_1_EXPECTED[i]);
|
|
verify("testRorAddInt16(" + val + ")", testRorAddInt16(val), TEST_ROR_ADD_INT_16_EXPECTED[i]);
|
|
verify("testRorAddInt31(" + val + ")", testRorAddInt31(val), TEST_ROR_ADD_INT_31_EXPECTED[i]);
|
|
verify("testRorAddInt32(" + val + ")", testRorAddInt32(val), TEST_ROR_ADD_INT_32_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntEors() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1Eor(" + val + ")", testRorOrInt1Eor(val), TEST_EOR_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16Eor(" + val + ")", testRorOrInt16Eor(val), TEST_EOR_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31Eor(" + val + ")", testRorOrInt31Eor(val), TEST_EOR_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32Eor(" + val + ")", testRorOrInt32Eor(val), TEST_EOR_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntAnds() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1And(" + val + ")", testRorOrInt1And(val), TEST_AND_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16And(" + val + ")", testRorOrInt16And(val), TEST_AND_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31And(" + val + ")", testRorOrInt31And(val), TEST_AND_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32And(" + val + ")", testRorOrInt32And(val), TEST_AND_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntOrs() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1Or(" + val + ")", testRorOrInt1Or(val), TEST_OR_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16Or(" + val + ")", testRorOrInt16Or(val), TEST_OR_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31Or(" + val + ")", testRorOrInt31Or(val), TEST_OR_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32Or(" + val + ")", testRorOrInt32Or(val), TEST_OR_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntEons() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1Eon(" + val + ")", testRorOrInt1Eon(val), TEST_EON_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16Eon(" + val + ")", testRorOrInt16Eon(val), TEST_EON_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31Eon(" + val + ")", testRorOrInt31Eon(val), TEST_EON_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32Eon(" + val + ")", testRorOrInt32Eon(val), TEST_EON_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntBics() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1Bic(" + val + ")", testRorOrInt1Bic(val), TEST_BIC_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16Bic(" + val + ")", testRorOrInt16Bic(val), TEST_BIC_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31Bic(" + val + ")", testRorOrInt31Bic(val), TEST_BIC_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32Bic(" + val + ")", testRorOrInt32Bic(val), TEST_BIC_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrIntOrns() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorOrInt1Orn(" + val + ")", testRorOrInt1Orn(val), TEST_ORN_ROR_SHIFT_1_INT_EXPECTED[i]);
|
|
verify("testRorOrInt16Orn(" + val + ")", testRorOrInt16Orn(val), TEST_ORN_ROR_SHIFT_16_INT_EXPECTED[i]);
|
|
verify("testRorOrInt31Orn(" + val + ")", testRorOrInt31Orn(val), TEST_ORN_ROR_SHIFT_31_INT_EXPECTED[i]);
|
|
verify("testRorOrInt32Orn(" + val + ")", testRorOrInt32Orn(val), TEST_ORN_ROR_SHIFT_32_INT_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorIntApis() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRorIntApi(" + val + ", 1)", testRorIntApi(val, 1), TEST_ROR_INT_API_1_EXPECTED[i]);
|
|
verify("testRorIntApi(" + val + ", 16)", testRorIntApi(val, 16), TEST_ROR_INT_API_16_EXPECTED[i]);
|
|
verify("testRorIntApi(" + val + ", 31)", testRorIntApi(val, 31), TEST_ROR_INT_API_31_EXPECTED[i]);
|
|
verify("testRorIntApi(" + val + ", 32)", testRorIntApi(val, 32), TEST_ROR_INT_API_32_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRolIntApis() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
verify("testRolIntApi(" + val + ", 1)", testRolIntApi(val, 1), TEST_ROL_INT_API_1_EXPECTED[i]);
|
|
verify("testRolIntApi(" + val + ", 16)", testRolIntApi(val, 16), TEST_ROL_INT_API_16_EXPECTED[i]);
|
|
verify("testRolIntApi(" + val + ", 31)", testRolIntApi(val, 31), TEST_ROL_INT_API_31_EXPECTED[i]);
|
|
verify("testRolIntApi(" + val + ", 32)", testRolIntApi(val, 32), TEST_ROL_INT_API_32_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRolrIntZeros() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < INT_VALUES.length; i++) {
|
|
int val = INT_VALUES[i];
|
|
testRolIntZero(val);
|
|
testRorIntZero(val);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongs() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1(" + val + ")", testRorOrLong1(val), TEST_ROR_OR_LONG_1_EXPECTED[i]);
|
|
verify("testRorOrLong16(" + val + ")", testRorOrLong16(val), TEST_ROR_OR_LONG_16_EXPECTED[i]);
|
|
verify("testRorOrLong63(" + val + ")", testRorOrLong63(val), TEST_ROR_OR_LONG_63_EXPECTED[i]);
|
|
verify("testRorOrLong64(" + val + ")", testRorOrLong64(val), TEST_ROR_OR_LONG_64_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorAddLongs() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorAddLong1(" + val + ")", testRorAddLong1(val), TEST_ROR_ADD_LONG_1_EXPECTED[i]);
|
|
verify("testRorAddLong16(" + val + ")", testRorAddLong16(val), TEST_ROR_ADD_LONG_16_EXPECTED[i]);
|
|
verify("testRorAddLong63(" + val + ")", testRorAddLong63(val), TEST_ROR_ADD_LONG_63_EXPECTED[i]);
|
|
verify("testRorAddLong64(" + val + ")", testRorAddLong64(val), TEST_ROR_ADD_LONG_64_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongEors() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1Eor(" + val + ")", testRorOrLong1Eor(val), TEST_EOR_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16Eor(" + val + ")", testRorOrLong16Eor(val), TEST_EOR_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63Eor(" + val + ")", testRorOrLong63Eor(val), TEST_EOR_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64Eor(" + val + ")", testRorOrLong64Eor(val), TEST_EOR_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongAnds() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1And(" + val + ")", testRorOrLong1And(val), TEST_AND_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16And(" + val + ")", testRorOrLong16And(val), TEST_AND_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63And(" + val + ")", testRorOrLong63And(val), TEST_AND_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64And(" + val + ")", testRorOrLong64And(val), TEST_AND_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongOrs() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1Or(" + val + ")", testRorOrLong1Or(val), TEST_OR_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16Or(" + val + ")", testRorOrLong16Or(val), TEST_OR_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63Or(" + val + ")", testRorOrLong63Or(val), TEST_OR_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64Or(" + val + ")", testRorOrLong64Or(val), TEST_OR_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongEons() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1Eon(" + val + ")", testRorOrLong1Eon(val), TEST_EON_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16Eon(" + val + ")", testRorOrLong16Eon(val), TEST_EON_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63Eon(" + val + ")", testRorOrLong63Eon(val), TEST_EON_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64Eon(" + val + ")", testRorOrLong64Eon(val), TEST_EON_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongBics() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1Bic(" + val + ")", testRorOrLong1Bic(val), TEST_BIC_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16Bic(" + val + ")", testRorOrLong16Bic(val), TEST_BIC_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63Bic(" + val + ")", testRorOrLong63Bic(val), TEST_BIC_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64Bic(" + val + ")", testRorOrLong64Bic(val), TEST_BIC_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorOrLongOrns() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorOrLong1Orn(" + val + ")", testRorOrLong1Orn(val), TEST_ORN_ROR_SHIFT_1_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong16Orn(" + val + ")", testRorOrLong16Orn(val), TEST_ORN_ROR_SHIFT_16_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong63Orn(" + val + ")", testRorOrLong63Orn(val), TEST_ORN_ROR_SHIFT_63_LONG_EXPECTED[i]);
|
|
verify("testRorOrLong64Orn(" + val + ")", testRorOrLong64Orn(val), TEST_ORN_ROR_SHIFT_64_LONG_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRorLongApis() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRorLongApi(" + val + ", 1)", testRorLongApi(val, 1), TEST_ROR_LONG_API_1_EXPECTED[i]);
|
|
verify("testRorLongApi(" + val + ", 16)", testRorLongApi(val, 16), TEST_ROR_LONG_API_16_EXPECTED[i]);
|
|
verify("testRorLongApi(" + val + ", 63)", testRorLongApi(val, 63), TEST_ROR_LONG_API_63_EXPECTED[i]);
|
|
verify("testRorLongApi(" + val + ", 64)", testRorLongApi(val, 64), TEST_ROR_LONG_API_64_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRolLongApis() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
verify("testRolLongApi(" + val + ", 1)", testRolLongApi(val, 1), TEST_ROL_LONG_API_1_EXPECTED[i]);
|
|
verify("testRolLongApi(" + val + ", 16)", testRolLongApi(val, 16), TEST_ROL_LONG_API_16_EXPECTED[i]);
|
|
verify("testRolLongApi(" + val + ", 63)", testRolLongApi(val, 63), TEST_ROL_LONG_API_63_EXPECTED[i]);
|
|
verify("testRolLongApi(" + val + ", 64)", testRolLongApi(val, 64), TEST_ROL_LONG_API_64_EXPECTED[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void testRolrLongZeros() {
|
|
for (int count = 0; count < ITERS; count++) {
|
|
for (int i = 0; i < LONG_VALUES.length; i++) {
|
|
long val = LONG_VALUES[i];
|
|
testRolLongZero(i);
|
|
testRorLongZero(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
testRorOrInts();
|
|
testRorAddInts();
|
|
testRorOrIntEors();
|
|
testRorOrIntAnds();
|
|
testRorOrIntOrs();
|
|
testRorOrIntEons();
|
|
testRorOrIntBics();
|
|
testRorOrIntOrns();
|
|
testRorIntApis();
|
|
testRolIntApis();
|
|
testRolrIntZeros();
|
|
|
|
testRorOrLongs();
|
|
testRorAddLongs();
|
|
testRorOrLongEors();
|
|
testRorOrLongAnds();
|
|
testRorOrLongOrs();
|
|
testRorOrLongEons();
|
|
testRorOrLongBics();
|
|
testRorOrLongOrns();
|
|
testRorLongApis();
|
|
testRolLongApis();
|
|
testRolrLongZeros();
|
|
}
|
|
|
|
}
|