From cdca34e628f6b8145248d36b4917ce20204b527e Mon Sep 17 00:00:00 2001 From: Jason Rhinelander Date: Thu, 21 Nov 2019 11:50:04 -0400 Subject: [PATCH] Fix runtime AVX2 detection The feature flags come via __cpuid_count instead of __cpuid Also removes a couple unneeded headers. --- crypto/libntrup/src/ntru.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/crypto/libntrup/src/ntru.cpp b/crypto/libntrup/src/ntru.cpp index c27d38402..c86451b56 100644 --- a/crypto/libntrup/src/ntru.cpp +++ b/crypto/libntrup/src/ntru.cpp @@ -1,24 +1,19 @@ #include -#include - -#include // printf #if __AVX2__ #include #include -std::array< int, 4 > -CPUID(int funcno) -{ - std::array< int, 4 > cpuinfo; - __cpuid(funcno, cpuinfo[0], cpuinfo[1], cpuinfo[2], cpuinfo[3]); - return cpuinfo; -} - bool supports_avx2() { - return CPUID(0).at(0) >= 7 && CPUID(7).at(1) & (1 << 5); + std::array< int, 4 > cpuinfo; + __cpuid(0, cpuinfo[0], cpuinfo[1], cpuinfo[2], cpuinfo[3]); + if (cpuinfo[0] < 7) + return false; + + __cpuid_count(7, 0, cpuinfo[0], cpuinfo[1], cpuinfo[2], cpuinfo[3]); + return cpuinfo[1] & (1 << 5); } #else