Eigen-Contrib  5.0.1
 
Loading...
Searching...
No Matches
BesselFunctions.h
1// SPDX-FileCopyrightText: The Eigen Authors
2// SPDX-License-Identifier: MPL-2.0
3
4#ifndef EIGEN_NEON_BESSELFUNCTIONS_H
5#define EIGEN_NEON_BESSELFUNCTIONS_H
6
7namespace Eigen {
8namespace internal {
9
10#if EIGEN_ARCH_ARM64 && EIGEN_HAS_ARM64_FP16
11
12#define NEON_HALF_TO_FLOAT_FUNCTIONS(METHOD) \
13 template <> \
14 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8hf METHOD<Packet8hf>(const Packet8hf& x) { \
15 const Packet4f lo = METHOD<Packet4f>(vcvt_f32_f16(vget_low_f16(x))); \
16 const Packet4f hi = METHOD<Packet4f>(vcvt_f32_f16(vget_high_f16(x))); \
17 return vcombine_f16(vcvt_f16_f32(lo), vcvt_f16_f32(hi)); \
18 } \
19 \
20 template <> \
21 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4hf METHOD<Packet4hf>(const Packet4hf& x) { \
22 return vcvt_f16_f32(METHOD<Packet4f>(vcvt_f32_f16(x))); \
23 }
24
25NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i0)
26NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i0e)
27NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i1)
28NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_i1e)
29NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_j0)
30NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_j1)
31NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k0)
32NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k0e)
33NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k1)
34NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_k1e)
35NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_y0)
36NEON_HALF_TO_FLOAT_FUNCTIONS(pbessel_y1)
37
38#undef NEON_HALF_TO_FLOAT_FUNCTIONS
39#endif // EIGEN_ARCH_ARM64 && EIGEN_HAS_ARM64_FP16
40
41EIGEN_INSTANTIATE_BESSEL_FUNCS_BF16(Packet4f, Packet4bf)
42
43} // namespace internal
44} // namespace Eigen
45
46#endif // EIGEN_NEON_BESSELFUNCTIONS_H
Namespace containing all symbols from the Eigen library.