2012-02-17 63 views
4

我想构建VS2010 CRT库的一些功能稍微修改版本,除了它试图访问一个全局变量,大概持有指令集架构版本(ISA):得到SSE版本没有__asm在x64

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

回答

3

微软决定停止内联汇编的支持。但他们引入了一种新的格式。您可以以新格式here(举例)找到更多关于CPUID的信息。

内联比内联汇编的优势在于它们与x86和x64兼容,无需附加代码并且更易于使用。

+0

太棒了,这正是我所需要的。 – demorge 2012-02-17 20:15:33

1

VC++有一个内在,让您使用无CPUID内嵌ASM:

__cpuid in intrin.h

在同一网站是一个广泛的代码示例,太。