< prev index next >

src/hotspot/cpu/s390/vm_version_s390.cpp

Print this page

        

*** 45,57 **** unsigned int VM_Version::_ncipher_features = 0; unsigned int VM_Version::_nmsgdigest_features = 0; unsigned int VM_Version::_Dcache_lineSize = DEFAULT_CACHE_LINE_SIZE; unsigned int VM_Version::_Icache_lineSize = DEFAULT_CACHE_LINE_SIZE; ! static const char* z_gen[] = {" ", "G1", "G2", "G3", "G4", "G5", "G6", "G7" }; ! static const char* z_machine[] = {" ", "2064", "2084", "2094", "2097", "2817", " ", "2964" }; ! static const char* z_name[] = {" ", "z900", "z990", "z9 EC", "z10 EC", "z196 EC", "ec12", "z13" }; void VM_Version::initialize() { determine_features(); // Get processor capabilities. set_features_string(); // Set a descriptive feature indication. --- 45,73 ---- unsigned int VM_Version::_ncipher_features = 0; unsigned int VM_Version::_nmsgdigest_features = 0; unsigned int VM_Version::_Dcache_lineSize = DEFAULT_CACHE_LINE_SIZE; unsigned int VM_Version::_Icache_lineSize = DEFAULT_CACHE_LINE_SIZE; ! // The following list contains the (approximate) announcement/availability ! // dates of the many System z generations in existence as of now. ! // Information compiled from https://www.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/TD105503 ! // z900: 2000-10 ! // z990: 2003-06 ! // z9: 2005-09 ! // z10: 2007-04 ! // z10: 2008-02 ! // z196: 2010-08 ! // ec12: 2012-09 ! // z13: 2015-03 ! // z14: 2017-09 ! // z15: 2019-09 ! ! static const char* z_gen[] = {" ", "G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "G9" }; ! static const char* z_machine[] = {" ", "2064", "2084", "2094", "2097", "2817", "2827", "2964", "3906", "8561" }; ! static const char* z_name[] = {" ", "z900", "z990", "z9 EC", "z10 EC", "z196 EC", "ec12", "z13", "z14", "z15" }; ! static const char* z_WDFM[] = {" ", "2006-06-30", "2008-06-30", "2010-06-30", "2012-06-30", "2014-06-30", "2016-12-31", "2019-06-30", "2021-06-30", "tbd" }; ! static const char* z_EOS[] = {" ", "2014-12-31", "2014-12-31", "2017-10-31", "2019-12-31", "2021-12-31", "tbd", "tbd", "tbd", "tbd" }; void VM_Version::initialize() { determine_features(); // Get processor capabilities. set_features_string(); // Set a descriptive feature indication.
*** 260,335 **** // about the unusual notation of features - and when adding new ones. // Features may have one comma at the end. // Furthermore, use one, and only one, separator space between features. // Multiple spaces are considered separate tokens, messing up everything. unsigned int ambiguity = 0; ! _model_string = z_name[0]; if (is_z13()) { _features_string = "system-z, g7-z13, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm, vectorinstr"; ! _model_string = z_name[7]; ambiguity++; } if (is_ec12()) { _features_string = "system-z, g6-ec12, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm"; ! _model_string = z_name[6]; ambiguity++; } if (is_z196()) { _features_string = "system-z, g5-z196, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update"; ! _model_string = z_name[5]; ambiguity++; } if (is_z10()) { _features_string = "system-z, g4-z10, ldisp_fast, extimm, pcrel_load/store, cmpb"; ! _model_string = z_name[4]; ambiguity++; } if (is_z9()) { ! _features_string = "system-z, g3-z9, ldisp_fast, extimm, out-of-support as of 2016-04-01"; ! _model_string = z_name[3]; ambiguity++; } if (is_z990()) { ! _features_string = "system-z, g2-z990, ldisp_fast, out-of-support as of 2014-07-01"; ! _model_string = z_name[2]; ambiguity++; } if (is_z900()) { ! _features_string = "system-z, g1-z900, ldisp, out-of-support as of 2014-07-01"; ! _model_string = z_name[1]; ambiguity++; } if (ambiguity == 0) { ! _features_string = "z/Architecture (unknown generation)"; } else if (ambiguity > 1) { tty->print_cr("*** WARNING *** Ambiguous z/Architecture detection, ambiguity = %d", ambiguity); tty->print_cr(" oldest detected generation is %s", _features_string); ! _features_string = "z/Architecture (ambiguous detection)"; } if (has_Crypto_AES()) { - char buf[256]; assert(strlen(_features_string) + 3*8 < sizeof(buf), "increase buffer size"); jio_snprintf(buf, sizeof(buf), "%s%s%s%s", _features_string, has_Crypto_AES128() ? ", aes128" : "", has_Crypto_AES192() ? ", aes192" : "", has_Crypto_AES256() ? ", aes256" : ""); _features_string = os::strdup(buf); } if (has_Crypto_SHA()) { - char buf[256]; assert(strlen(_features_string) + 6 + 2*8 + 7 < sizeof(buf), "increase buffer size"); jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s", _features_string, has_Crypto_SHA1() ? ", sha1" : "", has_Crypto_SHA256() ? ", sha256" : "", has_Crypto_SHA512() ? ", sha512" : "", has_Crypto_GHASH() ? ", ghash" : ""); ! if (has_Crypto_AES()) { os::free((void *)_features_string); } _features_string = os::strdup(buf); } } // featureBuffer - bit array indicating availability of various features --- 276,365 ---- // about the unusual notation of features - and when adding new ones. // Features may have one comma at the end. // Furthermore, use one, and only one, separator space between features. // Multiple spaces are considered separate tokens, messing up everything. unsigned int ambiguity = 0; ! unsigned int model_ix = 0; ! if (is_z15()) { ! _features_string = "system-z g9-z15 ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm, vectorinstr, instrext2, venh1, instrext3, VEnh2 )"; ! model_ix = 9; ! ambiguity++; ! } ! if (is_z14()) { ! _features_string = "system-z g8-z14 ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm, vectorinstr, instrext2, venh1)"; ! model_ix = 8; ! ambiguity++; ! } if (is_z13()) { _features_string = "system-z, g7-z13, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm, vectorinstr"; ! model_ix = 7; ambiguity++; } if (is_ec12()) { _features_string = "system-z, g6-ec12, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update, txm"; ! model_ix = 6; ambiguity++; } if (is_z196()) { _features_string = "system-z, g5-z196, ldisp_fast, extimm, pcrel_load/store, cmpb, cond_load/store, interlocked_update"; ! model_ix = 5; ambiguity++; } if (is_z10()) { _features_string = "system-z, g4-z10, ldisp_fast, extimm, pcrel_load/store, cmpb"; ! model_ix = 4; ambiguity++; } if (is_z9()) { ! _features_string = "system-z, g3-z9, ldisp_fast, extimm"; ! model_ix = 3; ambiguity++; } if (is_z990()) { ! _features_string = "system-z, g2-z990, ldisp_fast"; ! model_ix = 2; ambiguity++; } if (is_z900()) { ! _features_string = "system-z, g1-z900, ldisp"; ! model_ix = 1; ambiguity++; } + char buf[512]; if (ambiguity == 0) { ! strcpy(buf, "z/Architecture (unknown generation)"); ! } else if (ambiguity == 1) { ! _model_string = z_name[model_ix]; ! jio_snprintf(buf, sizeof(buf), "%s, out-of-support_as_of_", _features_string, z_EOS[model_ix]); } else if (ambiguity > 1) { tty->print_cr("*** WARNING *** Ambiguous z/Architecture detection, ambiguity = %d", ambiguity); tty->print_cr(" oldest detected generation is %s", _features_string); ! strcpy(buf, "z/Architecture (ambiguous detection)"); } + _features_string = os::strdup(buf); if (has_Crypto_AES()) { assert(strlen(_features_string) + 3*8 < sizeof(buf), "increase buffer size"); jio_snprintf(buf, sizeof(buf), "%s%s%s%s", _features_string, has_Crypto_AES128() ? ", aes128" : "", has_Crypto_AES192() ? ", aes192" : "", has_Crypto_AES256() ? ", aes256" : ""); + os::free((void *)_features_string); _features_string = os::strdup(buf); } if (has_Crypto_SHA()) { assert(strlen(_features_string) + 6 + 2*8 + 7 < sizeof(buf), "increase buffer size"); jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s", _features_string, has_Crypto_SHA1() ? ", sha1" : "", has_Crypto_SHA256() ? ", sha256" : "", has_Crypto_SHA512() ? ", sha512" : "", has_Crypto_GHASH() ? ", ghash" : ""); ! os::free((void *)_features_string); _features_string = os::strdup(buf); } } // featureBuffer - bit array indicating availability of various features
*** 418,432 **** // 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"); ! // test switches ! if (has_TestFeature1Impl() ) tty->print_cr("available: %s", "TestFeature1Impl"); ! if (has_TestFeature2Impl() ) tty->print_cr("available: %s", "TestFeature2Impl"); ! if (has_TestFeature4Impl() ) tty->print_cr("available: %s", "TestFeature4Impl"); ! if (has_TestFeature8Impl() ) tty->print_cr("available: %s", "TestFeature8Impl"); if (has_Crypto()) { tty->cr(); tty->print_cr("detailed availability of %s capabilities:", "CryptoFacility"); if (test_feature_bit(&_cipher_features[0], -1, 2*Cipher::_featureBits)) { --- 448,465 ---- // 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", "Miscelaneous 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", "Miscelaneous 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[0], -1, 2*Cipher::_featureBits)) {
*** 630,639 **** --- 663,692 ---- set_has_LoadStoreConditional2(); set_has_CryptoExt5(); set_has_VectorFacility(); } + void VM_Version::set_features_z14(bool reset) { + reset_features(reset); + + set_features_z13(false); + set_has_MiscInstrExt2(); + set_has_VectorEnhancements1(); + has_VectorPackedDecimal(); + set_has_CryptoExt8(); + } + + void VM_Version::set_features_z15(bool reset) { + reset_features(reset); + + set_features_z14(false); + set_has_MiscInstrExt3(); + set_has_VectorEnhancements2(); + has_VectorPackedDecimalEnh(); + set_has_CryptoExt9(); + } + void VM_Version::set_features_from(const char* march) { bool err = false; bool prt = false; if ((march != NULL) && (march[0] != '\0')) {
*** 659,695 **** set_features_z196(); } else if (!strcmp(march, "ec12")) { set_features_ec12(); } else if (!strcmp(march, "z13")) { set_features_z13(); ! } else if (!strcmp(buf, "ztest")) { ! assert(!has_TestFeaturesImpl(), "possible facility list flag conflict"); ! if (strlen(march) > hdr_len) { ! int itest = 0; ! if ((strlen(march)-hdr_len) >= buf_len) err = true; ! if (!err) { ! memcpy(buf, &march[hdr_len], strlen(march)-hdr_len); ! buf[strlen(march)-hdr_len] = '\00'; ! for (size_t i = 0; !err && (i < strlen(buf)); i++) { ! itest = itest*10 + buf[i]-'0'; ! err = err || ((buf[i]-'0') < 0) || ((buf[i]-'0') > 9) || (itest > 15); ! } ! } ! if (!err) { ! prt = true; ! if (itest & 0x01) { set_has_TestFeature1Impl(); } ! if (itest & 0x02) { set_has_TestFeature2Impl(); } ! if (itest & 0x04) { set_has_TestFeature4Impl(); } ! if (itest & 0x08) { set_has_TestFeature8Impl(); } ! } ! } else { ! prt = true; ! set_has_TestFeature1Impl(); ! set_has_TestFeature2Impl(); ! set_has_TestFeature4Impl(); ! set_has_TestFeature8Impl(); ! } } else { err = true; } if (!err) { set_features_string(); --- 712,725 ---- set_features_z196(); } else if (!strcmp(march, "ec12")) { set_features_ec12(); } else if (!strcmp(march, "z13")) { set_features_z13(); ! } else if (!strcmp(march, "z14")) { ! set_features_z14(); ! } else if (!strcmp(march, "z15")) { ! set_features_z15(); } else { err = true; } if (!err) { set_features_string();
< prev index next >