8055903: Develop sanity tests on SPARC's SHA instructions support

Reviewed-by: kvn, iignatyev
This commit is contained in:
Filipp Zhinkin 2014-09-03 15:26:06 +04:00
parent 9f825ac4cb
commit 8381452775
8 changed files with 671 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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() {
}
}