我正在尝试构建 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 http://msdn.microsoft.com/en-us/library/xs6aek1h.aspx确定指令集的示例。问题是它使用__asm
块,而这些在我的 x64 版本中是不允许的。
有谁知道如何快速分配正确的值__isa_available
?
微软决定停止对内联汇编的支持。但他们引入了一种新的格式。您可以在新格式中找到有关 CPUID 的更多信息here https://learn.microsoft.com/cpp/intrinsics/cpuid-cpuidex?view=msvc-170(举例)。
与内联汇编相比,内在函数的优点是它们与 x86 和 x64 兼容,无需额外代码,并且更易于使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)