首页 > 解决方案 > 如何使用 __cpuid 检查 AES-NI 支持?

问题描述

我正在寻找一种方法来检查我的 CPU 是否支持 AES-NI 指令。我在 Internet 上发现了很多东西,但其中很多都是内联汇编代码,而且由于我在 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");

标签: cvisual-studio-2015intrinsicscpuidaes-ni

解决方案


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


推荐阅读