是否可以在Altivec中旋转128位值?

时间:2017-09-02 13:46:58

标签: c rotation intrinsics powerpc altivec

我正在尝试将一些ARM NEON代码移植到AltiVec。我们的NEON代码有两个LOAD,一个ROT,一个XOR和一个STORE,所以它看起来像一个简单的测试用例。根据IBM的vec_rl文档:

  

结果的每个元素都是通过将左边的相应元素旋转b的相应元素指定的位数来获得的。

文档继续说vector unsigned int是最大的数据类型,除非-qarch=power8,在这种情况下vector unsigned long long适用。

我想执行128位旋转,而不是单个元素的32位或64位旋转。位位置为19,31,67,97和109.它们不是字节对齐的。 (常数来自ARIA block cipher)。

4x32和2x64是最大的AltiVec数据安排吗?是否可以在Altivec中旋转128位值?

如果打包旋转是唯一可用的操作,那么最好在C或AltiVec中进行旋转吗?

1 个答案:

答案 0 :(得分:1)

您可以使用vsldvec_sld)旋转8位的倍数,然后处理< 8位您可能需要使用vsl + vsr + vselvec_sll + vec_srl + vec_sel)。