gpt4 book ai didi

neon - 使用内在函数测试 128 位 NEON 寄存器的值为 0 的最快方法?

转载 作者:行者123 更新时间:2023-12-03 18:30:50 25 4
gpt4 key购买 nike

我正在寻找使用 NEON 内在函数测试 128 NEON 寄存器是否包含全零的最快方法。
我目前正在使用 3 个 OR 操作和 2 个 MOV:

uint32x4_t vr = vorrq_u32(vcmp0, vcmp1);

uint64x2_t v0 = vreinterpretq_u64_u32(vr);
uint64x1_t v0or = vorr_u64(vget_high_u64(v0), vget_low_u64(v0));

uint32x2_t v1 = vreinterpret_u32_u64 (v0or);
uint32_t r = vget_lane_u32(v1, 0) | vget_lane_u32(v1, 1);

if (r == 0) { // do stuff }

这由 gcc 转换为以下汇编代码:
VORR     q9, q9, q10
VORR d16, d18, d19
VMOV.32 r3, d16[0]
VMOV.32 r2, d16[1]
VORRS r2, r2, r3
BEQ ...

有没有人有更快的方法的想法?

最佳答案

虽然这个答案可能有点晚了,但有一种简单的方法可以只用 3 条指令进行测试,不需要额外的寄存器:

inline uint32_t is_not_zero(uint32x4_t v)
{
uint32x2_t tmp = vorr_u32(vget_low_u32(v), vget_high_u32(v));
return vget_lane_u32(vpmax_u32(tmp, tmp), 0);
}

如果设置了 128 位 NEON 寄存器中的任何位,则返回值将为非零。

关于neon - 使用内在函数测试 128 位 NEON 寄存器的值为 0 的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com