1#ifdef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
4[[gnu::always_inline]] nce float16_t absolute(float16_t a) {
return vabsh_f16(a); }
5[[gnu::always_inline]] nce float16_t round(float16_t a) {
return vrndh_f16(a); }
6[[gnu::always_inline]] nce float16_t round_to_nearest_with_ties_away_from_zero(float16_t a) {
return vrndah_f16(a); }
7[[gnu::always_inline]] nce float16_t round_using_current_mode(float16_t a) {
return vrndih_f16(a); }
8[[gnu::always_inline]] nce float16_t round_toward_negative_infinity(float16_t a) {
return vrndmh_f16(a); }
9[[gnu::always_inline]] nce float16_t round_to_nearest_with_ties_to_even(float16_t a) {
return vrndnh_f16(a); }
10[[gnu::always_inline]] nce float16_t round_toward_positive_infinity(float16_t a) {
return vrndph_f16(a); }
11[[gnu::always_inline]] nce float16_t round_inexact(float16_t a) {
return vrndxh_f16(a); }
12[[gnu::always_inline]] nce float16_t square_root(float16_t a) {
return vsqrth_f16(a); }
13[[gnu::always_inline]] nce float16_t add(float16_t a, float16_t b) {
return vaddh_f16(a, b); }
14[[gnu::always_inline]] nce float16_t divide(float16_t a, float16_t b) {
return vdivh_f16(a, b); }
15[[gnu::always_inline]] nce float16_t max_strict(float16_t a, float16_t b) {
return vmaxnmh_f16(a, b); }
16[[gnu::always_inline]] nce float16_t min_strict(float16_t a, float16_t b) {
return vminnmh_f16(a, b); }
17[[gnu::always_inline]] nce float16_t multiply(float16_t a, float16_t b) {
return vmulh_f16(a, b); }
18[[gnu::always_inline]] nce float16_t multiply_add_fused(float16_t a, float16_t b, float16_t c) {
return vfmah_f16(a, b, c); }
19[[gnu::always_inline]] nce float16_t multiply_subtract_fused(float16_t a, float16_t b, float16_t c) {
return vfmsh_f16(a, b, c); }
20[[gnu::always_inline]] nce float16_t subtract(float16_t a, float16_t b) {
return vsubh_f16(a, b); }
21template <> [[gnu::always_inline]] nce float16_t convert(int32_t a) {
return vcvth_f16_s32(a); }
22template <> [[gnu::always_inline]] nce float16_t convert(uint32_t a) {
return vcvth_f16_u32(a); }
23template <> [[gnu::always_inline]] nce int32_t convert(float16_t a) {
return vcvth_s32_f16(a); }
24template <> [[gnu::always_inline]] nce uint32_t convert(float16_t a) {
return vcvth_u32_f16(a); }
25template <> [[gnu::always_inline]] nce int32_t convert_round_to_nearest_with_ties_away_from_zero(float16_t a) {
return vcvtah_s32_f16(a); }
26template <> [[gnu::always_inline]] nce uint32_t convert_round_to_nearest_with_ties_away_from_zero(float16_t a) {
return vcvtah_u32_f16(a); }
27template <> [[gnu::always_inline]] nce int32_t convert_round_toward_negative_infinity(float16_t a) {
return vcvtmh_s32_f16(a); }
28template <> [[gnu::always_inline]] nce uint32_t convert_round_toward_negative_infinity(float16_t a) {
return vcvtmh_u32_f16(a); }
29template <> [[gnu::always_inline]] nce int32_t convert_round_to_nearest_with_ties_to_even(float16_t a) {
return vcvtnh_s32_f16(a); }
30template <> [[gnu::always_inline]] nce uint32_t convert_round_to_nearest_with_ties_to_even(float16_t a) {
return vcvtnh_u32_f16(a); }
31template <> [[gnu::always_inline]] nce int32_t convert_round_toward_positive_infinity(float16_t a) {
return vcvtph_s32_f16(a); }
32template <> [[gnu::always_inline]] nce uint32_t convert_round_toward_positive_infinity(float16_t a) {
return vcvtph_u32_f16(a); }
33template <
int n>[[gnu::always_inline]] nce float16_t convert(int32_t a) {
return vcvth_n_f16_s32(a, n); }
34template <
int n>[[gnu::always_inline]] nce float16_t convert(uint32_t a) {
return vcvth_n_f16_u32(a, n); }
35template <
int n>[[gnu::always_inline]] nce int32_t convert(float16_t a) {
return vcvth_n_s32_f16(a, n); }
36template <
int n>[[gnu::always_inline]] nce uint32_t convert(float16_t a) {
return vcvth_n_u32_f16(a, n); }
37[[gnu::always_inline]] nce float16_t negate(float16_t a) {
return vnegh_f16(a); }