opencv
1#include <stdio.h>
2
3#if defined __F16C__ || (defined _MSC_VER && _MSC_VER >= 1700 && defined __AVX__) || (defined __INTEL_COMPILER && defined __AVX__)
4#include <immintrin.h>
5int test()
6{
7const float src[] = { 0.0f, 0.0f, 0.0f, 0.0f };
8short dst[8];
9__m128 v_src = _mm_load_ps(src);
10__m128i v_dst = _mm_cvtps_ph(v_src, 0);
11_mm_storel_epi64((__m128i*)dst, v_dst);
12return (int)dst[0];
13}
14#elif (defined __GNUC__ && (defined __arm__ || defined __aarch64__)) /*|| (defined _MSC_VER && defined _M_ARM64)*/
15// Windows + ARM64 case disabled: https://github.com/opencv/opencv/issues/25052
16#include "arm_neon.h"
17int test()
18{
19const float src[] = { 0.0f, 0.0f, 0.0f, 0.0f };
20short dst[8];
21float32x4_t v_src = *(float32x4_t*)src;
22float16x4_t v_dst = vcvt_f16_f32(v_src);
23*(float16x4_t*)dst = v_dst;
24return (int)dst[0];
25}
26#else
27#error "FP16 is not supported"
28#endif
29
30int main()
31{
32printf("%d\n", test());
33return 0;
34}
35