1/*
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24package compiler.intrinsics.sha.cli.testcases;
25
26import compiler.intrinsics.sha.cli.SHAOptionsBase;
27import compiler.testlibrary.sha.predicate.IntrinsicPredicates;
28import jdk.test.lib.process.ExitCode;
29import jdk.test.lib.Platform;
30import jdk.test.lib.cli.CommandLineOptionTest;
31import jdk.test.lib.cli.predicate.AndPredicate;
32import jdk.test.lib.cli.predicate.NotPredicate;
33import jdk.test.lib.cli.predicate.OrPredicate;
34
35/**
36 * Test case specific to UseSHA*Intrinsics options targeted to SPARC and AArch64
37 * CPUs which don't support required instruction, but support other SHA-related
38 * instructions.
39 *
40 * For example, CPU support sha1 instruction, but don't support sha256 or
41 * sha512.
42 */
43public class UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU
44        extends SHAOptionsBase.TestCase {
45    public UseSHAIntrinsicsSpecificTestCaseForUnsupportedCPU(
46            String optionName) {
47        // execute test case on SPARC CPU that support any sha* instructions,
48        // but does not support sha* instruction required by the tested option.
49        super(optionName, new AndPredicate(
50                new OrPredicate(Platform::isSparc, Platform::isAArch64),
51                new AndPredicate(
52                        IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE,
53                        new NotPredicate(SHAOptionsBase.getPredicateForOption(
54                                optionName)))));
55    }
56    @Override
57    protected void verifyWarnings() throws Throwable {
58        String shouldPassMessage = String.format("JVM should start with "
59                + "'-XX:+%s' flag, but output should contain warning.",
60                optionName);
61        // Verify that attempt to enable the tested option will cause a warning
62        CommandLineOptionTest.verifySameJVMStartup(new String[] {
63                        SHAOptionsBase.getWarningForUnsupportedCPU(optionName)
64                }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK,
65                SHAOptionsBase.UNLOCK_DIAGNOSTIC_VM_OPTIONS,
66                CommandLineOptionTest.prepareBooleanFlag(optionName, true));
67    }
68}
69