Argon 0.1.0
Loading...
Searching...
No Matches
fp16_scalar.hpp
1#ifdef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
2#include <arm_fp16.h>
3
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); }
38#endif