【问题标题】:Neon 64 bit aarch: compare vector to zero霓虹灯 64 位 aarch:将向量与零进行比较
【发布时间】:2017-12-29 03:02:18
【问题描述】:

我想比较 Neon 64 位向量的所有 16 个元素,如果都等于 0,则有一个分支。

现在,我有:

uaddlv h1, v0.16b
umov w0, v1.s[0]
cmp w0, #0
beq .exit

我也试过了:

uaddlv h1, v0.16b
fcmp s1, #0.0
beq .exit

这是正确的吗?有没有办法做得更好?一条指令?

【问题讨论】:

    标签: assembly neon arm64 micro-optimization


    【解决方案1】:

    这应该可以工作

    umaxv h1, v0.16b // Get max value across vector
    umov w0, v1.s[0] // Move to arm register
    cbz w0 .exit // Branch if equal to zero
    

    在 C 中使用内部函数...

    if(vmaxvq_u16(vector) == 0) { // Is max value zero
        goto exit; // Goto label in C code
    }
    

    【讨论】:

    • 这是一个很好的答案。在周期方面,我认为这相当于我的第一个建议(我最终实施了)。我也用过 cbz。
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多