< prev index next >
src/hotspot/cpu/s390/vm_version_s390.hpp
Print this page
*** 31,55 ****
#include "runtime/globals_extension.hpp"
class VM_Version: public Abstract_VM_Version {
protected:
- // The following list contains the (approximate) announcement/availability
- // dates of the many System z generations in existence as of now which
- // implement the z/Architecture.
- // z900: 2000-10
- // z990: 2003-06
- // z9: 2005-09
- // z10: 2007-04
- // z10: 2008-02
- // z196: 2010-08
- // ec12: 2012-09
- // z13: 2015-03
- //
// z/Architecture is the name of the 64-bit extension of the 31-bit s390
// architecture.
//
// ----------------------------------------------
// --- FeatureBitString Bits 0.. 63 (DW[0]) ---
// ----------------------------------------------
// 11222334445566
// 04826048260482604
--- 31,47 ----
#include "runtime/globals_extension.hpp"
class VM_Version: public Abstract_VM_Version {
protected:
// z/Architecture is the name of the 64-bit extension of the 31-bit s390
// architecture.
//
+ // For information concerning the life span of the individual
+ // z/Architecture models, please check out the comments/tables
+ // in vm_version_s390.cpp
+
// ----------------------------------------------
// --- FeatureBitString Bits 0.. 63 (DW[0]) ---
// ----------------------------------------------
// 11222334445566
// 04826048260482604
*** 92,106 ****
// EC12 end
// z13 begin
#define LoadStoreConditional2Mask 0x0000000000000400UL // z13
#define CryptoExtension5Mask 0x0000000000000040UL // z13
// z13 end
! // Feature-DW[0] starts to fill up. Use of these masks is risky.
! #define TestFeature1ImplMask 0x0000000000000001UL
! #define TestFeature2ImplMask 0x0000000000000002UL
! #define TestFeature4ImplMask 0x0000000000000004UL
! #define TestFeature8ImplMask 0x0000000000000008UL
// ----------------------------------------------
// --- FeatureBitString Bits 64..127 (DW[1]) ---
// ----------------------------------------------
// 11111111
// 66778889900011222
--- 84,95 ----
// EC12 end
// z13 begin
#define LoadStoreConditional2Mask 0x0000000000000400UL // z13
#define CryptoExtension5Mask 0x0000000000000040UL // z13
// z13 end
! #define MiscInstrExt2Mask 0x0000000000000020UL // z14
! #define MiscInstrExt3Mask 0x0000000000000004UL // z15
// ----------------------------------------------
// --- FeatureBitString Bits 64..127 (DW[1]) ---
// ----------------------------------------------
// 11111111
// 66778889900011222
*** 114,123 ****
--- 103,121 ----
// ----------------------------------------------
// 11111111111111111
// 23344455666778889
// 82604826048260482
#define VectorFacilityMask 0x4000000000000000UL // z13, not avail in VM guest mode!
+ #define ExecutionProtectionMask 0x2000000000000000UL // z14
+ #define GuardedStorageMask 0x0400000000000000UL // z14
+ #define VectorEnhancements1Mask 0x0100000000000000UL // z14
+ #define VectorPackedDecimalMask 0x0200000000000000UL // z14
+ #define CryptoExtension8Mask 0x0000200000000040UL // z14
+ #define VectorEnhancements2Mask 0x0000080000000000UL // z15
+ #define VectorPackedDecimalEnhMask 0x0000008000000000UL // z15
+ #define CryptoExtension9Mask 0x0000001000000040UL // z15
+ #define DeflateMask 0x0000010000000040UL // z15
enum {
_max_cache_levels = 8, // As limited by ECAG instruction.
_features_buffer_len = 4, // in DW
_code_buffer_len = 2*256 // For feature detection code.
*** 141,176 ****
static void set_getFeatures(address entryPoint);
static int calculate_ECAG_functionCode(unsigned int attributeIndication,
unsigned int levelIndication,
unsigned int typeIndication);
! // Setting features via march=z900|z990|z9|z10|z196|ec12|z13|ztest commandline option.
static void reset_features(bool reset);
static void set_features_z900(bool reset = true);
static void set_features_z990(bool reset = true);
static void set_features_z9(bool reset = true);
static void set_features_z10(bool reset = true);
static void set_features_z196(bool reset = true);
static void set_features_ec12(bool reset = true);
static void set_features_z13(bool reset = true);
static void set_features_from(const char* march);
// Get the CPU type from feature bit settings.
static bool is_z900() { return has_long_displacement() && !has_long_displacement_fast(); }
static bool is_z990() { return has_long_displacement_fast() && !has_extended_immediate(); }
static bool is_z9() { return has_extended_immediate() && !has_GnrlInstrExtensions(); }
static bool is_z10() { return has_GnrlInstrExtensions() && !has_DistinctOpnds(); }
static bool is_z196() { return has_DistinctOpnds() && !has_MiscInstrExt(); }
static bool is_ec12() { return has_MiscInstrExt() && !has_CryptoExt5(); }
! static bool is_z13() { return has_CryptoExt5();}
!
! // Get information about cache line sizes.
! // As of now and the foreseeable future, line size of all levels will be the same and 256.
! static unsigned int Dcache_lineSize(unsigned int level = 0) { return _Dcache_lineSize; }
! static unsigned int Icache_lineSize(unsigned int level = 0) { return _Icache_lineSize; }
!
! public:
// Need to use nested class with unscoped enum.
// C++11 declaration "enum class Cipher { ... } is not supported.
class CipherMode {
public:
--- 139,178 ----
static void set_getFeatures(address entryPoint);
static int calculate_ECAG_functionCode(unsigned int attributeIndication,
unsigned int levelIndication,
unsigned int typeIndication);
! // Setting features via march=z900|z990|z9|z10|z196|ec12|z13|z14|z15 commandline option.
static void reset_features(bool reset);
static void set_features_z900(bool reset = true);
static void set_features_z990(bool reset = true);
static void set_features_z9(bool reset = true);
static void set_features_z10(bool reset = true);
static void set_features_z196(bool reset = true);
static void set_features_ec12(bool reset = true);
static void set_features_z13(bool reset = true);
+ static void set_features_z14(bool reset = true);
+ static void set_features_z15(bool reset = true);
static void set_features_from(const char* march);
+ // Get information about cache line sizes.
+ // As of now and the foreseeable future, line size of all levels will be the same and 256.
+ static unsigned int Dcache_lineSize(unsigned int level = 0) { return _Dcache_lineSize; }
+ static unsigned int Icache_lineSize(unsigned int level = 0) { return _Icache_lineSize; }
+
+ public:
+
// Get the CPU type from feature bit settings.
static bool is_z900() { return has_long_displacement() && !has_long_displacement_fast(); }
static bool is_z990() { return has_long_displacement_fast() && !has_extended_immediate(); }
static bool is_z9() { return has_extended_immediate() && !has_GnrlInstrExtensions(); }
static bool is_z10() { return has_GnrlInstrExtensions() && !has_DistinctOpnds(); }
static bool is_z196() { return has_DistinctOpnds() && !has_MiscInstrExt(); }
static bool is_ec12() { return has_MiscInstrExt() && !has_CryptoExt5(); }
! static bool is_z13() { return has_CryptoExt5() && !has_MiscInstrExt2();}
! static bool is_z14() { return has_MiscInstrExt2() && !has_MiscInstrExt3();}
! static bool is_z15() { return has_MiscInstrExt3();}
// Need to use nested class with unscoped enum.
// C++11 declaration "enum class Cipher { ... } is not supported.
class CipherMode {
public:
*** 397,423 ****
static bool has_CryptoExt3() { return (_features[1] & CryptoExtension3Mask) == CryptoExtension3Mask; }
static bool has_CryptoExt4() { return (_features[1] & CryptoExtension4Mask) == CryptoExtension4Mask; }
static bool has_DFPZonedConversion() { return (_features[0] & DFPZonedConversionMask) == DFPZonedConversionMask; }
static bool has_DFPPackedConversion() { return (_features[1] & DFPPackedConversionMask) == DFPPackedConversionMask; }
static bool has_MiscInstrExt() { return (_features[0] & MiscInstrExtMask) == MiscInstrExtMask; }
static bool has_ExecutionHint() { return (_features[0] & ExecutionHintMask) == ExecutionHintMask; }
static bool has_LoadAndTrap() { return (_features[0] & LoadAndTrapMask) == LoadAndTrapMask; }
static bool has_ProcessorAssist() { return (_features[0] & ProcessorAssistMask) == ProcessorAssistMask; }
static bool has_InterlockedAccessV2() { return (_features[0] & InterlockedAccess2Mask) == InterlockedAccess2Mask; }
static bool has_LoadAndALUAtomicV2() { return (_features[0] & InterlockedAccess2Mask) == InterlockedAccess2Mask; }
static bool has_TxMem() { return ((_features[1] & TransactionalExecutionMask) == TransactionalExecutionMask) &&
((_features[0] & ConstrainedTxExecutionMask) == ConstrainedTxExecutionMask); }
static bool has_CryptoExt5() { return (_features[0] & CryptoExtension5Mask) == CryptoExtension5Mask; }
static bool has_LoadStoreConditional2() { return (_features[0] & LoadStoreConditional2Mask) == LoadStoreConditional2Mask; }
static bool has_VectorFacility() { return (_features[2] & VectorFacilityMask) == VectorFacilityMask; }
!
! static bool has_TestFeatureImpl() { return (_features[0] & TestFeature1ImplMask) == TestFeature1ImplMask; }
! static bool has_TestFeature1Impl() { return (_features[0] & TestFeature1ImplMask) == TestFeature1ImplMask; }
! static bool has_TestFeature2Impl() { return (_features[0] & TestFeature2ImplMask) == TestFeature2ImplMask; }
! static bool has_TestFeature4Impl() { return (_features[0] & TestFeature4ImplMask) == TestFeature4ImplMask; }
! static bool has_TestFeature8Impl() { return (_features[0] & TestFeature8ImplMask) == TestFeature8ImplMask; }
! static bool has_TestFeaturesImpl() { return has_TestFeature1Impl() || has_TestFeature2Impl() || has_TestFeature4Impl() || has_TestFeature8Impl(); }
// Crypto features query functions.
static bool has_Crypto_AES128() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES128, Cipher::_featureBits); }
static bool has_Crypto_AES192() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES192, Cipher::_featureBits); }
static bool has_Crypto_AES256() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES256, Cipher::_featureBits); }
--- 399,426 ----
static bool has_CryptoExt3() { return (_features[1] & CryptoExtension3Mask) == CryptoExtension3Mask; }
static bool has_CryptoExt4() { return (_features[1] & CryptoExtension4Mask) == CryptoExtension4Mask; }
static bool has_DFPZonedConversion() { return (_features[0] & DFPZonedConversionMask) == DFPZonedConversionMask; }
static bool has_DFPPackedConversion() { return (_features[1] & DFPPackedConversionMask) == DFPPackedConversionMask; }
static bool has_MiscInstrExt() { return (_features[0] & MiscInstrExtMask) == MiscInstrExtMask; }
+ static bool has_MiscInstrExt2() { return (_features[0] & MiscInstrExt2Mask) == MiscInstrExt2Mask; }
+ static bool has_MiscInstrExt3() { return (_features[0] & MiscInstrExt3Mask) == MiscInstrExt3Mask; }
static bool has_ExecutionHint() { return (_features[0] & ExecutionHintMask) == ExecutionHintMask; }
static bool has_LoadAndTrap() { return (_features[0] & LoadAndTrapMask) == LoadAndTrapMask; }
static bool has_ProcessorAssist() { return (_features[0] & ProcessorAssistMask) == ProcessorAssistMask; }
static bool has_InterlockedAccessV2() { return (_features[0] & InterlockedAccess2Mask) == InterlockedAccess2Mask; }
static bool has_LoadAndALUAtomicV2() { return (_features[0] & InterlockedAccess2Mask) == InterlockedAccess2Mask; }
static bool has_TxMem() { return ((_features[1] & TransactionalExecutionMask) == TransactionalExecutionMask) &&
((_features[0] & ConstrainedTxExecutionMask) == ConstrainedTxExecutionMask); }
static bool has_CryptoExt5() { return (_features[0] & CryptoExtension5Mask) == CryptoExtension5Mask; }
+ static bool has_CryptoExt8() { return (_features[2] & CryptoExtension8Mask) == CryptoExtension8Mask; }
+ static bool has_CryptoExt9() { return (_features[2] & CryptoExtension9Mask) == CryptoExtension9Mask; }
static bool has_LoadStoreConditional2() { return (_features[0] & LoadStoreConditional2Mask) == LoadStoreConditional2Mask; }
static bool has_VectorFacility() { return (_features[2] & VectorFacilityMask) == VectorFacilityMask; }
! static bool has_VectorEnhancements1() { return (_features[2] & VectorEnhancements1Mask) == VectorEnhancements1Mask; }
! static bool has_VectorEnhancements2() { return (_features[2] & VectorEnhancements2Mask) == VectorEnhancements2Mask; }
! static bool has_VectorPackedDecimal() { return (_features[2] & VectorPackedDecimalMask) == VectorPackedDecimalMask; }
! static bool has_VectorPackedDecimalEnh() { return (_features[2] & VectorPackedDecimalEnhMask) == VectorPackedDecimalEnhMask; }
// Crypto features query functions.
static bool has_Crypto_AES128() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES128, Cipher::_featureBits); }
static bool has_Crypto_AES192() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES192, Cipher::_featureBits); }
static bool has_Crypto_AES256() { return has_Crypto() && test_feature_bit(&_cipher_features[0], Cipher::_AES256, Cipher::_featureBits); }
*** 428,441 ****
static bool has_Crypto_SHA512() { return has_Crypto() && test_feature_bit(&_msgdigest_features[0], MsgDigest::_SHA512, MsgDigest::_featureBits); }
static bool has_Crypto_GHASH() { return has_Crypto() && test_feature_bit(&_msgdigest_features[0], MsgDigest::_GHASH, MsgDigest::_featureBits); }
static bool has_Crypto_SHA() { return has_Crypto_SHA1() || has_Crypto_SHA256() || has_Crypto_SHA512() || has_Crypto_GHASH(); }
// CPU feature setters (to force model-specific behaviour). Test/debugging only.
- static void set_has_TestFeature1Impl() { _features[0] |= TestFeature1ImplMask; }
- static void set_has_TestFeature2Impl() { _features[0] |= TestFeature2ImplMask; }
- static void set_has_TestFeature4Impl() { _features[0] |= TestFeature4ImplMask; }
- static void set_has_TestFeature8Impl() { _features[0] |= TestFeature8ImplMask; }
static void set_has_DecimalFloatingPoint() { _features[0] |= DecimalFloatingPointMask; }
static void set_has_FPSupportEnhancements() { _features[0] |= FPSupportEnhancementsMask; }
static void set_has_ExecuteExtensions() { _features[0] |= ExecuteExtensionsMask; }
static void set_has_MemWithImmALUOps() { _features[0] |= GnrlInstrExtFacilityMask; }
static void set_has_MoveImmToMem() { _features[0] |= GnrlInstrExtFacilityMask; }
--- 431,440 ----
*** 466,484 ****
--- 465,491 ----
static void set_has_HighWordInstr() { _features[0] |= HighWordMask; }
static void set_has_FastSync() { _features[0] |= FastBCRSerializationMask; }
static void set_has_DistinctOpnds() { _features[0] |= DistinctOpndsMask; }
static void set_has_FPExtensions() { _features[0] |= FPExtensionsMask; }
static void set_has_MiscInstrExt() { _features[0] |= MiscInstrExtMask; }
+ static void set_has_MiscInstrExt2() { _features[0] |= MiscInstrExt2Mask; }
+ static void set_has_MiscInstrExt3() { _features[0] |= MiscInstrExt3Mask; }
static void set_has_ProcessorAssist() { _features[0] |= ProcessorAssistMask; }
static void set_has_InterlockedAccessV2() { _features[0] |= InterlockedAccess2Mask; }
static void set_has_LoadAndALUAtomicV2() { _features[0] |= InterlockedAccess2Mask; }
static void set_has_TxMem() { _features[0] |= ConstrainedTxExecutionMask; _features[1] |= TransactionalExecutionMask; }
static void set_has_CryptoExt3() { _features[1] |= CryptoExtension3Mask; }
static void set_has_CryptoExt4() { _features[1] |= CryptoExtension4Mask; }
static void set_has_LoadStoreConditional2() { _features[0] |= LoadStoreConditional2Mask; }
static void set_has_CryptoExt5() { _features[0] |= CryptoExtension5Mask; }
+ static void set_has_CryptoExt8() { _features[2] |= CryptoExtension8Mask; }
+ static void set_has_CryptoExt9() { _features[2] |= CryptoExtension9Mask; }
static void set_has_VectorFacility() { _features[2] |= VectorFacilityMask; }
+ static void set_has_VectorEnhancements1() { _features[2] |= VectorEnhancements1Mask; }
+ static void set_has_VectorEnhancements2() { _features[2] |= VectorEnhancements2Mask; }
+ static void set_has_VectorPackedDecimal() { _features[2] |= VectorPackedDecimalMask; }
+ static void set_has_VectorPackedDecimalEnh() { _features[2] |= VectorPackedDecimalEnhMask; }
static void reset_has_VectorFacility() { _features[2] &= ~VectorFacilityMask; }
// Assembler testing.
static void allow_all();
< prev index next >