8055903: Develop sanity tests on SPARC's SHA instructions support
Reviewed-by: kvn, iignatyev
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/SHASanityTestBase.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import intrinsics.Verifier;
+import sun.hotspot.WhiteBox;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.function.BooleanSupplier;
+
+/**
+ * Base class for sanity tests on SHA intrinsics support.
+ */
+public class SHASanityTestBase {
+ protected static final String SHA1_INTRINSIC_ID
+ = "_sha_implCompress";
+ protected static final String SHA256_INTRINSIC_ID
+ = "_sha2_implCompress";
+ protected static final String SHA512_INTRINSIC_ID
+ = "_sha5_implCompress";
+ protected static final String MB_INTRINSIC_ID
+ = "_digestBase_implCompressMB";
+
+ private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
+ private static final int MSG_SIZE = 1024;
+ private static final int OFFSET = 0;
+ private static final int ITERATIONS = 10000;
+ private static final int WARMUP_ITERATIONS = 1;
+ private static final String PROVIDER = "SUN";
+
+ private final BooleanSupplier predicate;
+ private final String intrinsicID;
+
+ /**
+ * Construct the new test on intrinsic with ID {@code intrinsicID},
+ * which is expected to be emitted if {@code predicate} is evaluated to
+ * {@code true}.
+ *
+ * @param predicate The predicate indicating if the intrinsic is expected to
+ * be used.
+ * @param intrinsicID The ID of the intrinsic to be tested.
+ */
+ protected SHASanityTestBase(BooleanSupplier predicate, String intrinsicID) {
+ this.predicate = predicate;
+ this.intrinsicID = intrinsicID;
+ }
+
+ /**
+ * Run the test and dump properties to file.
+ *
+ * @throws Exception when something went wrong.
+ */
+ public final void test() throws Exception {
+ String algorithm = Objects.requireNonNull(
+ System.getProperty("algorithm"),
+ "Algorithm name should be specified.");
+
+ dumpProperties();
+
+ TestSHA.testSHA(SHASanityTestBase.PROVIDER, algorithm,
+ SHASanityTestBase.MSG_SIZE, SHASanityTestBase.OFFSET,
+ SHASanityTestBase.ITERATIONS,
+ SHASanityTestBase.WARMUP_ITERATIONS);
+ }
+
+ /**
+ * Dump properties containing information about the tested intrinsic name
+ * and whether or not is should be used to the file
+ * <LogFile value>.verify.properties.
+ *
+ * @throws IOException when something went wrong during dumping to file.
+ */
+ private void dumpProperties() throws IOException {
+ Properties properties = new Properties();
+ properties.setProperty(Verifier.INTRINSIC_NAME_PROPERTY, intrinsicID);
+ properties.setProperty(Verifier.INTRINSIC_IS_EXPECTED_PROPERTY,
+ String.valueOf(predicate.getAsBoolean()));
+
+ String logFileName
+ = SHASanityTestBase.WHITE_BOX.getStringVMFlag("LogFile");
+ FileOutputStream fileOutputStream = new FileOutputStream(logFileName
+ + Verifier.PROPERTY_FILE_SUFFIX);
+
+ properties.store(fileOutputStream, null);
+ fileOutputStream.close();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1Intrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2014, 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 8035968
+ * @summary Verify that SHA-1 intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA1Intrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA1Intrinsics
+ * -Dalgorithm=SHA-1 TestSHA1Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:-UseSHA1Intrinsics
+ * -Dalgorithm=SHA-1 TestSHA1Intrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive.log negative.log
+ */
+import sha.predicate.IntrinsicPredicates;
+
+public class TestSHA1Intrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA1_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.SHA1_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1MultiBlockIntrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import sha.predicate.IntrinsicPredicates;
+
+/**
+ * @test
+ * @bug 8035968
+ * @summary Verify that SHA-1 multi block intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA1MultiBlockIntrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA1Intrinsics -XX:-UseSHA256Intrinsics
+ * -XX:-UseSHA512Intrinsics
+ * -Dalgorithm=SHA-1 TestSHA1MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_def.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA1Intrinsics -Dalgorithm=SHA-1
+ * TestSHA1MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA -XX:-UseSHA
+ * -Dalgorithm=SHA-1 TestSHA1MultiBlockIntrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive.log positive_def.log
+ * negative.log
+ */
+public class TestSHA1MultiBlockIntrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA1_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.MB_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256Intrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import sha.predicate.IntrinsicPredicates;
+
+/**
+ * @test
+ * @bug 8035968
+ * @summary Verify that SHA-256 intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA256Intrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_224.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics
+ * -Dalgorithm=SHA-224 TestSHA256Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_224.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:-UseSHA256Intrinsics
+ * -Dalgorithm=SHA-224 TestSHA256Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_256.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics
+ * -Dalgorithm=SHA-256 TestSHA256Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_256.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:-UseSHA256Intrinsics
+ * -Dalgorithm=SHA-256 TestSHA256Intrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive_224.log positive_256.log
+ * negative_224.log negative_256.log
+ */
+public class TestSHA256Intrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA256_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.SHA256_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256MultiBlockIntrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import sha.predicate.IntrinsicPredicates;
+
+/**
+ * @test
+ * @bug 8035968
+ * @summary Verify that SHA-256 multi block intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA256MultiBlockIntrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_224.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics -XX:-UseSHA1Intrinsics
+ * -XX:-UseSHA512Intrinsics
+ * -Dalgorithm=SHA-224 TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_224_def.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics -Dalgorithm=SHA-224
+ * TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_224.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA -XX:-UseSHA
+ * -Dalgorithm=SHA-224 TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_256.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics -XX:-UseSHA1Intrinsics
+ * -XX:-UseSHA512Intrinsics
+ * -Dalgorithm=SHA-256 TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_256_def.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA256Intrinsics -Dalgorithm=SHA-256
+ * TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_256.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA -XX:-UseSHA
+ * -Dalgorithm=SHA-256 TestSHA256MultiBlockIntrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive_224.log positive_256.log
+ * positive_224_def.log positive_256_def.log negative_224.log
+ * negative_256.log
+ */
+public class TestSHA256MultiBlockIntrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA256_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.MB_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512Intrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import sha.predicate.IntrinsicPredicates;
+
+/**
+ * @test
+ * @bug 8035968
+ * @summary Verify that SHA-512 intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA512Intrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_384.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics
+ * -Dalgorithm=SHA-384 TestSHA512Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_384.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:-UseSHA512Intrinsics
+ * -Dalgorithm=SHA-384 TestSHA512Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_512.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics
+ * -Dalgorithm=SHA-512 TestSHA512Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_512.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:-UseSHA512Intrinsics
+ * -Dalgorithm=SHA-512 TestSHA512Intrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive_384.log positive_512.log
+ * negative_384.log negative_512.log
+ */
+public class TestSHA512Intrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA512_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.SHA512_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+import sha.predicate.IntrinsicPredicates;
+
+/**
+ * @test
+ * @bug 8035968
+ * @summary Verify that SHA-512 multi block intrinsic is actually used.
+ * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../
+ * @build TestSHA intrinsics.Verifier TestSHA512MultiBlockIntrinsics
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * sun.hotspot.WhiteBox$WhiteBoxPermission
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_384.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics -XX:-UseSHA1Intrinsics
+ * -XX:-UseSHA256Intrinsics
+ * -Dalgorithm=SHA-384 TestSHA512MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_384_def.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics -Dalgorithm=SHA-384
+ * TestSHA512MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_384.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA -XX:-UseSHA
+ * -Dalgorithm=SHA-384 TestSHA1Intrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_512.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics -XX:-UseSHA1Intrinsics
+ * -XX:-UseSHA256Intrinsics
+ * -Dalgorithm=SHA-512 TestSHA512MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=positive_512_def.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA
+ * -XX:+UseSHA512Intrinsics -Dalgorithm=SHA-512
+ * TestSHA512MultiBlockIntrinsics
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
+ * -XX:+WhiteBoxAPI -Xbatch -XX:CompileThreshold=500
+ * -XX:Tier4InvocationThreshold=500
+ * -XX:+LogCompilation -XX:LogFile=negative_512.log
+ * -XX:CompileOnly=sun/security/provider/DigestBase
+ * -XX:CompileOnly=sun/security/provider/SHA -XX:-UseSHA
+ * -Dalgorithm=SHA-512 TestSHA512MultiBlockIntrinsics
+ * @run main/othervm -DverificationStrategy=VERIFY_INTRINSIC_USAGE
+ * intrinsics.Verifier positive_384.log positive_512.log
+ * positive_384_def.log positive_512_def.log negative_384.log
+ * negative_512.log
+ */
+public class TestSHA512MultiBlockIntrinsics {
+ public static void main(String args[]) throws Exception {
+ new SHASanityTestBase(IntrinsicPredicates.SHA512_INTRINSICS_AVAILABLE,
+ SHASanityTestBase.MB_INTRINSIC_ID).test();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/testlibrary/sha/predicate/IntrinsicPredicates.java Wed Sep 03 15:26:06 2014 +0400
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2014, 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 sha.predicate;
+
+import com.oracle.java.testlibrary.Platform;
+import com.oracle.java.testlibrary.cli.predicate.AndPredicate;
+import com.oracle.java.testlibrary.cli.predicate.CPUSpecificPredicate;
+import com.oracle.java.testlibrary.cli.predicate.OrPredicate;
+import sun.hotspot.WhiteBox;
+
+import java.util.function.BooleanSupplier;
+
+/**
+ * Helper class aimed to provide predicates on availability of SHA-related
+ * CPU instructions and intrinsics.
+ */
+public class IntrinsicPredicates {
+ private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
+ private static final long TIERED_MAX_LEVEL = 4L;
+ /**
+ * Boolean supplier that check if any method could be compiled by C2.
+ * Method potentially could be compiled by C2 if Server VM is used and
+ * either tiered compilation is disabled or TIERED_MAX_LEVEL tier is
+ * reachable.
+ *
+ * Please don't place this definition after SHA*_INTRINSICS_AVAILABLE
+ * definitions. Otherwise its value will be {@code null} at the time when
+ * all dependent fields will be initialized.
+ */
+ private static final BooleanSupplier COMPILABLE_BY_C2 = () -> {
+ boolean isTiered = IntrinsicPredicates.WHITE_BOX.getBooleanVMFlag(
+ "TieredCompilation");
+ long tieredMaxLevel = IntrinsicPredicates.WHITE_BOX.getIntxVMFlag(
+ "TieredStopAtLevel");
+ boolean maxLevelIsReachable = (tieredMaxLevel
+ == IntrinsicPredicates.TIERED_MAX_LEVEL);
+ return Platform.isServer() && (!isTiered || maxLevelIsReachable);
+ };
+
+ public static final BooleanSupplier SHA1_INSTRUCTION_AVAILABLE
+ = new CPUSpecificPredicate("sparc.*", new String[] { "sha1" },
+ null);
+
+ public static final BooleanSupplier SHA256_INSTRUCTION_AVAILABLE
+ = new CPUSpecificPredicate("sparc.*", new String[] { "sha256" },
+ null);
+
+ public static final BooleanSupplier SHA512_INSTRUCTION_AVAILABLE
+ = new CPUSpecificPredicate("sparc.*", new String[] { "sha512" },
+ null);
+
+ public static final BooleanSupplier ANY_SHA_INSTRUCTION_AVAILABLE
+ = new OrPredicate(IntrinsicPredicates.SHA1_INSTRUCTION_AVAILABLE,
+ new OrPredicate(
+ IntrinsicPredicates.SHA256_INSTRUCTION_AVAILABLE,
+ IntrinsicPredicates.SHA512_INSTRUCTION_AVAILABLE));
+
+ public static final BooleanSupplier SHA1_INTRINSICS_AVAILABLE
+ = new AndPredicate(new AndPredicate(
+ IntrinsicPredicates.SHA1_INSTRUCTION_AVAILABLE,
+ IntrinsicPredicates.COMPILABLE_BY_C2),
+ IntrinsicPredicates.booleanOptionValue("UseSHA1Intrinsics"));
+
+ public static final BooleanSupplier SHA256_INTRINSICS_AVAILABLE
+ = new AndPredicate(new AndPredicate(
+ IntrinsicPredicates.SHA256_INSTRUCTION_AVAILABLE,
+ IntrinsicPredicates.COMPILABLE_BY_C2),
+ IntrinsicPredicates.booleanOptionValue("UseSHA256Intrinsics"));
+
+ public static final BooleanSupplier SHA512_INTRINSICS_AVAILABLE
+ = new AndPredicate(new AndPredicate(
+ IntrinsicPredicates.SHA512_INSTRUCTION_AVAILABLE,
+ IntrinsicPredicates.COMPILABLE_BY_C2),
+ IntrinsicPredicates.booleanOptionValue("UseSHA512Intrinsics"));
+
+ private static BooleanSupplier booleanOptionValue(String option) {
+ return () -> IntrinsicPredicates.WHITE_BOX.getBooleanVMFlag(option);
+ }
+
+ private IntrinsicPredicates() {
+ }
+}