YMM寄存器之间的逻辑移位

问题描述 投票:0回答:1

我是否可以将 2048 位数字加载到 8 个 AVX ymm 寄存器中,并在所有这些寄存器之间左右移动位?

我每次只需要移动 1 位。

我尝试在 AVX 上找到准确的信息,但 xmm/ymm/zmm 和进位位之间的交互很多时候似乎不清楚。

assembly x86-64 avx avx2 avx512
1个回答
0
投票

我尝试在 AVX 上找到准确的信息,但 xmm/ymm/zmm 和进位位之间的交互很多时候似乎不清楚。

这就是简单的部分:没有交互。 SSE/AVX 算术不涉及标志。有一些特定的指令可以比较/测试向量(

ptest
)或向量中的标量(
comiss
等),然后设置标志,但它们在这里没那么有用。

一种方法是从数字的顶部而不是底部开始,加载两个稍微偏移(大部分重叠,以便其中一个向量与另一个向量相比偏移一个元素)向量,并使用“连接”之一和shift”指令(例如

vpshld
)进行左移,从前一个元素移入位而不是零。在 AVX2 中,您可以使用左移、右移和
vpor
来模拟这一点。

© www.soinside.com 2019 - 2024. All rights reserved.