visual-studio - 如何在 MASM/VS15 中使用 AVX2?

标签 visual-studio assembly masm avx2

问题:我写了这样的东西(在过程中):

.CODE
myProc PROC
    vpmovsxbd ymm0, qword ptr [rdx] ; rdx is ptr to array of 8 bytes
    vcvtdqps ymm0, ymm0
    ret
myProc ENDP

masm 提示第一个是invalid instruction operands,第二个是syntax error : ymm0。 我正在使用 VS15 社区版为 x64 编译。

最佳答案

第一个错误看起来像是 MASM 中的问题——它只是拒绝接受该指令的那种形式(即使英特尔文档说它存在)。

我能找到的最接近的解决方法是:

vmovdqu xmm0, xmmword ptr[rdx]
vpmovsxbd ymm0, xmm0

...但相比之下,这显然有点笨拙(因为它破坏了一些 xmm 寄存器,并且显然需要解码指令指令等)另一方面,它可能不会在速度上产生太大差异,因为一条规则(因为在任何情况下,速度通常都取决于内存读取时间)。

附带说明一下,MS 编译器似乎也有大致相同的问题。使用 _mm256_cvtepi8_epi32 内部函数进行快速检查,英特尔表示应该生成一个 vpmovsxbd,表明 Microsoft 编译器生成它的顺序与上面的序列相同—— vmovdqu 后跟 vpmovsxbd

对于第二个,您显然想要 vcvtdq2ps,但遗漏了 2。由于汇编程序没有将其识别为一条指令,因此它根本不知道该行应该是什么。

如果您真的关心,它可能试图将其解析为如下声明:

my_var dd ?

因此,第一部分(vcvtdqps)似乎是合法的,但作为一个符号,而不是指令。然后它找到了 ymm0 而不是像 dbdwdq(等等)这样的东西,并意识到有一个错误,因为注册名称在那里是不合法的。

关于visual-studio - 如何在 MASM/VS15 中使用 AVX2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395795/

相关文章:

assembly - ELF 格式的可重定位符号(汇编语言)

assembly - 你如何比较汇编中的变量类型?

c - 将 Quake 2 中的 MASM5 代码移植到 GAS——意外的渲染结果

处理负整数的汇编 MASM

.net - Visual Studio 2013 登录错误

mysql - Visual Studio 2015 组合框

c - C 程序的类似 Hibernate 的功能

c - 为什么目标文件被分成 8 列,每列 4 个十六进制数的网格?

.net - 将选项 "show password "添加到 asp.net 登录控件

c# - Visual Studio 2005/2008 中的解决方案项