在x64上获取没有__asm的SSE版本

时间:2012-02-17 19:56:36

标签: c++ visual-studio-2010 assembly sse

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

if (__isa_available > __ISA_AVAILABLE_SSE2)
{
    // ...
}
else if (__isa_available == __ISA_AVAILABLE_SSE2)
{
    // ...
}

我应该在程序集文件中找到的值

__ISA_AVAILABLE_X86   equ 0
__ISA_AVAILABLE_SSE2  equ 1
__ISA_AVAILABLE_SSE42 equ 2
__ISA_AVAILABLE_AVX   equ 3

无法找到__isa_available分配值的方式和位置(我在所有目录中尝试过查找文件......)

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

VC ++有一个内在函数,允许您在没有内联ASM的情况下使用CPUID:

__cpuid in intrin.h

在同一个网站上也是一个广泛的代码示例。