hotspot/src/cpu/x86/vm/vm_version_x86.cpp
changeset 23491 f690330b10b9
parent 23487 0f7e268cd9e3
child 23527 397b6816032d
equal deleted inserted replaced
23490:54fc219734a0 23491:f690330b10b9
   473     // HT processor could be installed on a system which doesn't support HT.
   473     // HT processor could be installed on a system which doesn't support HT.
   474     _cpuFeatures &= ~CPU_HT;
   474     _cpuFeatures &= ~CPU_HT;
   475   }
   475   }
   476 
   476 
   477   char buf[256];
   477   char buf[256];
   478   jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
   478   jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
   479                cores_per_cpu(), threads_per_core(),
   479                cores_per_cpu(), threads_per_core(),
   480                cpu_family(), _model, _stepping,
   480                cpu_family(), _model, _stepping,
   481                (supports_cmov() ? ", cmov" : ""),
   481                (supports_cmov() ? ", cmov" : ""),
   482                (supports_cmpxchg8() ? ", cx8" : ""),
   482                (supports_cmpxchg8() ? ", cx8" : ""),
   483                (supports_fxsr() ? ", fxsr" : ""),
   483                (supports_fxsr() ? ", fxsr" : ""),
   490                (supports_sse4_2() ? ", sse4.2" : ""),
   490                (supports_sse4_2() ? ", sse4.2" : ""),
   491                (supports_popcnt() ? ", popcnt" : ""),
   491                (supports_popcnt() ? ", popcnt" : ""),
   492                (supports_avx()    ? ", avx" : ""),
   492                (supports_avx()    ? ", avx" : ""),
   493                (supports_avx2()   ? ", avx2" : ""),
   493                (supports_avx2()   ? ", avx2" : ""),
   494                (supports_aes()    ? ", aes" : ""),
   494                (supports_aes()    ? ", aes" : ""),
   495                (supports_clmul()    ? ", clmul" : ""),
   495                (supports_clmul()  ? ", clmul" : ""),
   496                (supports_erms()   ? ", erms" : ""),
   496                (supports_erms()   ? ", erms" : ""),
       
   497                (supports_rtm()    ? ", rtm" : ""),
   497                (supports_mmx_ext() ? ", mmxext" : ""),
   498                (supports_mmx_ext() ? ", mmxext" : ""),
   498                (supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
   499                (supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
   499                (supports_lzcnt()   ? ", lzcnt": ""),
   500                (supports_lzcnt()   ? ", lzcnt": ""),
   500                (supports_sse4a()   ? ", sse4a": ""),
   501                (supports_sse4a()   ? ", sse4a": ""),
   501                (supports_ht() ? ", ht": ""),
   502                (supports_ht() ? ", ht": ""),
   532     if (FLAG_IS_DEFAULT(UseAES)) {
   533     if (FLAG_IS_DEFAULT(UseAES)) {
   533       UseAES = true;
   534       UseAES = true;
   534     }
   535     }
   535   } else if (UseAES) {
   536   } else if (UseAES) {
   536     if (!FLAG_IS_DEFAULT(UseAES))
   537     if (!FLAG_IS_DEFAULT(UseAES))
   537       warning("AES instructions not available on this CPU");
   538       warning("AES instructions are not available on this CPU");
   538     FLAG_SET_DEFAULT(UseAES, false);
   539     FLAG_SET_DEFAULT(UseAES, false);
   539   }
   540   }
   540 
   541 
   541   // Use CLMUL instructions if available.
   542   // Use CLMUL instructions if available.
   542   if (supports_clmul()) {
   543   if (supports_clmul()) {
   565     if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
   566     if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
   566       UseAESIntrinsics = true;
   567       UseAESIntrinsics = true;
   567     }
   568     }
   568   } else if (UseAESIntrinsics) {
   569   } else if (UseAESIntrinsics) {
   569     if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
   570     if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
   570       warning("AES intrinsics not available on this CPU");
   571       warning("AES intrinsics are not available on this CPU");
   571     FLAG_SET_DEFAULT(UseAESIntrinsics, false);
   572     FLAG_SET_DEFAULT(UseAESIntrinsics, false);
   572   }
   573   }
       
   574 
       
   575   // Adjust RTM (Restricted Transactional Memory) flags
       
   576   if (!supports_rtm() && UseRTMLocking) {
       
   577     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
       
   578     // setting during arguments processing. See use_biased_locking().
       
   579     // VM_Version_init() is executed after UseBiasedLocking is used
       
   580     // in Thread::allocate().
       
   581     vm_exit_during_initialization("RTM instructions are not available on this CPU");
       
   582   }
       
   583 
       
   584 #if INCLUDE_RTM_OPT
       
   585   if (UseRTMLocking) {
       
   586     if (!FLAG_IS_CMDLINE(UseRTMLocking)) {
       
   587       // RTM locking should be used only for applications with
       
   588       // high lock contention. For now we do not use it by default.
       
   589       vm_exit_during_initialization("UseRTMLocking flag should be only set on command line");
       
   590     }
       
   591     if (!is_power_of_2(RTMTotalCountIncrRate)) {
       
   592       warning("RTMTotalCountIncrRate must be a power of 2, resetting it to 64");
       
   593       FLAG_SET_DEFAULT(RTMTotalCountIncrRate, 64);
       
   594     }
       
   595     if (RTMAbortRatio < 0 || RTMAbortRatio > 100) {
       
   596       warning("RTMAbortRatio must be in the range 0 to 100, resetting it to 50");
       
   597       FLAG_SET_DEFAULT(RTMAbortRatio, 50);
       
   598     }
       
   599   } else { // !UseRTMLocking
       
   600     if (UseRTMForStackLocks) {
       
   601       if (!FLAG_IS_DEFAULT(UseRTMForStackLocks)) {
       
   602         warning("UseRTMForStackLocks flag should be off when UseRTMLocking flag is off");
       
   603       }
       
   604       FLAG_SET_DEFAULT(UseRTMForStackLocks, false);
       
   605     }
       
   606     if (UseRTMDeopt) {
       
   607       FLAG_SET_DEFAULT(UseRTMDeopt, false);
       
   608     }
       
   609     if (PrintPreciseRTMLockingStatistics) {
       
   610       FLAG_SET_DEFAULT(PrintPreciseRTMLockingStatistics, false);
       
   611     }
       
   612   }
       
   613 #else
       
   614   if (UseRTMLocking) {
       
   615     // Only C2 does RTM locking optimization.
       
   616     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
       
   617     // setting during arguments processing. See use_biased_locking().
       
   618     vm_exit_during_initialization("RTM locking optimization is not supported in this VM");
       
   619   }
       
   620 #endif
   573 
   621 
   574 #ifdef COMPILER2
   622 #ifdef COMPILER2
   575   if (UseFPUForSpilling) {
   623   if (UseFPUForSpilling) {
   576     if (UseSSE < 2) {
   624     if (UseSSE < 2) {
   577       // Only supported with SSE2+
   625       // Only supported with SSE2+
   911     }
   959     }
   912   }
   960   }
   913 #endif // !PRODUCT
   961 #endif // !PRODUCT
   914 }
   962 }
   915 
   963 
       
   964 bool VM_Version::use_biased_locking() {
       
   965 #if INCLUDE_RTM_OPT
       
   966   // RTM locking is most useful when there is high lock contention and
       
   967   // low data contention.  With high lock contention the lock is usually
       
   968   // inflated and biased locking is not suitable for that case.
       
   969   // RTM locking code requires that biased locking is off.
       
   970   // Note: we can't switch off UseBiasedLocking in get_processor_features()
       
   971   // because it is used by Thread::allocate() which is called before
       
   972   // VM_Version::initialize().
       
   973   if (UseRTMLocking && UseBiasedLocking) {
       
   974     if (FLAG_IS_DEFAULT(UseBiasedLocking)) {
       
   975       FLAG_SET_DEFAULT(UseBiasedLocking, false);
       
   976     } else {
       
   977       warning("Biased locking is not supported with RTM locking; ignoring UseBiasedLocking flag." );
       
   978       UseBiasedLocking = false;
       
   979     }
       
   980   }
       
   981 #endif
       
   982   return UseBiasedLocking;
       
   983 }
       
   984 
   916 void VM_Version::initialize() {
   985 void VM_Version::initialize() {
   917   ResourceMark rm;
   986   ResourceMark rm;
   918   // Making this stub must be FIRST use of assembler
   987   // Making this stub must be FIRST use of assembler
   919 
   988 
   920   stub_blob = BufferBlob::create("getPsrInfo_stub", stub_size);
   989   stub_blob = BufferBlob::create("getPsrInfo_stub", stub_size);