cpu_neon_vfpv4.c 609 B

123456789101112131415161718192021
  1. #ifdef _MSC_VER
  2. #include <Intrin.h>
  3. #endif
  4. #include <arm_neon.h>
  5. int main(int argc, char **argv)
  6. {
  7. float *src = (float*)argv[argc-1];
  8. float32x4_t v1 = vdupq_n_f32(src[0]);
  9. float32x4_t v2 = vdupq_n_f32(src[1]);
  10. float32x4_t v3 = vdupq_n_f32(src[2]);
  11. int ret = (int)vgetq_lane_f32(vfmaq_f32(v1, v2, v3), 0);
  12. #ifdef __aarch64__
  13. double *src2 = (double*)argv[argc-2];
  14. float64x2_t vd1 = vdupq_n_f64(src2[0]);
  15. float64x2_t vd2 = vdupq_n_f64(src2[1]);
  16. float64x2_t vd3 = vdupq_n_f64(src2[2]);
  17. ret += (int)vgetq_lane_f64(vfmaq_f64(vd1, vd2, vd3), 0);
  18. #endif
  19. return ret;
  20. }