GenericPacketMathFunctionsFwd.h
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2019 Gael Guennebaud <gael.guennebaud@inria.fr>
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 
16 namespace Eigen {
17 namespace 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 implementers
25  ***************************************************************************/
26 
30 template <typename Packet>
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.
36 template <typename Packet>
38 
42 template <typename Packet>
44 
45 // Explicitly multiplies
46 // a * (2^e)
47 // clamping e to the range
48 // [NumTraits<Scalar>::min_exponent()-2, NumTraits<Scalar>::max_exponent()]
49 //
50 // This is approx 7x faster than pldexp_impl, but will prematurely over/underflow
51 // if 2^e doesn't fit into a normal floating-point Scalar.
52 //
53 // Assumes IEEE floating point format
54 template <typename Packet>
56 
58 template <typename Packet>
60 
62 template <typename Packet>
64 
66 template <typename Packet>
68 
70 template <typename Packet>
72 
74 template <typename Packet>
76 
78 template <typename Packet>
80 
82 template <typename Packet>
84 
86 template <typename Packet>
88 
90 template <typename Packet>
92 
94 template <typename Packet>
96 
98 template <typename Packet>
100 
102 template <typename Packet>
104 
106 template <typename Packet>
108 
110 template <typename Packet>
112 
114 template <typename Packet>
116 
118 template <typename Packet>
120 
122 template <typename Packet>
124 
126 template <typename Packet>
128 
130 template <typename Packet>
132 
134 template <typename Packet>
136 
138 template <typename Packet>
140 
142 template <typename Packet>
144 
145 template <typename Packet, int N>
146 struct ppolevl;
147 
149 template <typename Packet>
151 
153 template <typename Packet>
155 
156 template <typename Packet>
158 
159 template <typename Packet>
161 
162 template <typename Packet>
164 
165 template <typename Packet>
167 
168 template <typename Packet>
170 
171 // Macros for instantiating these generic functions for different backends.
172 #define EIGEN_PACKET_FUNCTION(METHOD, SCALAR, PACKET) \
173  template <> \
174  EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED PACKET p##METHOD<PACKET>(const PACKET& _x) { \
175  return p##METHOD##_##SCALAR(_x); \
176  }
177 
178 // Macros for instantiating these generic functions for different backends.
179 #define EIGEN_GENERIC_PACKET_FUNCTION(METHOD, PACKET) \
180  template <> \
181  EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED PACKET p##METHOD<PACKET>(const PACKET& _x) { \
182  return generic_##METHOD(_x); \
183  }
184 
185 #define EIGEN_FLOAT_PACKET_FUNCTION(METHOD, PACKET) EIGEN_PACKET_FUNCTION(METHOD, float, PACKET)
186 #define EIGEN_DOUBLE_PACKET_FUNCTION(METHOD, PACKET) EIGEN_PACKET_FUNCTION(METHOD, double, PACKET)
187 
188 #define EIGEN_INSTANTIATE_GENERIC_MATH_FUNCS_FLOAT(PACKET) \
189  EIGEN_FLOAT_PACKET_FUNCTION(sin, PACKET) \
190  EIGEN_FLOAT_PACKET_FUNCTION(cos, PACKET) \
191  EIGEN_FLOAT_PACKET_FUNCTION(asin, PACKET) \
192  EIGEN_FLOAT_PACKET_FUNCTION(acos, PACKET) \
193  EIGEN_FLOAT_PACKET_FUNCTION(tanh, PACKET) \
194  EIGEN_FLOAT_PACKET_FUNCTION(atanh, PACKET) \
195  EIGEN_FLOAT_PACKET_FUNCTION(log, PACKET) \
196  EIGEN_FLOAT_PACKET_FUNCTION(log2, PACKET) \
197  EIGEN_FLOAT_PACKET_FUNCTION(exp, PACKET) \
198  EIGEN_GENERIC_PACKET_FUNCTION(expm1, PACKET) \
199  EIGEN_GENERIC_PACKET_FUNCTION(exp2, PACKET) \
200  EIGEN_GENERIC_PACKET_FUNCTION(log1p, PACKET) \
201  EIGEN_GENERIC_PACKET_FUNCTION(atan, PACKET)
202 
203 #define EIGEN_INSTANTIATE_GENERIC_MATH_FUNCS_DOUBLE(PACKET) \
204  EIGEN_DOUBLE_PACKET_FUNCTION(atanh, PACKET) \
205  EIGEN_DOUBLE_PACKET_FUNCTION(log, PACKET) \
206  EIGEN_DOUBLE_PACKET_FUNCTION(sin, PACKET) \
207  EIGEN_DOUBLE_PACKET_FUNCTION(cos, PACKET) \
208  EIGEN_DOUBLE_PACKET_FUNCTION(log2, PACKET) \
209  EIGEN_DOUBLE_PACKET_FUNCTION(exp, PACKET) \
210  EIGEN_DOUBLE_PACKET_FUNCTION(tanh, PACKET) \
211  EIGEN_GENERIC_PACKET_FUNCTION(atan, PACKET) \
212  EIGEN_GENERIC_PACKET_FUNCTION(exp2, PACKET)
213 
214 } // end namespace internal
215 } // end namespace Eigen
216 
217 #endif // EIGEN_ARCH_GENERIC_PACKET_MATH_FUNCTIONS_FWD_H
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Definition: Macros.h:900
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
float * p
Definition: Tutorial_Map_using.cpp:9
const Scalar * a
Definition: level2_cplx_impl.h:32
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_double(const Packet _x)
Definition: GenericPacketMathFunctions.h:462
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_log1p(const Packet &x)
Definition: GenericPacketMathFunctions.h:470
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_float(const Packet &x)
Definition: GenericPacketMathFunctions.h:820
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_double(const Packet _x)
Definition: GenericPacketMathFunctions.h:561
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos_float(const Packet &x_in)
Definition: GenericPacketMathFunctions.h:999
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_double(const Packet &x)
Definition: GenericPacketMathFunctions.h:988
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh_float(const Packet &x)
Definition: GenericPacketMathFunctions.h:1256
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_floor(const Packet &a)
Definition: GenericPacketMathFunctions.h:2419
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psqrt_complex(const Packet &a)
Definition: GenericPacketMathFunctions.h:1409
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_float(const Packet _x)
Definition: GenericPacketMathFunctions.h:357
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_fast(const Packet &a, const Packet &exponent)
Definition: GenericPacketMathFunctions.h:277
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_atan(const Packet &x_in)
Definition: GenericPacketMathFunctions.h:1121
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_float(const Packet &x)
Definition: GenericPacketMathFunctions.h:825
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_complex(const Packet &x)
Definition: GenericPacketMathFunctions.h:1338
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_complex(const Packet &a)
Definition: GenericPacketMathFunctions.h:1366
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdiv_complex(const Packet &x, const Packet &y)
Definition: GenericPacketMathFunctions.h:1318
EIGEN_STRONG_INLINE Packet4d pfrexp_generic_get_biased_exponent(const Packet4d &a)
Definition: AVX/PacketMath.h:1880
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_rint(const Packet &a)
Definition: GenericPacketMathFunctions.h:2399
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_float(const T &a_x)
Definition: GenericPacketMathFunctions.h:1155
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_double(const T &a_x)
Definition: GenericPacketMathFunctions.h:1206
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh_double(const Packet &x)
Definition: GenericPacketMathFunctions.h:1285
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_float(const Packet _x)
Definition: GenericPacketMathFunctions.h:509
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_round(const Packet &a)
Definition: GenericPacketMathFunctions.h:2455
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_ceil(const Packet &a)
Definition: GenericPacketMathFunctions.h:2431
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_generic(const Packet &a, const Packet &exponent)
Definition: GenericPacketMathFunctions.h:226
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_double(const Packet _x)
Definition: GenericPacketMathFunctions.h:457
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_double(const Packet &x)
Definition: GenericPacketMathFunctions.h:993
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic(const Packet &a, Packet &exponent)
Definition: GenericPacketMathFunctions.h:184
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_expm1(const Packet &x)
Definition: GenericPacketMathFunctions.h:485
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_float(const Packet _x)
Definition: GenericPacketMathFunctions.h:352
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_trunc(const Packet &a)
Definition: GenericPacketMathFunctions.h:2446
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_exp2(const Packet &_x)
Definition: GenericPacketMathFunctions.h:2384
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin_float(const Packet &x_in)
Definition: GenericPacketMathFunctions.h:1042
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Definition: GenericPacketMathFunctions.h:85
Definition: ZVector/PacketMath.h:50