NEON intrinsics中找不到对应`VMOV Q1, Q2`的vmov函数该如何解决?
NEON intrinsics实现
VMOV Q1, Q2同长度向量拷贝的方案 - 直接使用C语言赋值语法即可,NEON intrinsic是C层面的抽象,不需要调用专用指令接口。假设Q2对应的128位向量变量为
q2_val,直接写如下代码即可实现等值拷贝:
开启优化后编译器会自动生成// 以int8类型128位向量为例,其他类型逻辑完全一致 int8x16_t q1_val = q2_val;VMOV汇编指令完成寄存器拷贝,不会引入额外计算开销。 - 如果需要在不同类型的128位NEON向量之间做无转换拷贝,可使用
vreinterpretq系列强转接口,操作本身无计算开销,编译器同样会生成VMOV或直接复用寄存器:// 示例:把uint8类型的q2值拷贝给int32类型的q1 int32x4_t q1_val = vreinterpretq_s32_u8(q2_val); - 额外说明:NEON intrinsic规范没有定义单独的
vmov通用拷贝接口,是因为C原生赋值已经覆盖了该语义。你找到的VMOVL、VMOVN是长短向量升降位转换的专用接口,用于64位向量和128位向量之间的带类型转换操作,和同长度寄存器拷贝的场景不匹配。
内容的提问来源于stack exchange,提问作者Fantasy_RQG
相关产品推荐
相关产品推荐

