assembly AVX2指令集是否有反转每个16位数的指令?

9wbgstp7  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(135)

例如,a0......a15,更改为-a0,......,-a15我找了官方手册,但没有找到。我在网上找了很长时间。但没有用。请帮助或尝试给予一些想法如何实现这一点。

t2a7ltrp

t2a7ltrp1#

据我所知,没有一条指令可以在所有上下文中充当neg的压缩等价物,但是,如果你有一个全零向量,你可以用一条指令从中减去。
如果还没有全零向量,可以通过vpxor获得一个全零向量:

vpxor xmm7, xmm7, xmm7

然后可以使用vpsubw从全零向量中减去16位数,得到负数(这里,我从ymm1获取输入,并在ymm2中输出,使用ymm7作为全零向量):

vpsubw ymm2, ymm7, ymm1

您可以生成全零寄存器一次,然后使用同一寄存器进行多次减法,只要不更改其值(例如,如果你有一个循环,需要对大量的16位数求反,你可以在循环之前创建一个零寄存器,然后只需要使用vpsubw就可以对循环内部的数求反)。所以这个方法只需要一条指令就可以对你的数求反,加上一个设置指令。
请注意,xmm寄存器上的vpxor会将相应ymm寄存器的上半部分清零,因此,可以通过xorxmm寄存器与其自身相加,将整个ymm寄存器清零。

相关问题