是否可以在 Altivec 中旋转 128 位值?
Posted
技术标签:
【中文标题】是否可以在 Altivec 中旋转 128 位值?【英文标题】:Is it possible to rotate a 128-bit value in Altivec? 【发布时间】:2017-09-02 13:46:57 【问题描述】:我正在尝试将一些 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 block cipher)。
4x32 和 2x64 是最大的 AltiVec 数据排列吗?
如果打包旋转是唯一可用的操作,那么在 C 或 AltiVec 中进行位旋转是最佳实践吗?
【问题讨论】:
【参考方案1】:您可以使用 vsld
(vec_sld
) 执行 8 位的倍数循环,然后要处理 vsl + vsr
+ @ 987654327@ (vec_sll
+ vec_srl
+ vec_sel
)。
【讨论】:
谢谢保罗。我无法找到有关vec_sll
和 vec_srl
的信息。 IBM 的Vector built-in functions 中没有记录它们。你能分享更多信息吗?
刚刚在移动设备上,但谷歌“AltiVec PIM”,您应该会在前几条点击中看到一个 PDF,其中记录了所有内在函数等。配套手册是“AltiVec PEM”,它记录了实际说明。
注意:您的问题被标记为 PowerPC
- 您实际上是在使用 PowerPC/AltiiVec 还是 IBM POWER/VMX(类似但不同)。
谢谢保罗。我正在研究GCC112 from the compile farm,它被描述为 IBM POWER8。
对,但是您的目标是什么硬件平台? POWER 还是 PowerPC?以上是关于是否可以在 Altivec 中旋转 128 位值?的主要内容,如果未能解决你的问题,请参考以下文章