我正在尝试将一些ARM霓虹灯代码移植到AltiVec。我们的NEON代码有两个LOAD,一个ROT,一个XOR和一个存储,所以它看起来像是一个简单的测试用例。根据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中进行比特旋转是最佳实践吗?
发布于 2017-09-02 16:46:40
您可以使用vsld (vec_sld)执行8位的多次旋转,然后使用vsl + vsr + vsel (vec_sll + vec_srl + vec_sel)来处理任何剩余的<8位旋转。
https://stackoverflow.com/questions/46014463
复制相似问题