在 x64 上获取不带 __asm 的 SSE 版本

dem*_*rge 5 c++ assembly sse visual-c++ cpuid

我正在尝试构建 VS2010 CRT 库的某些函数的稍微修改的版本,除了尝试访问可能保存指令集架构版本(ISA)的全局变量的部分外,一切都很好:

if (__isa_available > __ISA_AVAILABLE_SSE2)
{
    // ...
}
else if (__isa_available == __ISA_AVAILABLE_SSE2)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我在程序集文件中找到了它应该保存的值

__ISA_AVAILABLE_X86   equ 0
__ISA_AVAILABLE_SSE2  equ 1
__ISA_AVAILABLE_SSE42 equ 2
__ISA_AVAILABLE_AVX   equ 3
Run Code Online (Sandbox Code Playgroud)

无法找到如何以及在何处__isa_available分配值(我已尝试在所有目录中查找文件......)

MSDN参考CPUID示例来确定指令集。问题是它使用了__asm块,而这些块在我的 x64 版本中是不允许的。

有谁知道如何快速分配正确的值__isa_available

Fox*_*x32 4

微软决定停止对内联汇编的支持。但他们引入了一种新的格式。您可以在此处找到有关新格式的 CPUID 的更多信息(带有示例)。

与内联汇编相比,内在函数的优点是它们与 x86 和 x64 兼容,无需额外代码,并且更易于使用。