【问题标题】:Is it possible to rotate a 128-bit value in Altivec?是否可以在 Altivec 中旋转 128 位值?
【发布时间】: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 数据排列吗?是否可以在 Altivec 中旋转 128 位值?

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

【问题讨论】:

    标签: c rotation intrinsics powerpc altivec


    【解决方案1】:

    您可以使用 vsld (vec_sld) 执行 8 位的倍数循环,然后要处理 vsl + vsr + @ 987654327@ (vec_sll + vec_srl + vec_sel)。

    【讨论】:

    • 谢谢保罗。我无法找到有关 vec_sllvec_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?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多