cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

BesselFunctions.h (2258B)


      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