78 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: 79 return SHAOptionsBase.SHA1_INSTRUCTION_IS_NOT_AVAILABLE; 80 case SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION: 81 return SHAOptionsBase.SHA256_INSTRUCTION_IS_NOT_AVAILABLE; 82 case SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION: 83 return SHAOptionsBase.SHA512_INSTRUCTION_IS_NOT_AVAILABLE; 84 default: 85 throw new Error("Unexpected option " + optionName); 86 } 87 } else if (Platform.isX64() || Platform.isX86()) { 88 switch (optionName) { 89 case SHAOptionsBase.USE_SHA_OPTION: 90 return SHAOptionsBase.SHA_INSTRUCTIONS_ARE_NOT_AVAILABLE; 91 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: 92 case SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION: 93 case SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION: 94 return SHAOptionsBase.SHA_INTRINSICS_ARE_NOT_AVAILABLE; 95 default: 96 throw new Error("Unexpected option " + optionName); 97 } 98 } else { 99 throw new Error("Support for CPUs other then X86 or SPARC is not " 100 + "implemented."); 101 } 102 } 103 104 /** 105 * Returns the predicate indicating whether or not CPU instructions required 106 * by the option with name {@code optionName} are available. 107 * 108 * @param optionName The name of the option for which a predicate should be 109 * returned. 110 * @return The predicate on availability of CPU instructions required by the 111 * option. 112 */ 113 protected static BooleanSupplier getPredicateForOption(String optionName) { 114 switch (optionName) { 115 case SHAOptionsBase.USE_SHA_OPTION: 116 return IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE; 117 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: | 78 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: 79 return SHAOptionsBase.SHA1_INSTRUCTION_IS_NOT_AVAILABLE; 80 case SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION: 81 return SHAOptionsBase.SHA256_INSTRUCTION_IS_NOT_AVAILABLE; 82 case SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION: 83 return SHAOptionsBase.SHA512_INSTRUCTION_IS_NOT_AVAILABLE; 84 default: 85 throw new Error("Unexpected option " + optionName); 86 } 87 } else if (Platform.isX64() || Platform.isX86()) { 88 switch (optionName) { 89 case SHAOptionsBase.USE_SHA_OPTION: 90 return SHAOptionsBase.SHA_INSTRUCTIONS_ARE_NOT_AVAILABLE; 91 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: 92 case SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION: 93 case SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION: 94 return SHAOptionsBase.SHA_INTRINSICS_ARE_NOT_AVAILABLE; 95 default: 96 throw new Error("Unexpected option " + optionName); 97 } 98 } else if (Platform.isAArch64()) { 99 switch (optionName) { 100 case SHAOptionsBase.USE_SHA_OPTION: 101 return SHAOptionsBase.SHA_INSTRUCTIONS_ARE_NOT_AVAILABLE; 102 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: 103 return SHAOptionsBase.SHA1_INSTRUCTION_IS_NOT_AVAILABLE; 104 case SHAOptionsBase.USE_SHA256_INTRINSICS_OPTION: 105 return SHAOptionsBase.SHA256_INSTRUCTION_IS_NOT_AVAILABLE; 106 case SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION: 107 return SHAOptionsBase.SHA512_INSTRUCTION_IS_NOT_AVAILABLE; 108 default: 109 throw new Error("Unexpected option " + optionName); 110 } 111 } else { 112 throw new Error("Support for CPUs other then X86 or SPARC is not " 113 + "implemented."); 114 } 115 } 116 117 /** 118 * Returns the predicate indicating whether or not CPU instructions required 119 * by the option with name {@code optionName} are available. 120 * 121 * @param optionName The name of the option for which a predicate should be 122 * returned. 123 * @return The predicate on availability of CPU instructions required by the 124 * option. 125 */ 126 protected static BooleanSupplier getPredicateForOption(String optionName) { 127 switch (optionName) { 128 case SHAOptionsBase.USE_SHA_OPTION: 129 return IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE; 130 case SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION: |