1.1 --- a/src/cpu/x86/vm/vm_version_x86.hpp Sat Mar 22 00:26:48 2014 +0400 1.2 +++ b/src/cpu/x86/vm/vm_version_x86.hpp Thu Mar 20 17:49:27 2014 -0700 1.3 @@ -207,7 +207,9 @@ 1.4 : 2, 1.5 bmi2 : 1, 1.6 erms : 1, 1.7 - : 22; 1.8 + : 1, 1.9 + rtm : 1, 1.10 + : 20; 1.11 } bits; 1.12 }; 1.13 1.14 @@ -257,7 +259,8 @@ 1.15 CPU_ERMS = (1 << 20), // enhanced 'rep movsb/stosb' instructions 1.16 CPU_CLMUL = (1 << 21), // carryless multiply for CRC 1.17 CPU_BMI1 = (1 << 22), 1.18 - CPU_BMI2 = (1 << 23) 1.19 + CPU_BMI2 = (1 << 23), 1.20 + CPU_RTM = (1 << 24) // Restricted Transactional Memory instructions 1.21 } cpuFeatureFlags; 1.22 1.23 enum { 1.24 @@ -444,6 +447,8 @@ 1.25 result |= CPU_ERMS; 1.26 if (_cpuid_info.std_cpuid1_ecx.bits.clmul != 0) 1.27 result |= CPU_CLMUL; 1.28 + if (_cpuid_info.sef_cpuid7_ebx.bits.rtm != 0) 1.29 + result |= CPU_RTM; 1.30 1.31 // AMD features. 1.32 if (is_amd()) { 1.33 @@ -514,6 +519,9 @@ 1.34 // Initialization 1.35 static void initialize(); 1.36 1.37 + // Override Abstract_VM_Version implementation 1.38 + static bool use_biased_locking(); 1.39 + 1.40 // Asserts 1.41 static void assert_is_initialized() { 1.42 assert(_cpuid_info.std_cpuid1_eax.bits.family != 0, "VM_Version not initialized"); 1.43 @@ -606,6 +614,7 @@ 1.44 static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; } 1.45 static bool supports_erms() { return (_cpuFeatures & CPU_ERMS) != 0; } 1.46 static bool supports_clmul() { return (_cpuFeatures & CPU_CLMUL) != 0; } 1.47 + static bool supports_rtm() { return (_cpuFeatures & CPU_RTM) != 0; } 1.48 static bool supports_bmi1() { return (_cpuFeatures & CPU_BMI1) != 0; } 1.49 static bool supports_bmi2() { return (_cpuFeatures & CPU_BMI2) != 0; } 1.50 // Intel features