cart-elc

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

SpecialFunctions.h (1283B)


      1 #ifndef EIGEN_NEON_SPECIALFUNCTIONS_H
      2 #define EIGEN_NEON_SPECIALFUNCTIONS_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(perf)
     23 NEON_HALF_TO_FLOAT_FUNCTIONS(pndtri)
     24 
     25 #undef NEON_HALF_TO_FLOAT_FUNCTIONS
     26 #endif
     27 
     28 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, perf)
     29 BF16_PACKET_FUNCTION(Packet4f, Packet4bf, pndtri)
     30 
     31 }  // namespace internal
     32 }  // namespace Eigen
     33 
     34 #endif  // EIGEN_NEON_SPECIALFUNCTIONS_H