我正在尝试构建 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
block ,而这些 block 在我的 x64 构建中是不允许的。
有谁知道如何快速为 __isa_available
分配正确的值?
最佳答案
Microsoft 决定停止对内联汇编的支持。但是他们引入了一种新格式。您可以在新格式 here 中找到有关 CPUID 的更多信息(有例子)。
与内联汇编相比,内在函数的优势在于它们无需额外代码即可与 x86 和 x64 兼容,并且更易于使用。
关于c++ - 在 x64 上获取没有 __asm 的 SSE 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334548/