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); |