in src/hotspot/cpu/s390/vm_version_s390.cpp [474:752]
void VM_Version::print_features_internal(const char* text, bool print_anyway) {
tty->print_cr("%s %s", text, cpu_info_string());
tty->cr();
if (Verbose || print_anyway) {
// z900
if (has_long_displacement() ) tty->print_cr("available: %s", "LongDispFacility");
// z990
if (has_long_displacement_fast() ) tty->print_cr("available: %s", "LongDispFacilityHighPerf");
if (has_ETF2() && has_ETF3() ) tty->print_cr("available: %s", "ETF2 and ETF3");
if (has_Crypto() ) tty->print_cr("available: %s", "CryptoFacility");
// z9
if (has_extended_immediate() ) tty->print_cr("available: %s", "ExtImmedFacility");
if (has_StoreFacilityListExtended()) tty->print_cr("available: %s", "StoreFacilityListExtended");
if (has_StoreClockFast() ) tty->print_cr("available: %s", "StoreClockFast");
if (has_ETF2Enhancements() ) tty->print_cr("available: %s", "ETF2 Enhancements");
if (has_ETF3Enhancements() ) tty->print_cr("available: %s", "ETF3 Enhancements");
if (has_HFPUnnormalized() ) tty->print_cr("available: %s", "HFPUnnormalizedFacility");
if (has_HFPMultiplyAndAdd() ) tty->print_cr("available: %s", "HFPMultiplyAndAddFacility");
// z10
if (has_ParsingEnhancements() ) tty->print_cr("available: %s", "Parsing Enhancements");
if (has_ExtractCPUtime() ) tty->print_cr("available: %s", "ExtractCPUTime");
if (has_CompareSwapStore() ) tty->print_cr("available: %s", "CompareSwapStore");
if (has_GnrlInstrExtensions() ) tty->print_cr("available: %s", "General Instruction Extensions");
if (has_CompareBranch() ) tty->print_cr(" available: %s", "Compare and Branch");
if (has_CompareTrap() ) tty->print_cr(" available: %s", "Compare and Trap");
if (has_RelativeLoadStore() ) tty->print_cr(" available: %s", "Relative Load/Store");
if (has_MultiplySingleImm32() ) tty->print_cr(" available: %s", "MultiplySingleImm32");
if (has_Prefetch() ) tty->print_cr(" available: %s", "Prefetch");
if (has_MoveImmToMem() ) tty->print_cr(" available: %s", "Direct Moves Immediate to Memory");
if (has_MemWithImmALUOps() ) tty->print_cr(" available: %s", "Direct ALU Ops Memory .op. Immediate");
if (has_ExtractCPUAttributes() ) tty->print_cr(" available: %s", "Extract CPU Attributes");
if (has_ExecuteExtensions() ) tty->print_cr("available: %s", "ExecuteExtensions");
if (has_FPSupportEnhancements() ) tty->print_cr("available: %s", "FPSupportEnhancements");
if (has_DecimalFloatingPoint() ) tty->print_cr("available: %s", "DecimalFloatingPoint");
// z196
if (has_DistinctOpnds() ) tty->print_cr("available: %s", "Distinct Operands");
if (has_InterlockedAccessV1() ) tty->print_cr(" available: %s", "InterlockedAccess V1 (fast)");
if (has_PopCount() ) tty->print_cr(" available: %s", "PopCount");
if (has_LoadStoreConditional() ) tty->print_cr(" available: %s", "LoadStoreConditional");
if (has_HighWordInstr() ) tty->print_cr(" available: %s", "HighWord Instructions");
if (has_FastSync() ) tty->print_cr(" available: %s", "FastSync (bcr 14,0)");
if (has_AtomicMemWithImmALUOps() ) tty->print_cr("available: %s", "Atomic Direct ALU Ops Memory .op. Immediate");
if (has_FPExtensions() ) tty->print_cr("available: %s", "Floatingpoint Extensions");
if (has_CryptoExt3() ) tty->print_cr("available: %s", "Crypto Extensions 3");
if (has_CryptoExt4() ) tty->print_cr("available: %s", "Crypto Extensions 4");
// EC12
if (has_MiscInstrExt() ) tty->print_cr("available: %s", "Miscellaneous Instruction Extensions");
if (has_ExecutionHint() ) tty->print_cr(" available: %s", "Execution Hints (branch prediction)");
if (has_ProcessorAssist() ) tty->print_cr(" available: %s", "Processor Assists");
if (has_LoadAndTrap() ) tty->print_cr(" available: %s", "Load and Trap");
if (has_TxMem() ) tty->print_cr("available: %s", "Transactional Memory");
if (has_InterlockedAccessV2() ) tty->print_cr(" available: %s", "InterlockedAccess V2 (fast)");
if (has_DFPZonedConversion() ) tty->print_cr(" available: %s", "DFP Zoned Conversions");
// z13
if (has_LoadStoreConditional2() ) tty->print_cr("available: %s", "Load/Store Conditional 2");
if (has_CryptoExt5() ) tty->print_cr("available: %s", "Crypto Extensions 5");
if (has_DFPPackedConversion() ) tty->print_cr("available: %s", "DFP Packed Conversions");
if (has_VectorFacility() ) tty->print_cr("available: %s", "Vector Facility");
// z14
if (has_MiscInstrExt2() ) tty->print_cr("available: %s", "Miscellaneous Instruction Extensions 2");
if (has_VectorEnhancements1() ) tty->print_cr("available: %s", "Vector Facility Enhancements 3");
if (has_CryptoExt8() ) tty->print_cr("available: %s", "Crypto Extensions 8");
// z15
if (has_MiscInstrExt3() ) tty->print_cr("available: %s", "Miscellaneous Instruction Extensions 3");
if (has_VectorEnhancements2() ) tty->print_cr("available: %s", "Vector Facility Enhancements 3");
if (has_CryptoExt9() ) tty->print_cr("available: %s", "Crypto Extensions 9");
if (has_Crypto()) {
tty->cr();
tty->print_cr("detailed availability of %s capabilities:", "CryptoFacility");
if (test_feature_bit(&_cipher_features_KM[0], -1, 2*Cipher::_featureBits)) {
tty->cr();
tty->print_cr(" available: %s", "Message Cipher Functions");
}
if (test_feature_bit(&_cipher_features_KM[0], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KM (Cipher Message):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KM[0], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KM Query"); break;
case Cipher::_DEA: tty->print_cr(" available: KM DEA"); break;
case Cipher::_TDEA128: tty->print_cr(" available: KM TDEA-128"); break;
case Cipher::_TDEA192: tty->print_cr(" available: KM TDEA-192"); break;
case Cipher::_EncryptedDEA: tty->print_cr(" available: KM Encrypted DEA"); break;
case Cipher::_EncryptedDEA128: tty->print_cr(" available: KM Encrypted DEA-128"); break;
case Cipher::_EncryptedDEA192: tty->print_cr(" available: KM Encrypted DEA-192"); break;
case Cipher::_AES128: tty->print_cr(" available: KM AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KM AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KM AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KM Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KM Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KM Encrypted-AES-256"); break;
case Cipher::_XTSAES128: tty->print_cr(" available: KM XTS-AES-128"); break;
case Cipher::_XTSAES256: tty->print_cr(" available: KM XTS-AES-256"); break;
case Cipher::_EncryptedXTSAES128: tty->print_cr(" available: KM XTS-Encrypted-AES-128"); break;
case Cipher::_EncryptedXTSAES256: tty->print_cr(" available: KM XTS-Encrypted-AES-256"); break;
default: tty->print_cr(" available: unknown KM code %d", i); break;
}
}
}
}
if (test_feature_bit(&_cipher_features_KM[2], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KMC (Cipher Message with Chaining):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KM[2], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KMC Query"); break;
case Cipher::_DEA: tty->print_cr(" available: KMC DEA"); break;
case Cipher::_TDEA128: tty->print_cr(" available: KMC TDEA-128"); break;
case Cipher::_TDEA192: tty->print_cr(" available: KMC TDEA-192"); break;
case Cipher::_EncryptedDEA: tty->print_cr(" available: KMC Encrypted DEA"); break;
case Cipher::_EncryptedDEA128: tty->print_cr(" available: KMC Encrypted DEA-128"); break;
case Cipher::_EncryptedDEA192: tty->print_cr(" available: KMC Encrypted DEA-192"); break;
case Cipher::_AES128: tty->print_cr(" available: KMC AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KMC AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KMC AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KMC Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KMC Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KMC Encrypted-AES-256"); break;
case Cipher::_PRNG: tty->print_cr(" available: KMC PRNG"); break;
default: tty->print_cr(" available: unknown KMC code %d", i); break;
}
}
}
}
}
if (has_CryptoExt4()) {
if (test_feature_bit(&_cipher_features_KMF[0], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KMF (Cipher Message with Cipher Feedback):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KMF[0], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KMF Query"); break;
case Cipher::_DEA: tty->print_cr(" available: KMF DEA"); break;
case Cipher::_TDEA128: tty->print_cr(" available: KMF TDEA-128"); break;
case Cipher::_TDEA192: tty->print_cr(" available: KMF TDEA-192"); break;
case Cipher::_EncryptedDEA: tty->print_cr(" available: KMF Encrypted DEA"); break;
case Cipher::_EncryptedDEA128: tty->print_cr(" available: KMF Encrypted DEA-128"); break;
case Cipher::_EncryptedDEA192: tty->print_cr(" available: KMF Encrypted DEA-192"); break;
case Cipher::_AES128: tty->print_cr(" available: KMF AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KMF AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KMF AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KMF Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KMF Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KMF Encrypted-AES-256"); break;
default: tty->print_cr(" available: unknown KMF code %d", i); break;
}
}
}
}
if (test_feature_bit(&_cipher_features_KMCTR[0], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KMCTR (Cipher Message with Counter):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KMCTR[0], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KMCTR Query"); break;
case Cipher::_DEA: tty->print_cr(" available: KMCTR DEA"); break;
case Cipher::_TDEA128: tty->print_cr(" available: KMCTR TDEA-128"); break;
case Cipher::_TDEA192: tty->print_cr(" available: KMCTR TDEA-192"); break;
case Cipher::_EncryptedDEA: tty->print_cr(" available: KMCTR Encrypted DEA"); break;
case Cipher::_EncryptedDEA128: tty->print_cr(" available: KMCTR Encrypted DEA-128"); break;
case Cipher::_EncryptedDEA192: tty->print_cr(" available: KMCTR Encrypted DEA-192"); break;
case Cipher::_AES128: tty->print_cr(" available: KMCTR AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KMCTR AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KMCTR AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KMCTR Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KMCTR Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KMCTR Encrypted-AES-256"); break;
default: tty->print_cr(" available: unknown KMCTR code %d", i); break;
}
}
}
}
if (test_feature_bit(&_cipher_features_KMO[0], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KMO (Cipher Message with Output Feedback):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KMO[0], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KMO Query"); break;
case Cipher::_DEA: tty->print_cr(" available: KMO DEA"); break;
case Cipher::_TDEA128: tty->print_cr(" available: KMO TDEA-128"); break;
case Cipher::_TDEA192: tty->print_cr(" available: KMO TDEA-192"); break;
case Cipher::_EncryptedDEA: tty->print_cr(" available: KMO Encrypted DEA"); break;
case Cipher::_EncryptedDEA128: tty->print_cr(" available: KMO Encrypted DEA-128"); break;
case Cipher::_EncryptedDEA192: tty->print_cr(" available: KMO Encrypted DEA-192"); break;
case Cipher::_AES128: tty->print_cr(" available: KMO AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KMO AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KMO AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KMO Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KMO Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KMO Encrypted-AES-256"); break;
default: tty->print_cr(" available: unknown KMO code %d", i); break;
}
}
}
}
}
if (has_CryptoExt8()) {
if (test_feature_bit(&_cipher_features_KMA[0], -1, (int)Cipher::_featureBits)) {
tty->print_cr(" available Crypto Features of KMA (Cipher Message with Authentication):");
for (unsigned int i = 0; i < Cipher::_featureBits; i++) {
if (test_feature_bit(&_cipher_features_KMA[0], i, (int)Cipher::_featureBits)) {
switch (i) {
case Cipher::_Query: tty->print_cr(" available: KMA Query"); break;
case Cipher::_AES128: tty->print_cr(" available: KMA-GCM AES-128"); break;
case Cipher::_AES192: tty->print_cr(" available: KMA-GCM AES-192"); break;
case Cipher::_AES256: tty->print_cr(" available: KMA-GCM AES-256"); break;
case Cipher::_EnccryptedAES128: tty->print_cr(" available: KMA-GCM Encrypted-AES-128"); break;
case Cipher::_EnccryptedAES192: tty->print_cr(" available: KMA-GCM Encrypted-AES-192"); break;
case Cipher::_EnccryptedAES256: tty->print_cr(" available: KMA-GCM Encrypted-AES-256"); break;
default: tty->print_cr(" available: unknown KMA code %d", i); break;
}
}
}
}
}
if (has_Crypto()) {
if (test_feature_bit(&_msgdigest_features[0], -1, 2*MsgDigest::_featureBits)) {
tty->cr();
tty->print_cr(" available: %s", "Message Digest Functions for SHA");
}
if (test_feature_bit(&_msgdigest_features[0], -1, (int)MsgDigest::_featureBits)) {
tty->print_cr(" available Features of KIMD (Msg Digest):");
for (unsigned int i = 0; i < MsgDigest::_featureBits; i++) {
if (test_feature_bit(&_msgdigest_features[0], i, (int)MsgDigest::_featureBits)) {
switch (i) {
case MsgDigest::_Query: tty->print_cr(" available: KIMD Query"); break;
case MsgDigest::_SHA1: tty->print_cr(" available: KIMD SHA-1"); break;
case MsgDigest::_SHA256: tty->print_cr(" available: KIMD SHA-256"); break;
case MsgDigest::_SHA512: tty->print_cr(" available: KIMD SHA-512"); break;
case MsgDigest::_SHA3_224: tty->print_cr(" available: KIMD SHA3-224"); break;
case MsgDigest::_SHA3_256: tty->print_cr(" available: KIMD SHA3-256"); break;
case MsgDigest::_SHA3_384: tty->print_cr(" available: KIMD SHA3-384"); break;
case MsgDigest::_SHA3_512: tty->print_cr(" available: KIMD SHA3-512"); break;
case MsgDigest::_SHAKE_128: tty->print_cr(" available: KIMD SHAKE-128"); break;
case MsgDigest::_SHAKE_256: tty->print_cr(" available: KIMD SHAKE-256"); break;
case MsgDigest::_GHASH: tty->print_cr(" available: KIMD GHASH"); break;
default: tty->print_cr(" available: unknown code %d", i); break;
}
}
}
}
if (test_feature_bit(&_msgdigest_features[2], -1, (int)MsgDigest::_featureBits)) {
tty->print_cr(" available Features of KLMD (Msg Digest):");
for (unsigned int i = 0; i < MsgDigest::_featureBits; i++) {
if (test_feature_bit(&_msgdigest_features[2], i, (int)MsgDigest::_featureBits)) {
switch (i) {
case MsgDigest::_Query: tty->print_cr(" available: KLMD Query"); break;
case MsgDigest::_SHA1: tty->print_cr(" available: KLMD SHA-1"); break;
case MsgDigest::_SHA256: tty->print_cr(" available: KLMD SHA-256"); break;
case MsgDigest::_SHA512: tty->print_cr(" available: KLMD SHA-512"); break;
case MsgDigest::_SHA3_224: tty->print_cr(" available: KLMD SHA3-224"); break;
case MsgDigest::_SHA3_256: tty->print_cr(" available: KLMD SHA3-256"); break;
case MsgDigest::_SHA3_384: tty->print_cr(" available: KLMD SHA3-384"); break;
case MsgDigest::_SHA3_512: tty->print_cr(" available: KLMD SHA3-512"); break;
case MsgDigest::_SHAKE_128: tty->print_cr(" available: KLMD SHAKE-128"); break;
case MsgDigest::_SHAKE_256: tty->print_cr(" available: KLMD SHAKE-256"); break;
default: tty->print_cr(" available: unknown code %d", i); break;
}
}
}
}
}
if (ContendedPaddingWidth > 0) {
tty->cr();
tty->print_cr("ContendedPaddingWidth %d", ContendedPaddingWidth);
}
}
}