我想找出一个32x4向量中四个值中的最大值。
我有一个类型为float32x4_t
:的矢量
float32x4_t maxR = {10.21,10.25,23.5,24.86} //FOR EXAMPLE
我想找出这四个值中的最大值(10.21,10.25,23.5,24.86),有这样做的指示吗?
我想使用vpmax_f32
内部函数,但得出的结论是这是错误的,因为返回类型是float32x2_t
,它又是一个向量类型。那么,有人能告诉我做这个手术的方法吗?
从向量中提取单个值的内在值是vget_lane_<type>
-两个适当的成对最大运算将使您在两个通道中都得到一个包含所需值的双字向量,您可以从中选择它:
float horz_max(float32x4_t f) {
float32x2_t tmp;
tmp = vpmax_f32(vget_low_f32(f), vget_high_f32(f));
tmp = vpmax_f32(tmp, tmp);
return vget_lane_f32(tmp, 0);
}
或者,如果您现在实际上不需要寄存器中的值,并且无论如何都要将其写回内存变量,那么使用带有适当指针的vst1_lane_f32
直接存储它可能会更有效。