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

标签 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 block ,而这些 block 在我的 x64 构建中是不允许的。

有谁知道如何快速为 __isa_available 分配正确的值?

最佳答案

Microsoft 决定停止对内联汇编的支持。但是他们引入了一种新格式。您可以在新格式 here 中找到有关 CPUID 的更多信息(有例子)。

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

关于c++ - 在 x64 上获取没有 __asm 的 SSE 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334548/

相关文章:

c++ - C++中如何存储静态数据和方法细节

c++ - 即时修改输入流数据

assembly - NASM 汇编代码中的段错误

c++ - 当我不知道 `std::unique_ptr<Base>(ptr)` 是如何分配的时, `ptr` 的销毁策略?

c++ - 系统调用 - sys/syscall.h - 不是这样的文件或目录 -

visual-studio-2010 - 添加指向与 GAC 不同版本的引用

.net - 即使我没有使用任何新功能,我也应该将应用程序编译为最新的.NET Framework吗?

asp.net - 启动 ASP.NET 开发服务器,然后在浏览器中打开的 .BAT 文件

assembly - 我如何知道汇编指令被命中的次数

linux - 无法访问地址 0x ffffdfc4 处的内存