NEON/SpecialFunctions.h
Go to the documentation of this file.
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 
30 
31 } // namespace internal
32 } // namespace Eigen
33 
34 #endif // EIGEN_NEON_SPECIALFUNCTIONS_H
#define BF16_PACKET_FUNCTION(PACKET_F, PACKET_BF16, METHOD)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pndtri(const Packet &a)
eigen_packet_wrapper< uint16x4_t, 19 > Packet4bf
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet perf(const Packet &a)
__vector float Packet4f
: TensorContractionSycl.h, provides various tensor contraction kernel for SYCL backend