From e4ce1ffd85ef42dbe48e26ca5ceed06ed3d2b6c2 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 12 Aug 2019 15:28:42 -0700 Subject: [PATCH] Windows detection of AES-NI --- node/AES.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/node/AES.cpp b/node/AES.cpp index c36bb19fd..9da072e7c 100644 --- a/node/AES.cpp +++ b/node/AES.cpp @@ -26,15 +26,26 @@ #include "AES.hpp" +#if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64)) +#include +#include +#include +#endif +#ifdef _WIN32 +#include +#endif + namespace ZeroTier { #if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64)) -#include -#include -#include static inline bool _zt_aesni_supported() { +#ifdef WIN32 + int regs[4]; + __cpuid(regs, 1); + return (regs[2] >> 25) & 1; +#else uint32_t eax,ebx,ecx,edx; __asm__ __volatile__ ( "cpuid" @@ -42,6 +53,7 @@ static inline bool _zt_aesni_supported() : "a"(1), "c"(0) ); return ((ecx & (1 << 25)) != 0); +#endif } const bool AES::HW_ACCEL = _zt_aesni_supported();