1 #ifndef EIGEN_NEON_BESSELFUNCTIONS_H 2 #define EIGEN_NEON_BESSELFUNCTIONS_H 3 4 namespace Eigen { 5 namespace internal { 6 7 #if EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 8 9 #define NEON_HALF_TO_FLOAT_FUNCTIONS(METHOD) \ 10 template <> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \ 11 Packet8hf METHOD<Packet8hf>(const Packet8hf& x) { \ 12 const Packet4f lo = METHOD<Packet4f>(vcvt_f32_f16(vget_low_f16(x))); \ 13 const Packet4f hi = METHOD<Packet4f>(vcvt_f32_f16(vget_high_f16(x))); \ 14 return vcombine_f16(vcvt_f16_f32(lo), vcvt_f16_f32(hi)); \ 15 } \ 16 \ 17 template <> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \ 18 Packet4hf METHOD<Packet4hf>(const Packet4hf& x) { \ 19 return vcvt_f16_f32(METHOD<Packet4f>(vcvt_f32_f16(x))); \ 20 } 21 22 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i0) 23 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i0e) 24 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i1) 25 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i1e) 26 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_j0) 27 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_j1) 28 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k0) 29 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k0e) 30 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k1) 31 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k1e) 32 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_y0) 33 NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_y1) 34 35 #undef NEON_HALF_TO_FLOAT_FUNCTIONS 36 #endif 37 38 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_i0) 39 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_i0e) 40 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_i1) 41 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_i1e) 42 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_j0) 43 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_j1) 44 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_k0) 45 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_k0e) 46 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_k1) 47 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_k1e) 48 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_y0) 49 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pbessel_y1) 50 51 } // namespace internal 52 } // namespace Eigen 53 54 #endif // EIGEN_NEON_BESSELFUNCTIONS_H 55