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

yhived7q  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(123)

我试图构建VS2010 CRT库的一些函数的稍微修改的版本,除了它试图访问一个全局变量的部分之外,一切都很好,该变量可能包含指令集架构版本(伊萨):

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是如何以及在哪里被赋值的,我们找不到(我在所有目录中尝试了find-in-files...)
MSDN参考CPUID示例来确定指令集。问题是它使用了__asm块,而这些块在我的x64构建中是不允许的。
有谁知道如何快速地为__isa_available分配正确的值?

nafvub8i

nafvub8i1#

微软决定停止对内联汇编的支持。但他们引入了一种新的格式。您可以在新格式here中找到有关CPUID的更多信息(示例)。
intrinsic优于内联汇编的优点是,它们与x86和x64兼容,无需额外代码,并且更易于使用。

n1bvdmb6

n1bvdmb62#

VC++有一个内部函数,允许你在没有内联ASM的情况下使用CPUID:
__cpuid in intrin.h
在同一个网站上也有一个广泛的代码示例。

相关问题