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 { |