我正在尝试将一些 ARM NEON 代码移植到 AltiVec。我们的 NEON 代码有两个 LOAD,一个 ROT,一个 XOR 和一个 STORE,所以它看起来像一个简单的测试用例。根据 IBM 的vec_rl
文档:
结果的每个元素是通过将 a 的相应元素向左旋转 b 的相应元素指定的位数获得的。
文档继续说vector unsigned int
是最大的数据类型,除非-qarch=power8
,在这种情况下vector unsigned long long
适用。
我想对单个元素执行 128 位旋转,而不是 32 位或 64 位旋转。位位置是 19、31、67、97 和 109。它们不是字节对齐的。(常数来自ARIA 分组密码)。
4x32 和 2x64 是最大的 AltiVec 数据排列吗?是否可以在 Altivec 中旋转 128 位值?
如果打包旋转是唯一可用的操作,那么在 C 或 AltiVec 中进行位旋转是最佳实践吗?