< prev index next >

src/cpu/x86/vm/vm_version_x86.cpp

Print this page




 561     _features &= ~CPU_AVX512CD;
 562     _features &= ~CPU_AVX512BW;
 563     _features &= ~CPU_AVX512VL;
 564   }
 565 
 566   if (UseAVX < 2)
 567     _features &= ~CPU_AVX2;
 568 
 569   if (UseAVX < 1)
 570     _features &= ~CPU_AVX;
 571 
 572   if (!UseAES && !FLAG_IS_DEFAULT(UseAES))
 573     _features &= ~CPU_AES;
 574 
 575   if (logical_processors_per_package() == 1) {
 576     // HT processor could be installed on a system which doesn't support HT.
 577     _features &= ~CPU_HT;
 578   }
 579 
 580   char buf[256];
 581   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%s%s%s",
 582                cores_per_cpu(), threads_per_core(),
 583                cpu_family(), _model, _stepping,
 584                (supports_cmov() ? ", cmov" : ""),
 585                (supports_cmpxchg8() ? ", cx8" : ""),
 586                (supports_fxsr() ? ", fxsr" : ""),
 587                (supports_mmx()  ? ", mmx"  : ""),
 588                (supports_sse()  ? ", sse"  : ""),
 589                (supports_sse2() ? ", sse2" : ""),
 590                (supports_sse3() ? ", sse3" : ""),
 591                (supports_ssse3()? ", ssse3": ""),
 592                (supports_sse4_1() ? ", sse4.1" : ""),
 593                (supports_sse4_2() ? ", sse4.2" : ""),
 594                (supports_popcnt() ? ", popcnt" : ""),
 595                (supports_avx()    ? ", avx" : ""),
 596                (supports_avx2()   ? ", avx2" : ""),
 597                (supports_aes()    ? ", aes" : ""),
 598                (supports_clmul()  ? ", clmul" : ""),
 599                (supports_erms()   ? ", erms" : ""),
 600                (supports_rtm()    ? ", rtm" : ""),
 601                (supports_mmx_ext() ? ", mmxext" : ""),
 602                (supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
 603                (supports_lzcnt()   ? ", lzcnt": ""),
 604                (supports_sse4a()   ? ", sse4a": ""),
 605                (supports_ht() ? ", ht": ""),
 606                (supports_tsc() ? ", tsc": ""),
 607                (supports_tscinv_bit() ? ", tscinvbit": ""),
 608                (supports_tscinv() ? ", tscinv": ""),
 609                (supports_bmi1() ? ", bmi1" : ""),
 610                (supports_bmi2() ? ", bmi2" : ""),
 611                (supports_adx() ? ", adx" : ""),
 612                (supports_evex() ? ", evex" : ""),
 613                (supports_sha() ? ", sha" : ""));

 614   _features_string = os::strdup(buf);
 615 
 616   // UseSSE is set to the smaller of what hardware supports and what
 617   // the command line requires.  I.e., you cannot set UseSSE to 2 on
 618   // older Pentiums which do not support it.
 619   if (UseSSE > 4) UseSSE=4;
 620   if (UseSSE < 0) UseSSE=0;
 621   if (!supports_sse4_1()) // Drop to 3 if no SSE4 support
 622     UseSSE = MIN2((intx)3,UseSSE);
 623   if (!supports_sse3()) // Drop to 2 if no SSE3 support
 624     UseSSE = MIN2((intx)2,UseSSE);
 625   if (!supports_sse2()) // Drop to 1 if no SSE2 support
 626     UseSSE = MIN2((intx)1,UseSSE);
 627   if (!supports_sse ()) // Drop to 0 if no SSE  support
 628     UseSSE = 0;
 629 
 630   // Use AES instructions if available.
 631   if (supports_aes()) {
 632     if (FLAG_IS_DEFAULT(UseAES)) {
 633       FLAG_SET_DEFAULT(UseAES, true);


 755       FLAG_SET_DEFAULT(UseSHA256Intrinsics, true);
 756     }
 757   } else if (UseSHA256Intrinsics) {
 758     warning("Intrinsics for SHA-224 and SHA-256 crypto hash functions not available on this CPU.");
 759     FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
 760   }
 761 
 762   if (UseSHA512Intrinsics) {
 763     warning("Intrinsics for SHA-384 and SHA-512 crypto hash functions not available on this CPU.");
 764     FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
 765   }
 766 
 767   if (!(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics)) {
 768     FLAG_SET_DEFAULT(UseSHA, false);
 769   }
 770 
 771   if (UseAdler32Intrinsics) {
 772     warning("Adler32Intrinsics not available on this CPU.");
 773     FLAG_SET_DEFAULT(UseAdler32Intrinsics, false);
 774   }












 775 
 776   // Adjust RTM (Restricted Transactional Memory) flags
 777   if (!supports_rtm() && UseRTMLocking) {
 778     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
 779     // setting during arguments processing. See use_biased_locking().
 780     // VM_Version_init() is executed after UseBiasedLocking is used
 781     // in Thread::allocate().
 782     vm_exit_during_initialization("RTM instructions are not available on this CPU");
 783   }
 784 
 785 #if INCLUDE_RTM_OPT
 786   if (UseRTMLocking) {
 787     if (is_intel_family_core()) {
 788       if ((_model == CPU_MODEL_HASWELL_E3) ||
 789           (_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||
 790           (_model == CPU_MODEL_BROADWELL  && _stepping < 4)) {
 791         // currently a collision between SKL and HSW_E3
 792         if (!UnlockExperimentalVMOptions && UseAVX < 3) {
 793           vm_exit_during_initialization("UseRTMLocking is only available as experimental option on this platform. It must be enabled via -XX:+UnlockExperimentalVMOptions flag.");
 794         } else {




 561     _features &= ~CPU_AVX512CD;
 562     _features &= ~CPU_AVX512BW;
 563     _features &= ~CPU_AVX512VL;
 564   }
 565 
 566   if (UseAVX < 2)
 567     _features &= ~CPU_AVX2;
 568 
 569   if (UseAVX < 1)
 570     _features &= ~CPU_AVX;
 571 
 572   if (!UseAES && !FLAG_IS_DEFAULT(UseAES))
 573     _features &= ~CPU_AES;
 574 
 575   if (logical_processors_per_package() == 1) {
 576     // HT processor could be installed on a system which doesn't support HT.
 577     _features &= ~CPU_HT;
 578   }
 579 
 580   char buf[256];
 581   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%s%s%s%s",
 582                cores_per_cpu(), threads_per_core(),
 583                cpu_family(), _model, _stepping,
 584                (supports_cmov() ? ", cmov" : ""),
 585                (supports_cmpxchg8() ? ", cx8" : ""),
 586                (supports_fxsr() ? ", fxsr" : ""),
 587                (supports_mmx()  ? ", mmx"  : ""),
 588                (supports_sse()  ? ", sse"  : ""),
 589                (supports_sse2() ? ", sse2" : ""),
 590                (supports_sse3() ? ", sse3" : ""),
 591                (supports_ssse3()? ", ssse3": ""),
 592                (supports_sse4_1() ? ", sse4.1" : ""),
 593                (supports_sse4_2() ? ", sse4.2" : ""),
 594                (supports_popcnt() ? ", popcnt" : ""),
 595                (supports_avx()    ? ", avx" : ""),
 596                (supports_avx2()   ? ", avx2" : ""),
 597                (supports_aes()    ? ", aes" : ""),
 598                (supports_clmul()  ? ", clmul" : ""),
 599                (supports_erms()   ? ", erms" : ""),
 600                (supports_rtm()    ? ", rtm" : ""),
 601                (supports_mmx_ext() ? ", mmxext" : ""),
 602                (supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
 603                (supports_lzcnt()   ? ", lzcnt": ""),
 604                (supports_sse4a()   ? ", sse4a": ""),
 605                (supports_ht() ? ", ht": ""),
 606                (supports_tsc() ? ", tsc": ""),
 607                (supports_tscinv_bit() ? ", tscinvbit": ""),
 608                (supports_tscinv() ? ", tscinv": ""),
 609                (supports_bmi1() ? ", bmi1" : ""),
 610                (supports_bmi2() ? ", bmi2" : ""),
 611                (supports_adx() ? ", adx" : ""),
 612                (supports_evex() ? ", evex" : ""),
 613                (supports_sha() ? ", sha" : ""),
 614                (supports_fma() ? ", fma" : ""));
 615   _features_string = os::strdup(buf);
 616 
 617   // UseSSE is set to the smaller of what hardware supports and what
 618   // the command line requires.  I.e., you cannot set UseSSE to 2 on
 619   // older Pentiums which do not support it.
 620   if (UseSSE > 4) UseSSE=4;
 621   if (UseSSE < 0) UseSSE=0;
 622   if (!supports_sse4_1()) // Drop to 3 if no SSE4 support
 623     UseSSE = MIN2((intx)3,UseSSE);
 624   if (!supports_sse3()) // Drop to 2 if no SSE3 support
 625     UseSSE = MIN2((intx)2,UseSSE);
 626   if (!supports_sse2()) // Drop to 1 if no SSE2 support
 627     UseSSE = MIN2((intx)1,UseSSE);
 628   if (!supports_sse ()) // Drop to 0 if no SSE  support
 629     UseSSE = 0;
 630 
 631   // Use AES instructions if available.
 632   if (supports_aes()) {
 633     if (FLAG_IS_DEFAULT(UseAES)) {
 634       FLAG_SET_DEFAULT(UseAES, true);


 756       FLAG_SET_DEFAULT(UseSHA256Intrinsics, true);
 757     }
 758   } else if (UseSHA256Intrinsics) {
 759     warning("Intrinsics for SHA-224 and SHA-256 crypto hash functions not available on this CPU.");
 760     FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
 761   }
 762 
 763   if (UseSHA512Intrinsics) {
 764     warning("Intrinsics for SHA-384 and SHA-512 crypto hash functions not available on this CPU.");
 765     FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
 766   }
 767 
 768   if (!(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics)) {
 769     FLAG_SET_DEFAULT(UseSHA, false);
 770   }
 771 
 772   if (UseAdler32Intrinsics) {
 773     warning("Adler32Intrinsics not available on this CPU.");
 774     FLAG_SET_DEFAULT(UseAdler32Intrinsics, false);
 775   }
 776 
 777   if (supports_fma()) {
 778     if (FLAG_IS_DEFAULT(UseFMA)) {
 779       UseFMA = true;
 780     }
 781   }
 782   else if (UseFMA) {
 783     if (!FLAG_IS_DEFAULT(UseFMA))
 784       warning("FMA instructions not available on this CPU");
 785     FLAG_SET_DEFAULT(UseFMA, false);
 786   }
 787 
 788 
 789   // Adjust RTM (Restricted Transactional Memory) flags
 790   if (!supports_rtm() && UseRTMLocking) {
 791     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
 792     // setting during arguments processing. See use_biased_locking().
 793     // VM_Version_init() is executed after UseBiasedLocking is used
 794     // in Thread::allocate().
 795     vm_exit_during_initialization("RTM instructions are not available on this CPU");
 796   }
 797 
 798 #if INCLUDE_RTM_OPT
 799   if (UseRTMLocking) {
 800     if (is_intel_family_core()) {
 801       if ((_model == CPU_MODEL_HASWELL_E3) ||
 802           (_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||
 803           (_model == CPU_MODEL_BROADWELL  && _stepping < 4)) {
 804         // currently a collision between SKL and HSW_E3
 805         if (!UnlockExperimentalVMOptions && UseAVX < 3) {
 806           vm_exit_during_initialization("UseRTMLocking is only available as experimental option on this platform. It must be enabled via -XX:+UnlockExperimentalVMOptions flag.");
 807         } else {


< prev index next >