gpt4 book ai didi

assembly - 支持 AVX2 的处理器上的非法指令 vgatherdps

转载 作者:行者123 更新时间:2023-12-02 05:32:04 29 4
gpt4 key购买 nike

我正在为 AVX2 指令开发一个代码生成器,并尝试在 AMD A10 8700 处理器上测试它,根据规范,该处理器应该运行 AVX2。

但是,它因 vgatherdps 指令上的非法指令而崩溃:

vmovdqu     yMM0,  [ r9+  PmainBase +  -256]; LDdqyy;0
lea r9, [ PmainBase + -192];0
vpcmpeqw ymm8, ymm8, ymm8;0
vgatherdps YMM0, [ r9+ yMM0*4 ] ,ymm8;0

cpuid 信息显示包含 avx2,因此 VGATHERDPS 应该是合法的。

有什么线索吗?

最佳答案

根据Intel's Instruction Reference :

If any pair of the index, mask, or destination registers are the same, this instruction results a UD fault.

您的目标寄存器和索引寄存器是相同的 (ymm0)。因此该指令是非法的。我很惊讶汇编器没有拒绝它。所以我认为这是汇编器中的一个错误。

<小时/>

此限制背后的原因是收集指令实际上写入两个寄存器。

  1. 它将收集的结果写入目的地。
  2. 它将零掩码写回掩码寄存器,指示哪些 channel 成功。

在正常执行下,掩码寄存器将被零完全覆盖。但如果出现故障,并不是所有的加载都会成功。因此该指令可能只被部分执行。覆盖掩码寄存器的目的是告诉信号处理程序哪些 channel 成功,哪些 channel 失败。

索引寄存器不能与目标寄存器或掩码寄存器别名,因为它会被覆盖,从而无法在从信号处理程序返回时恢复指令。

关于assembly - 支持 AVX2 的处理器上的非法指令 vgatherdps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571313/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com