Loading crypto/cryptlib.c +16 −6 Original line number Diff line number Diff line Loading @@ -61,16 +61,26 @@ void OPENSSL_cpuid_setup(void) } if ((env = strchr(env, ':'))) { unsigned int vecx; IA32CAP vecx; env++; off = (env[0] == '~') ? 1 : 0; # if defined(_WIN32) if (!sscanf(env + off, "%I64i", &vecx)) vecx = strtoul(env + off, NULL, 0); if (off) OPENSSL_ia32cap_P[2] &= ~vecx; else OPENSSL_ia32cap_P[2] = vecx; # else if (!sscanf(env + off, "%lli", (long long *)&vecx)) vecx = strtoul(env + off, NULL, 0); # endif if (off) { OPENSSL_ia32cap_P[2] &= ~(unsigned int)vecx; OPENSSL_ia32cap_P[3] &= ~(unsigned int)(vecx >> 32); } else { OPENSSL_ia32cap_P[2] = (unsigned int)vecx; OPENSSL_ia32cap_P[3] = (unsigned int)(vecx >> 32); } } else { OPENSSL_ia32cap_P[2] = 0; OPENSSL_ia32cap_P[3] = 0; } } else { vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P); Loading crypto/x86_64cpuid.pl +2 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ OPENSSL_ia32_cpuid: .cfi_register %rbx,%r8 xor %eax,%eax mov %eax,8(%rdi) # clear extended feature flags mov %rax,8(%rdi) # clear extended feature flags cpuid mov %eax,%r11d # max value for standard query level Loading Loading @@ -187,6 +187,7 @@ OPENSSL_ia32_cpuid: and \$0xfff7ffff,%ebx # clear ADCX/ADOX flag .Lnotknights: mov %ebx,8(%rdi) # save extended feature flags mov %ecx,12(%rdi) .Lno_extended_info: bt \$27,%r9d # check OSXSAVE bit Loading doc/man3/OPENSSL_ia32cap.pod +5 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,10 @@ a.k.a. AVX512IFMA extension; =item bit #64+31 denoting availability of AVX512VL extension; =item bit #64+41 denoting availability of VAES extension; =item bit #64+42 denoting availability of VPCLMULQDQ extension; =back To control this extended capability word use ':' as delimiter when Loading @@ -130,6 +134,7 @@ requirements are summarized in below table: ADCX/ADOX | 2.23 | 2.10 | 3.3 AVX512 | 2.25 | 2.11.8 | see NOTES AVX512IFMA | 2.26 | 2.11.8 | see NOTES VAES | n/a | n/a | =head1 NOTES Loading Loading
crypto/cryptlib.c +16 −6 Original line number Diff line number Diff line Loading @@ -61,16 +61,26 @@ void OPENSSL_cpuid_setup(void) } if ((env = strchr(env, ':'))) { unsigned int vecx; IA32CAP vecx; env++; off = (env[0] == '~') ? 1 : 0; # if defined(_WIN32) if (!sscanf(env + off, "%I64i", &vecx)) vecx = strtoul(env + off, NULL, 0); if (off) OPENSSL_ia32cap_P[2] &= ~vecx; else OPENSSL_ia32cap_P[2] = vecx; # else if (!sscanf(env + off, "%lli", (long long *)&vecx)) vecx = strtoul(env + off, NULL, 0); # endif if (off) { OPENSSL_ia32cap_P[2] &= ~(unsigned int)vecx; OPENSSL_ia32cap_P[3] &= ~(unsigned int)(vecx >> 32); } else { OPENSSL_ia32cap_P[2] = (unsigned int)vecx; OPENSSL_ia32cap_P[3] = (unsigned int)(vecx >> 32); } } else { OPENSSL_ia32cap_P[2] = 0; OPENSSL_ia32cap_P[3] = 0; } } else { vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P); Loading
crypto/x86_64cpuid.pl +2 −1 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ OPENSSL_ia32_cpuid: .cfi_register %rbx,%r8 xor %eax,%eax mov %eax,8(%rdi) # clear extended feature flags mov %rax,8(%rdi) # clear extended feature flags cpuid mov %eax,%r11d # max value for standard query level Loading Loading @@ -187,6 +187,7 @@ OPENSSL_ia32_cpuid: and \$0xfff7ffff,%ebx # clear ADCX/ADOX flag .Lnotknights: mov %ebx,8(%rdi) # save extended feature flags mov %ecx,12(%rdi) .Lno_extended_info: bt \$27,%r9d # check OSXSAVE bit Loading
doc/man3/OPENSSL_ia32cap.pod +5 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,10 @@ a.k.a. AVX512IFMA extension; =item bit #64+31 denoting availability of AVX512VL extension; =item bit #64+41 denoting availability of VAES extension; =item bit #64+42 denoting availability of VPCLMULQDQ extension; =back To control this extended capability word use ':' as delimiter when Loading @@ -130,6 +134,7 @@ requirements are summarized in below table: ADCX/ADOX | 2.23 | 2.10 | 3.3 AVX512 | 2.25 | 2.11.8 | see NOTES AVX512IFMA | 2.26 | 2.11.8 | see NOTES VAES | n/a | n/a | =head1 NOTES Loading