微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以将 ymm16 - ymm31 用于 AVX2 vpcmpeq{size} 指令?

如何解决是否可以将 ymm16 - ymm31 用于 AVX2 vpcmpeq{size} 指令?

我想知道是否可以按照以下方式做一些事情:

vpcmpeqb %ymm16,%ymm17,%ymm16

尝试使用 gcc 进行编译,我得到:

Assembler messages: Error: unsupported instruction `vpcmpeqb'

AFAICT 这是不可能的 felixcloutier 表示 cmpeq 的唯一 EVEX 前缀指令有一个掩码目标,但可能我遗漏了一些东西或者直接使用字节编码来做到这一点的方法

谢谢!

解决方法

X / YMM16..31 完全需要 EVEX 才能访问。

您不能将它们与 AVX1 / AVX2 形式的指令一起使用。
所以不,要么只比较掩码寄存器,要么使用 ymm0..15。

VEX 前缀 + modrm 每条指令总共只有 4 位,因此 AVX1/2 编码无法使用需要 5 位的寄存器编号。


GAS 的错误消息没有帮助。也许它基于 AVX-512-only 寄存器的使用决定它是 EVEX 形式,然后注意到它是错误的操作数集。

NASM 说“操作码和操作数的无效组合”也不是很具体,但至少是正确的。

clang 的内置汇编器可能是最好的:

foo.s:1:26: error: invalid operand for instruction
vpcmpeqb %ymm16,%ymm17,%ymm16
                         ^~~~~~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。