Blame view

3rdparty/opencv-4.5.4/cmake/checks/cpu_fp16.cpp 825 Bytes
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  #include <stdio.h>
  
  #if defined __F16C__ || (defined _MSC_VER && _MSC_VER >= 1700 && defined __AVX__) || (defined __INTEL_COMPILER && defined __AVX__)
  #include <immintrin.h>
  int test()
  {
      const float src[] = { 0.0f, 0.0f, 0.0f, 0.0f };
      short dst[8];
      __m128 v_src = _mm_load_ps(src);
      __m128i v_dst = _mm_cvtps_ph(v_src, 0);
      _mm_storel_epi64((__m128i*)dst, v_dst);
      return (int)dst[0];
  }
  #elif defined __GNUC__ && (defined __arm__ || defined __aarch64__)
  #include "arm_neon.h"
  int test()
  {
      const float src[] = { 0.0f, 0.0f, 0.0f, 0.0f };
      short dst[8];
      float32x4_t v_src = *(float32x4_t*)src;
      float16x4_t v_dst = vcvt_f16_f32(v_src);
      *(float16x4_t*)dst = v_dst;
      return (int)dst[0];
  }
  #else
  #error "FP16 is not supported"
  #endif
  
  int main()
  {
    printf("%d\n", test());
    return 0;
  }