xref: /aosp_15_r20/external/eigen/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
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