< prev index next >

src/cpu/x86/vm/vm_version_x86.cpp

Print this page




 648   if (supports_clmul()) {
 649     if (FLAG_IS_DEFAULT(UseCLMUL)) {
 650       UseCLMUL = true;
 651     }
 652   } else if (UseCLMUL) {
 653     if (!FLAG_IS_DEFAULT(UseCLMUL))
 654       warning("CLMUL instructions not available on this CPU (AVX may also be required)");
 655     FLAG_SET_DEFAULT(UseCLMUL, false);
 656   }
 657 
 658   if (UseCLMUL && (UseSSE > 2)) {
 659     if (FLAG_IS_DEFAULT(UseCRC32Intrinsics)) {
 660       UseCRC32Intrinsics = true;
 661     }
 662   } else if (UseCRC32Intrinsics) {
 663     if (!FLAG_IS_DEFAULT(UseCRC32Intrinsics))
 664       warning("CRC32 Intrinsics requires CLMUL instructions (not available on this CPU)");
 665     FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
 666   }
 667 












 668   // The AES intrinsic stubs require AES instruction support (of course)
 669   // but also require sse3 mode for instructions it use.
 670   if (UseAES && (UseSSE > 2)) {
 671     if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
 672       UseAESIntrinsics = true;
 673     }
 674   } else if (UseAESIntrinsics) {
 675     if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
 676       warning("AES intrinsics are not available on this CPU");
 677     FLAG_SET_DEFAULT(UseAESIntrinsics, false);
 678   }
 679 
 680   // GHASH/GCM intrinsics
 681   if (UseCLMUL && (UseSSE > 2)) {
 682     if (FLAG_IS_DEFAULT(UseGHASHIntrinsics)) {
 683       UseGHASHIntrinsics = true;
 684     }
 685   } else if (UseGHASHIntrinsics) {
 686     if (!FLAG_IS_DEFAULT(UseGHASHIntrinsics))
 687       warning("GHASH intrinsic requires CLMUL and SSE2 instructions on this CPU");
 688     FLAG_SET_DEFAULT(UseGHASHIntrinsics, false);
 689   }
 690 
 691   if (UseSHA) {
 692     warning("SHA instructions are not available on this CPU");
 693     FLAG_SET_DEFAULT(UseSHA, false);
 694   }
 695   if (UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics) {
 696     warning("SHA intrinsics are not available on this CPU");
 697     FLAG_SET_DEFAULT(UseSHA1Intrinsics, false);
 698     FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
 699     FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
 700   }
 701 
 702   if (UseCRC32CIntrinsics) {
 703     if (!FLAG_IS_DEFAULT(UseCRC32CIntrinsics))
 704       warning("CRC32C intrinsics are not available on this CPU");
 705     FLAG_SET_DEFAULT(UseCRC32CIntrinsics, false);
 706   }
 707 
 708   // Adjust RTM (Restricted Transactional Memory) flags
 709   if (!supports_rtm() && UseRTMLocking) {
 710     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
 711     // setting during arguments processing. See use_biased_locking().
 712     // VM_Version_init() is executed after UseBiasedLocking is used
 713     // in Thread::allocate().
 714     vm_exit_during_initialization("RTM instructions are not available on this CPU");
 715   }
 716 
 717 #if INCLUDE_RTM_OPT
 718   if (UseRTMLocking) {
 719     if (is_intel_family_core()) {
 720       if ((_model == CPU_MODEL_HASWELL_E3) ||
 721           (_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||
 722           (_model == CPU_MODEL_BROADWELL  && _stepping < 4)) {
 723         // currently a collision between SKL and HSW_E3
 724         if (!UnlockExperimentalVMOptions && UseAVX < 3) {
 725           vm_exit_during_initialization("UseRTMLocking is only available as experimental option on this platform. It must be enabled via -XX:+UnlockExperimentalVMOptions flag.");




 648   if (supports_clmul()) {
 649     if (FLAG_IS_DEFAULT(UseCLMUL)) {
 650       UseCLMUL = true;
 651     }
 652   } else if (UseCLMUL) {
 653     if (!FLAG_IS_DEFAULT(UseCLMUL))
 654       warning("CLMUL instructions not available on this CPU (AVX may also be required)");
 655     FLAG_SET_DEFAULT(UseCLMUL, false);
 656   }
 657 
 658   if (UseCLMUL && (UseSSE > 2)) {
 659     if (FLAG_IS_DEFAULT(UseCRC32Intrinsics)) {
 660       UseCRC32Intrinsics = true;
 661     }
 662   } else if (UseCRC32Intrinsics) {
 663     if (!FLAG_IS_DEFAULT(UseCRC32Intrinsics))
 664       warning("CRC32 Intrinsics requires CLMUL instructions (not available on this CPU)");
 665     FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
 666   }
 667 
 668   if (supports_sse4_2()) {
 669     if (FLAG_IS_DEFAULT(UseCRC32CIntrinsics)) {
 670       UseCRC32CIntrinsics = true;
 671     }
 672   }
 673   else if (UseCRC32CIntrinsics) {
 674     if (!FLAG_IS_DEFAULT(UseCRC32CIntrinsics)) {
 675       warning("CRC32C intrinsics are not available on this CPU");
 676     }
 677     FLAG_SET_DEFAULT(UseCRC32CIntrinsics, false);
 678   }
 679 
 680   // The AES intrinsic stubs require AES instruction support (of course)
 681   // but also require sse3 mode for instructions it use.
 682   if (UseAES && (UseSSE > 2)) {
 683     if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
 684       UseAESIntrinsics = true;
 685     }
 686   } else if (UseAESIntrinsics) {
 687     if (!FLAG_IS_DEFAULT(UseAESIntrinsics))
 688       warning("AES intrinsics are not available on this CPU");
 689     FLAG_SET_DEFAULT(UseAESIntrinsics, false);
 690   }
 691 
 692   // GHASH/GCM intrinsics
 693   if (UseCLMUL && (UseSSE > 2)) {
 694     if (FLAG_IS_DEFAULT(UseGHASHIntrinsics)) {
 695       UseGHASHIntrinsics = true;
 696     }
 697   } else if (UseGHASHIntrinsics) {
 698     if (!FLAG_IS_DEFAULT(UseGHASHIntrinsics))
 699       warning("GHASH intrinsic requires CLMUL and SSE2 instructions on this CPU");
 700     FLAG_SET_DEFAULT(UseGHASHIntrinsics, false);
 701   }
 702 
 703   if (UseSHA) {
 704     warning("SHA instructions are not available on this CPU");
 705     FLAG_SET_DEFAULT(UseSHA, false);
 706   }
 707   if (UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics) {
 708     warning("SHA intrinsics are not available on this CPU");
 709     FLAG_SET_DEFAULT(UseSHA1Intrinsics, false);
 710     FLAG_SET_DEFAULT(UseSHA256Intrinsics, false);
 711     FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);






 712   }
 713 
 714   // Adjust RTM (Restricted Transactional Memory) flags
 715   if (!supports_rtm() && UseRTMLocking) {
 716     // Can't continue because UseRTMLocking affects UseBiasedLocking flag
 717     // setting during arguments processing. See use_biased_locking().
 718     // VM_Version_init() is executed after UseBiasedLocking is used
 719     // in Thread::allocate().
 720     vm_exit_during_initialization("RTM instructions are not available on this CPU");
 721   }
 722 
 723 #if INCLUDE_RTM_OPT
 724   if (UseRTMLocking) {
 725     if (is_intel_family_core()) {
 726       if ((_model == CPU_MODEL_HASWELL_E3) ||
 727           (_model == CPU_MODEL_HASWELL_E7 && _stepping < 3) ||
 728           (_model == CPU_MODEL_BROADWELL  && _stepping < 4)) {
 729         // currently a collision between SKL and HSW_E3
 730         if (!UnlockExperimentalVMOptions && UseAVX < 3) {
 731           vm_exit_during_initialization("UseRTMLocking is only available as experimental option on this platform. It must be enabled via -XX:+UnlockExperimentalVMOptions flag.");


< prev index next >