1

我有一组 32 位浮点寄存器,在一些计算之后可能包含 NaN。我想在四寄存器中将任何 NaN 转换为零,理想情况下只使用 SIMD 指令。数据由四元寄存器q0中的四个浮点数组成。我怎样才能做到这一点?

4

1 回答 1

4

您可以使用 NaN 的属性,即比较 NaN 与自身是否相等返回 false。使用它来生成一个掩码,然后将此掩码与原始浮点向量相加,例如

uint32x4_t vmask = vceqq_f32(va, va);
va = (float32x4_t)vandq_u32((uint32x4_t)va, vmask);
于 2012-11-19T17:23:17.773 回答