22 // questions. 23 // 24 // 25 26 import java.lang.invoke.MethodHandle; 27 import java.lang.invoke.MethodHandles; 28 import java.lang.invoke.MethodType; 29 import java.lang.reflect.Constructor; 30 import java.lang.reflect.Field; 31 import java.lang.reflect.Method; 32 import java.math.BigInteger; 33 import java.util.Arrays; 34 import java.util.Random; 35 36 /** 37 * @test 38 * @bug 8130150 39 * @library /testlibrary 40 * @requires (os.simpleArch == "x64") & (os.family != "windows") 41 * @summary Verify that the Montgomery multiply intrinsic works and correctly checks its arguments. 42 * @run main/othervm -XX:+UseMontgomerySquareIntrinsic -XX:+UseMontgomeryMultiplyIntrinsic 43 * MontgomeryMultiplyTest 44 * @run main/othervm -XX:+UseMontgomerySquareIntrinsic -XX:-UseMontgomeryMultiplyIntrinsic 45 * MontgomeryMultiplyTest 46 * @run main/othervm -XX:-UseMontgomerySquareIntrinsic -XX:+UseMontgomeryMultiplyIntrinsic 47 * MontgomeryMultiplyTest 48 */ 49 50 public class MontgomeryMultiplyTest { 51 52 static final MethodHandles.Lookup lookup = MethodHandles.lookup(); 53 54 static final MethodHandle montgomeryMultiplyHandle, montgomerySquareHandle; 55 static final MethodHandle bigIntegerConstructorHandle; 56 static final Field bigIntegerMagField; 57 58 static { 59 // Use reflection to gain access to the methods we want to test. 60 try { 61 Method m = BigInteger.class.getDeclaredMethod("montgomeryMultiply", 62 /*a*/int[].class, /*b*/int[].class, /*n*/int[].class, /*len*/int.class, 63 /*inv*/long.class, /*product*/int[].class); 64 m.setAccessible(true); 65 montgomeryMultiplyHandle = lookup.unreflect(m); 66 67 m = BigInteger.class.getDeclaredMethod("montgomerySquare", | 22 // questions. 23 // 24 // 25 26 import java.lang.invoke.MethodHandle; 27 import java.lang.invoke.MethodHandles; 28 import java.lang.invoke.MethodType; 29 import java.lang.reflect.Constructor; 30 import java.lang.reflect.Field; 31 import java.lang.reflect.Method; 32 import java.math.BigInteger; 33 import java.util.Arrays; 34 import java.util.Random; 35 36 /** 37 * @test 38 * @bug 8130150 39 * @library /testlibrary 40 * @requires (os.simpleArch == "x64") & (os.family != "windows") 41 * @summary Verify that the Montgomery multiply intrinsic works and correctly checks its arguments. 42 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseMontgomerySquareIntrinsic 43 * -XX:+UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest 44 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UseMontgomerySquareIntrinsic 45 * -XX:-UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest 46 * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseMontgomerySquareIntrinsic 47 * -XX:+UseMontgomeryMultiplyIntrinsic MontgomeryMultiplyTest 48 */ 49 50 public class MontgomeryMultiplyTest { 51 52 static final MethodHandles.Lookup lookup = MethodHandles.lookup(); 53 54 static final MethodHandle montgomeryMultiplyHandle, montgomerySquareHandle; 55 static final MethodHandle bigIntegerConstructorHandle; 56 static final Field bigIntegerMagField; 57 58 static { 59 // Use reflection to gain access to the methods we want to test. 60 try { 61 Method m = BigInteger.class.getDeclaredMethod("montgomeryMultiply", 62 /*a*/int[].class, /*b*/int[].class, /*n*/int[].class, /*len*/int.class, 63 /*inv*/long.class, /*product*/int[].class); 64 m.setAccessible(true); 65 montgomeryMultiplyHandle = lookup.unreflect(m); 66 67 m = BigInteger.class.getDeclaredMethod("montgomerySquare", |