assembly - Neon 64 位 aarch : compare vector to zero

标签 assembly neon arm64 micro-optimization

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

现在,我有:

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

我也试过:

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

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

最佳答案

这应该可行

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
}

关于assembly - Neon 64 位 aarch : compare vector to zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48016909/

相关文章:

c - 寻找 asm 的等效 c 代码

linux - 在没有符号的情况下调试时如何跳过(不执行!)GDB 中的调用?

assembly - 使用基本内核实现 GDT

android - 具有相同内核的 ARM SoC 之间有很大差异吗?

assembly - aarch64 xtn2 清除下半部分

ios - 声明 ‘setxattr’ 必须先从模块 ‘Darwin.POSIX.sys.xattr’ 导入

rust - 位置无关代码 (PIC) 中的绝对地址

linux - 64位版本的socketcall系统调用Linux

arm - 对于 ARM Aarch64 的 NEON 编码,如何将寄存器压入堆栈?似乎 STMFD 不是 Aarch64 指令集的一部分?

ios - OpenTok (iOS) v2.4.0(64 位)——架构 armv7 的 undefined symbol