【问题标题】:How to reorder a quadword vector data using Neon Intrinsics?如何使用 Neon Intrinsics 重新排序四字向量数据?
【发布时间】:2011-05-28 06:10:10
【问题描述】:

这个问题与 ARM NEON 内在函数有关。 我正在使用 ARM neon 内在函数来实现 FIR。 我想重新排序四字向量数据。 例如, Neon 寄存器中有四个 32 位元素 - 例如 Q0 - 大小为 128 位。

A3 A2 A1 A0

我想将 Q0 重新排序为 A0 A1 A2 A3。

有没有办法做到这一点?

【问题讨论】:

    标签: arm neon


    【解决方案1】:

    阅读http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html 和 ARM 信息中心,我认为以下内容可以满足您的要求:

        uint32x2_t dvec_h = vget_high_u32(qvec);
        uint32x2_t dvec_l = vget_low_u32(qvec);
    
        dvec_h = vrev64_u32(dvec_h);
        dvec_l = vrev64_u32(dvec_l);
    
        qvec = vcombine_u32(dvec_h, dvec_l);
    

    在汇编中,这可以简单地写成:

        VSWP      d0, d1
        VREV64.32 q0, q0
    

    【讨论】:

    • vrev64q_u32 可以一步完成吗?此外,vzip_u32 可能会让事情变得更紧凑。 vzip_u32(vget_high_u32(x), vget_low_u32(x)) 之类的东西也可能有效。另见Coding for NEON - Part 5: Rearranging Vectors。
    • @jww: 不知道 :) 好几年没做过 NEON,也不知道当时有没有。建议您发布自己的答案。
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多