< prev index next >

src/cpu/x86/vm/vm_version_x86.hpp

Print this page




 488         if (_cpuid_info.sef_cpuid7_ebx.bits.avx512bw != 0)
 489           result |= CPU_AVX512BW;
 490         if (_cpuid_info.sef_cpuid7_ebx.bits.avx512vl != 0)
 491           result |= CPU_AVX512VL;
 492       }
 493     }
 494     if(_cpuid_info.sef_cpuid7_ebx.bits.bmi1 != 0)
 495       result |= CPU_BMI1;
 496     if (_cpuid_info.std_cpuid1_edx.bits.tsc != 0)
 497       result |= CPU_TSC;
 498     if (_cpuid_info.ext_cpuid7_edx.bits.tsc_invariance != 0)
 499       result |= CPU_TSCINV;
 500     if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0)
 501       result |= CPU_AES;
 502     if (_cpuid_info.sef_cpuid7_ebx.bits.erms != 0)
 503       result |= CPU_ERMS;
 504     if (_cpuid_info.std_cpuid1_ecx.bits.clmul != 0)
 505       result |= CPU_CLMUL;
 506     if (_cpuid_info.sef_cpuid7_ebx.bits.rtm != 0)
 507       result |= CPU_RTM;








 508 
 509     // AMD features.
 510     if (is_amd()) {
 511       if ((_cpuid_info.ext_cpuid1_edx.bits.tdnow != 0) ||
 512           (_cpuid_info.ext_cpuid1_ecx.bits.prefetchw != 0))
 513         result |= CPU_3DNOW_PREFETCH;
 514       if (_cpuid_info.ext_cpuid1_ecx.bits.lzcnt != 0)
 515         result |= CPU_LZCNT;
 516       if (_cpuid_info.ext_cpuid1_ecx.bits.sse4a != 0)
 517         result |= CPU_SSE4A;


 518     }
 519     // Intel features.
 520     if(is_intel()) {
 521       if(_cpuid_info.sef_cpuid7_ebx.bits.adx != 0)
 522          result |= CPU_ADX;
 523       if(_cpuid_info.sef_cpuid7_ebx.bits.bmi2 != 0)
 524         result |= CPU_BMI2;
 525       if (_cpuid_info.sef_cpuid7_ebx.bits.sha != 0)
 526         result |= CPU_SHA;
 527       if(_cpuid_info.ext_cpuid1_ecx.bits.lzcnt_intel != 0)
 528         result |= CPU_LZCNT;
 529       if (_cpuid_info.std_cpuid1_ecx.bits.fma != 0)
 530         result |= CPU_FMA;
 531       // for Intel, ecx.bits.misalignsse bit (bit 8) indicates support for prefetchw
 532       if (_cpuid_info.ext_cpuid1_ecx.bits.misalignsse != 0) {
 533         result |= CPU_3DNOW_PREFETCH;
 534       }
 535     }
 536 
 537     return result;
 538   }
 539 
 540   static bool os_supports_avx_vectors() {
 541     bool retVal = false;
 542     if (supports_evex()) {
 543       // Verify that OS save/restore all bits of EVEX registers
 544       // during signal processing.
 545       int nreg = 2 LP64_ONLY(+2);
 546       retVal = true;
 547       for (int i = 0; i < 16 * nreg; i++) { // 64 bytes per zmm register
 548         if (_cpuid_info.zmm_save[i] != ymm_test_value()) {
 549           retVal = false;
 550           break;




 488         if (_cpuid_info.sef_cpuid7_ebx.bits.avx512bw != 0)
 489           result |= CPU_AVX512BW;
 490         if (_cpuid_info.sef_cpuid7_ebx.bits.avx512vl != 0)
 491           result |= CPU_AVX512VL;
 492       }
 493     }
 494     if(_cpuid_info.sef_cpuid7_ebx.bits.bmi1 != 0)
 495       result |= CPU_BMI1;
 496     if (_cpuid_info.std_cpuid1_edx.bits.tsc != 0)
 497       result |= CPU_TSC;
 498     if (_cpuid_info.ext_cpuid7_edx.bits.tsc_invariance != 0)
 499       result |= CPU_TSCINV;
 500     if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0)
 501       result |= CPU_AES;
 502     if (_cpuid_info.sef_cpuid7_ebx.bits.erms != 0)
 503       result |= CPU_ERMS;
 504     if (_cpuid_info.std_cpuid1_ecx.bits.clmul != 0)
 505       result |= CPU_CLMUL;
 506     if (_cpuid_info.sef_cpuid7_ebx.bits.rtm != 0)
 507       result |= CPU_RTM;
 508     if(_cpuid_info.sef_cpuid7_ebx.bits.adx != 0)
 509        result |= CPU_ADX;
 510     if(_cpuid_info.sef_cpuid7_ebx.bits.bmi2 != 0)
 511       result |= CPU_BMI2;
 512     if (_cpuid_info.sef_cpuid7_ebx.bits.sha != 0)
 513       result |= CPU_SHA;
 514     if (_cpuid_info.std_cpuid1_ecx.bits.fma != 0)
 515       result |= CPU_FMA;
 516 
 517     // AMD features.
 518     if (is_amd()) {
 519       if ((_cpuid_info.ext_cpuid1_edx.bits.tdnow != 0) ||
 520           (_cpuid_info.ext_cpuid1_ecx.bits.prefetchw != 0))
 521         result |= CPU_3DNOW_PREFETCH;
 522       if (_cpuid_info.ext_cpuid1_ecx.bits.lzcnt != 0)
 523         result |= CPU_LZCNT;
 524       if (_cpuid_info.ext_cpuid1_ecx.bits.sse4a != 0)
 525         result |= CPU_SSE4A;
 526       if(_cpuid_info.std_cpuid1_edx.bits.ht != 0)
 527         result |= CPU_HT;
 528     }
 529     // Intel features.
 530     if(is_intel()) {






 531       if(_cpuid_info.ext_cpuid1_ecx.bits.lzcnt_intel != 0)
 532         result |= CPU_LZCNT;


 533       // for Intel, ecx.bits.misalignsse bit (bit 8) indicates support for prefetchw
 534       if (_cpuid_info.ext_cpuid1_ecx.bits.misalignsse != 0) {
 535         result |= CPU_3DNOW_PREFETCH;
 536       }
 537     }
 538 
 539     return result;
 540   }
 541 
 542   static bool os_supports_avx_vectors() {
 543     bool retVal = false;
 544     if (supports_evex()) {
 545       // Verify that OS save/restore all bits of EVEX registers
 546       // during signal processing.
 547       int nreg = 2 LP64_ONLY(+2);
 548       retVal = true;
 549       for (int i = 0; i < 16 * nreg; i++) { // 64 bytes per zmm register
 550         if (_cpuid_info.zmm_save[i] != ymm_test_value()) {
 551           retVal = false;
 552           break;


< prev index next >