如何使用__cpuid检查AES-NI支持?

时间:2018-05-30 16:36:38

标签: c visual-studio-2015 64-bit intrinsics aes-ni

我正在寻找一种方法来检查我的CPU是否支持AES-NI指令。我在互联网上发现了很多东西,但它们很多都是内联汇编代码,因为我在Microsoft Visual Studio下,而且我在x64中进行编译,这是行不通的。 Visual Studio不支持x64内联汇编代码,x64对我来说至关重要。

所以我找到了内在函数__cpuid()。问题是我不知道汇编/内在使用等等......(我只是复制粘贴我发现的代码)

所以我在这里向您询问下面我使用互联网代码编写的代码。输出是“支持AES-Ni”,但这并不意味着我的代码是正确的,并且真正检索到我的CPU的AES-NI容量。

int cpuInfo[4] = { -1 };

__cpuid(cpuInfo, 1);
_Bool returned = ((cpuInfo[3] & 0x2000000) != 0);

if (returned == 1)
    printf("AES-NI supported");
else
    printf("AES-NI not-supported");

1 个答案:

答案 0 :(得分:0)

AES 位在 ECX(第 25 位)中,因此您应该使用 cpuInfo[2]。