Eigen  3.4.90 (git rev 5a9f66fb35d03a4da9ef8976e67a61b30aa16dcf)
 
Loading...
Searching...
No Matches
GenericPacketMathFunctionsFwd.h
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2019 Gael Guennebaud <[email protected]>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
11#define EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
12
13// IWYU pragma: private
14#include "../../InternalHeaderCheck.h"
15
16namespace Eigen {
17namespace internal {
18
19// Forward declarations of the generic math functions
20// implemented in GenericPacketMathFunctions.h
21// This is needed to workaround a circular dependency.
22
23/***************************************************************************
24 * Some generic implementations to be used by implementors
25 ***************************************************************************/
26
30template <typename Packet>
31EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic(const Packet& a, Packet& exponent);
32
33// Extracts the biased exponent value from Packet p, and casts the results to
34// a floating-point Packet type. Used by pfrexp_generic. Override this if
35// there is no unpacket_traits<Packet>::integer_packet.
36template <typename Packet>
37EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic_get_biased_exponent(const Packet& p);
38
42template <typename Packet>
43EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_generic(const Packet& a, const Packet& exponent);
44
46template <typename Packet>
47EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_float(const Packet _x);
48
50template <typename Packet>
51EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_float(const Packet _x);
52
54template <typename Packet>
55EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_double(const Packet _x);
56
58template <typename Packet>
59EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_double(const Packet _x);
60
62template <typename Packet>
63Packet generic_plog1p(const Packet& x);
64
66template <typename Packet>
67Packet generic_expm1(const Packet& x);
68
70template <typename Packet>
71EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_float(const Packet _x);
72
74template <typename Packet>
75EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_double(const Packet _x);
76
78template <typename Packet>
79EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_float(const Packet& x);
80
82template <typename Packet>
83EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_float(const Packet& x);
84
86template <typename Packet>
87EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_double(const Packet& x);
88
90template <typename Packet>
91EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_double(const Packet& x);
92
94template <typename Packet>
95EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin_float(const Packet& x);
96
98template <typename Packet>
99EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos_float(const Packet& x);
100
102template <typename Packet>
103EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan_float(const Packet& x);
104
106template <typename Packet>
107EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan_double(const Packet& x);
108
110template <typename Packet>
111EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh_float(const Packet& x);
112
114template <typename Packet>
115EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh_float(const Packet& x);
116
118template <typename Packet>
119EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psqrt_complex(const Packet& a);
120
122template <typename Packet>
123EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdiv_complex(const Packet& x, const Packet& y);
124
125template <typename Packet, int N>
126struct ppolevl;
127
129template <typename Packet>
130EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_complex(const Packet& x);
131
133template <typename Packet>
134EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_complex(const Packet& x);
135
136template <typename Packet>
137EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_rint(const Packet& a);
138
139template <typename Packet>
140EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_floor(const Packet& a);
141
142template <typename Packet>
143EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_ceil(const Packet& a);
144
145template <typename Packet>
146EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_trunc(const Packet& a);
147
148template <typename Packet>
149EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_round(const Packet& a);
150
151// Macros for instantiating these generic functions for different backends.
152#define EIGEN_PACKET_FUNCTION(METHOD, SCALAR, PACKET) \
153 template <> \
154 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED PACKET p##METHOD<PACKET>(const PACKET& _x) { \
155 return p##METHOD##_##SCALAR(_x); \
156 }
157
158#define EIGEN_FLOAT_PACKET_FUNCTION(METHOD, PACKET) EIGEN_PACKET_FUNCTION(METHOD, float, PACKET)
159#define EIGEN_DOUBLE_PACKET_FUNCTION(METHOD, PACKET) EIGEN_PACKET_FUNCTION(METHOD, double, PACKET)
160
161#define EIGEN_INSTANTIATE_GENERIC_MATH_FUNCS_FLOAT(PACKET) \
162 EIGEN_FLOAT_PACKET_FUNCTION(sin, PACKET) \
163 EIGEN_FLOAT_PACKET_FUNCTION(cos, PACKET) \
164 EIGEN_FLOAT_PACKET_FUNCTION(asin, PACKET) \
165 EIGEN_FLOAT_PACKET_FUNCTION(acos, PACKET) \
166 EIGEN_FLOAT_PACKET_FUNCTION(atan, PACKET) \
167 EIGEN_FLOAT_PACKET_FUNCTION(tanh, PACKET) \
168 EIGEN_FLOAT_PACKET_FUNCTION(atanh, PACKET) \
169 EIGEN_FLOAT_PACKET_FUNCTION(log, PACKET) \
170 EIGEN_FLOAT_PACKET_FUNCTION(log2, PACKET) \
171 EIGEN_FLOAT_PACKET_FUNCTION(exp, PACKET) \
172 template <> \
173 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED PACKET pexpm1<PACKET>(const PACKET& _x) { \
174 return internal::generic_expm1(_x); \
175 } \
176 template <> \
177 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED PACKET plog1p<PACKET>(const PACKET& _x) { \
178 return internal::generic_plog1p(_x); \
179 }
180
181#define EIGEN_INSTANTIATE_GENERIC_MATH_FUNCS_DOUBLE(PACKET) \
182 EIGEN_DOUBLE_PACKET_FUNCTION(atan, PACKET) \
183 EIGEN_DOUBLE_PACKET_FUNCTION(log, PACKET) \
184 EIGEN_DOUBLE_PACKET_FUNCTION(sin, PACKET) \
185 EIGEN_DOUBLE_PACKET_FUNCTION(cos, PACKET) \
186 EIGEN_DOUBLE_PACKET_FUNCTION(log2, PACKET) \
187 EIGEN_DOUBLE_PACKET_FUNCTION(exp, PACKET)
188
189} // end namespace internal
190} // end namespace Eigen
191
192#endif // EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
Namespace containing all symbols from the Eigen library.
Definition Core:137