1 // This file is part of Eigen, a lightweight C++ template library 2 // for linear algebra. 3 // 4 // Copyright (C) 2007 Julien Pommier 5 // Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr> 6 // Copyright (C) 2016 Konstantinos Margaritis <markos@freevec.org> 7 // 8 // This Source Code Form is subject to the terms of the Mozilla 9 // Public License v. 2.0. If a copy of the MPL was not distributed 10 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 11 12 #ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H 13 #define EIGEN_MATH_FUNCTIONS_ALTIVEC_H 14 15 namespace Eigen { 16 17 namespace internal { 18 19 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 20 Packet4f plog<Packet4f>(const Packet4f& _x) 21 { 22 return plog_float(_x); 23 } 24 25 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 26 Packet4f pexp<Packet4f>(const Packet4f& _x) 27 { 28 return pexp_float(_x); 29 } 30 31 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 32 Packet4f psin<Packet4f>(const Packet4f& _x) 33 { 34 return psin_float(_x); 35 } 36 37 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 38 Packet4f pcos<Packet4f>(const Packet4f& _x) 39 { 40 return pcos_float(_x); 41 } 42 43 #ifndef EIGEN_COMP_CLANG 44 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 45 Packet4f prsqrt<Packet4f>(const Packet4f& x) 46 { 47 return vec_rsqrt(x); 48 } 49 #endif 50 51 #ifdef __VSX__ 52 #ifndef EIGEN_COMP_CLANG 53 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 54 Packet2d prsqrt<Packet2d>(const Packet2d& x) 55 { 56 return vec_rsqrt(x); 57 } 58 #endif 59 60 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 61 Packet4f psqrt<Packet4f>(const Packet4f& x) 62 { 63 return vec_sqrt(x); 64 } 65 66 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 67 Packet2d psqrt<Packet2d>(const Packet2d& x) 68 { 69 return vec_sqrt(x); 70 } 71 72 template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED 73 Packet2d pexp<Packet2d>(const Packet2d& _x) 74 { 75 return pexp_double(_x); 76 } 77 #endif 78 79 // Hyperbolic Tangent function. 80 template <> 81 EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f 82 ptanh<Packet4f>(const Packet4f& x) { 83 return internal::generic_fast_tanh_float(x); 84 } 85 86 } // end namespace internal 87 88 } // end namespace Eigen 89 90 #endif // EIGEN_MATH_FUNCTIONS_ALTIVEC_H 91