霓虹灯:float32x4_t向量中最多有四个浮点值

时间:2015-03-30 11:41:01

标签: arm simd neon cortex-a8

我想找出一个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,它再次是一个向量类型。那么,谁能告诉我这种操作的方法呢?

1 个答案:

答案 0 :(得分:2)

从向量中提取单个值的内在函数是vget_lane_<type> - 两个适当的成对最大值操作将为您提供一个双字向量,其中包含两个通道中的所需值,您可以从中选择它: / p>

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和适当的指针直接存储它。