Divide by floating-point number using NEON intrinsics
The NEON instruction set does not have a floating-point divide.
If you know a priori that your values are not poorly scaled, and you do not require correct rounding (this is almost certainly the case if you're doing image processing), then you can use a reciprocal estimate, refinement step, and multiply instead of a divide:
// get an initial estimate of 1/b.float32x4_t reciprocal = vrecpeq_f32(b);// use a couple Newton-Raphson steps to refine the estimate. Depending on your// application's accuracy requirements, you may be able to get away with only// one refinement (instead of the two used here). Be sure to test!reciprocal = vmulq_f32(vrecpsq_f32(b, reciprocal), reciprocal);reciprocal = vmulq_f32(vrecpsq_f32(b, reciprocal), reciprocal);// and finally, compute a/b = a*(1/b)float32x4_t result = vmulq_f32(a,reciprocal);