2#include "vfpv4_float.hpp"
4#ifdef __ARM_FEATURE_MVE
20template <
typename T> nce T convert_round_to_nearest_with_ties_away_from_zero(float16x8_t a);
21template <
typename T> nce T convert_round_to_nearest_with_ties_away_from_zero(float32x4_t a);
22template <
typename T> nce T convert_round_to_nearest_with_ties_to_even(float16x8_t a);
23template <
typename T> nce T convert_round_to_nearest_with_ties_to_even(float32x4_t a);
24template <
typename T> nce T convert_round_toward_positive_infinity(float16x8_t a);
25template <
typename T> nce T convert_round_toward_positive_infinity(float32x4_t a);
26template <
typename T> nce T convert_round_toward_negative_infinity(float16x8_t a);
27template <
typename T> nce T convert_round_toward_negative_infinity(float32x4_t a);
28template <
typename T> nce T convert(int16x8_t a);
29template <
typename T> nce T convert(uint16x8_t a);
30template <
typename T> nce T convert(float16x8_t a);
31template <
typename T> nce T reinterpret(int8x16_t a);
32template <
typename T> nce T reinterpret(int16x8_t a);
33template <
typename T> nce T reinterpret(int32x4_t a);
34template <
typename T> nce T reinterpret(uint8x16_t a);
35template <
typename T> nce T reinterpret(uint16x8_t a);
36template <
typename T> nce T reinterpret(uint32x4_t a);
37template <
typename T> nce T reinterpret(int64x2_t a);
38template <> [[gnu::always_inline]] nce float16x8_t convert(uint16x8_t a) {
return vcvtq_f16_u16(a); }
39template <
int n>[[gnu::always_inline]] nce float16x8_t convert_n(uint16x8_t a) {
return vcvtq_n_f16_u16(a, n); }
40template <> [[gnu::always_inline]] nce float16x8_t convert(int16x8_t a) {
return vcvtq_f16_s16(a); }
41template <
int n>[[gnu::always_inline]] nce float16x8_t convert_n(int16x8_t a) {
return vcvtq_n_f16_s16(a, n); }
42[[gnu::always_inline]] nce float16x8_t subtract_absolute(float16x8_t a, float16x8_t b) {
return vabdq_f16(a, b); }
43[[gnu::always_inline]] nce float16x8_t add(float16x8_t a, float16x8_t b) {
return vaddq_f16(a, b); }
44[[gnu::always_inline]] nce float16x8_t multiply(float16x8_t a, float16x8_t b) {
return vmulq_f16(a, b); }
45[[gnu::always_inline]] nce float16x8_t subtract(float16x8_t a, float16x8_t b) {
return vsubq_f16(a, b); }
46[[gnu::always_inline]] nce float16x8_t negate(float16x8_t a) {
return vnegq_f16(a); }
47[[gnu::always_inline]] nce float16x8_t complex_add_rotate_90(float16x8_t a, float16x8_t b) {
return vcaddq_rot90_f16(a, b); }
48[[gnu::always_inline]] nce float16x8_t complex_add_rotate_270(float16x8_t a, float16x8_t b) {
return vcaddq_rot270_f16(a, b); }
49template <> [[gnu::always_inline]] nce int16x8_t convert_round_to_nearest_with_ties_away_from_zero(float16x8_t a) {
return vcvtaq_s16_f16(a); }
50template <> [[gnu::always_inline]] nce uint16x8_t convert_round_to_nearest_with_ties_away_from_zero(float16x8_t a) {
return vcvtaq_u16_f16(a); }
51template <> [[gnu::always_inline]] nce int16x8_t convert_round_to_nearest_with_ties_to_even(float16x8_t a) {
return vcvtnq_s16_f16(a); }
52template <> [[gnu::always_inline]] nce uint16x8_t convert_round_to_nearest_with_ties_to_even(float16x8_t a) {
return vcvtnq_u16_f16(a); }
53template <> [[gnu::always_inline]] nce int16x8_t convert_round_toward_positive_infinity(float16x8_t a) {
return vcvtpq_s16_f16(a); }
54template <> [[gnu::always_inline]] nce uint16x8_t convert_round_toward_positive_infinity(float16x8_t a) {
return vcvtpq_u16_f16(a); }
55template <> [[gnu::always_inline]] nce int16x8_t convert_round_toward_negative_infinity(float16x8_t a) {
return vcvtmq_s16_f16(a); }
56template <> [[gnu::always_inline]] nce uint16x8_t convert_round_toward_negative_infinity(float16x8_t a) {
return vcvtmq_u16_f16(a); }
57template <> [[gnu::always_inline]] nce int16x8_t convert(float16x8_t a) {
return vcvtq_s16_f16(a); }
58template <> [[gnu::always_inline]] nce uint16x8_t convert(float16x8_t a) {
return vcvtq_u16_f16(a); }
59template <
int n>[[gnu::always_inline]] nce int16x8_t convert_n_signed(float16x8_t a) {
return vcvtq_n_s16_f16(a, n); }
60template <
int n>[[gnu::always_inline]] nce uint16x8_t convert_n_unsigned(float16x8_t a) {
return vcvtq_n_u16_f16(a, n); }
61[[gnu::always_inline]] nce float32x4_t min_strict(float32x4_t a, float32x4_t b) {
return vminnmq_f32(a, b); }
62[[gnu::always_inline]] nce float32x4_t max_strict(float32x4_t a, float32x4_t b) {
return vmaxnmq_f32(a, b); }
63[[gnu::always_inline]] nce float32x4_t round(float32x4_t a) {
return vrndq_f32(a); }
64[[gnu::always_inline]] nce float32x4_t round_to_nearest_with_ties_to_even(float32x4_t a) {
return vrndnq_f32(a); }
65[[gnu::always_inline]] nce float32x4_t round_toward_negative_infinity(float32x4_t a) {
return vrndmq_f32(a); }
66[[gnu::always_inline]] nce float32x4_t round_toward_positive_infinity(float32x4_t a) {
return vrndpq_f32(a); }
67[[gnu::always_inline]] nce float32x4_t round_to_nearest_with_ties_away_from_zero(float32x4_t a) {
return vrndaq_f32(a); }
68[[gnu::always_inline]] nce float32x4_t round_inexact(float32x4_t a) {
return vrndxq_f32(a); }
69[[gnu::always_inline]] nce float32x4_t complex_add_rotate_90(float32x4_t a, float32x4_t b) {
return vcaddq_rot90_f32(a, b); }
70[[gnu::always_inline]] nce float32x4_t complex_add_rotate_270(float32x4_t a, float32x4_t b) {
return vcaddq_rot270_f32(a, b); }
71template <> [[gnu::always_inline]] nce int32x4_t convert_round_to_nearest_with_ties_away_from_zero(float32x4_t a) {
return vcvtaq_s32_f32(a); }
72template <> [[gnu::always_inline]] nce uint32x4_t convert_round_to_nearest_with_ties_away_from_zero(float32x4_t a) {
return vcvtaq_u32_f32(a); }
73template <> [[gnu::always_inline]] nce int32x4_t convert_round_to_nearest_with_ties_to_even(float32x4_t a) {
return vcvtnq_s32_f32(a); }
74template <> [[gnu::always_inline]] nce uint32x4_t convert_round_to_nearest_with_ties_to_even(float32x4_t a) {
return vcvtnq_u32_f32(a); }
75template <> [[gnu::always_inline]] nce int32x4_t convert_round_toward_positive_infinity(float32x4_t a) {
return vcvtpq_s32_f32(a); }
76template <> [[gnu::always_inline]] nce uint32x4_t convert_round_toward_positive_infinity(float32x4_t a) {
return vcvtpq_u32_f32(a); }
77template <> [[gnu::always_inline]] nce int32x4_t convert_round_toward_negative_infinity(float32x4_t a) {
return vcvtmq_s32_f32(a); }
78template <> [[gnu::always_inline]] nce uint32x4_t convert_round_toward_negative_infinity(float32x4_t a) {
return vcvtmq_u32_f32(a); }