11 #ifndef EIGEN_GEOMETRY_SIMD_H
12 #define EIGEN_GEOMETRY_SIMD_H
15 #include "../InternalHeaderCheck.h"
21 template <
class Derived,
class OtherDerived>
32 const float neg_zero = numext::bit_cast<float>(0x80000000u);
33 const float arr[4] = {0.f, 0.f, 0.f, neg_zero};
35 Packet4f a = ae.template packet<AAlignment, Packet4f>(0);
36 Packet4f b = be.template packet<BAlignment, Packet4f>(0);
39 pstoret<float, Packet4f, ResAlignment>(
41 pmul(
vec4f_swizzle1(
a, 2, 0, 1, 0),
vec4f_swizzle1(
b, 1, 2, 0, 0))),
48 template <
class Derived>
54 const float neg_zero = numext::bit_cast<float>(0x80000000u);
55 const float arr[4] = {neg_zero, neg_zero, neg_zero, 0.f};
57 pstoret<float, Packet4f, ResAlignment>(&
res.x(),
63 template <
typename VectorLhs,
typename VectorRhs>
72 Packet4f a = lhs_eval.template packet<LhsAlignment, Packet4f>(0);
73 Packet4f b = rhs_eval.template packet<RhsAlignment, Packet4f>(0);
77 pstoret<float, Packet4f, DstAlignment>(
res.data(),
psub(mul1, mul2));
84 #if (defined EIGEN_VECTORIZE_SSE) || (EIGEN_ARCH_ARM64)
86 template <
class Derived,
class OtherDerived>
87 struct quat_product<Architecture::
Target, Derived, OtherDerived,
double> {
88 enum { BAlignment = traits<OtherDerived>::Alignment, ResAlignment = traits<Quaternion<double> >::Alignment };
90 static inline Quaternion<double> run(
const QuaternionBase<Derived>& _a,
const QuaternionBase<OtherDerived>& _b) {
93 evaluator<typename Derived::Coefficients> ae(_a.coeffs());
94 evaluator<typename OtherDerived::Coefficients> be(_b.coeffs());
96 const double*
a = _a.coeffs().data();
97 Packet2d b_xy = be.template packet<BAlignment, Packet2d>(0);
98 Packet2d b_zw = be.template packet<BAlignment, Packet2d>(2);
129 template <
class Derived>
130 struct quat_conj<Architecture::
Target, Derived,
double> {
131 enum { ResAlignment = traits<Quaternion<double> >::Alignment };
133 evaluator<typename Derived::Coefficients> qe(
q.coeffs());
135 const double neg_zero = numext::bit_cast<double>(0x8000000000000000ull);
136 const double arr1[2] = {neg_zero, neg_zero};
137 const double arr2[2] = {neg_zero, 0.0};
140 pstoret<double, Packet2d, ResAlignment>(&
res.x(),
141 pxor(mask0, qe.template packet<traits<Derived>::Alignment,
Packet2d>(0)));
142 pstoret<double, Packet2d, ResAlignment>(&
res.z(),
143 pxor(mask2, qe.template packet<traits<Derived>::Alignment,
Packet2d>(2)));
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
Scalar * b
Definition: benchVecAdd.cpp:17
Base class for quaternion expressions.
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:35
EIGEN_DEVICE_FUNC const internal::traits< Derived >::Coefficients & coeffs() const
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:84
const Scalar * a
Definition: level2_cplx_impl.h:32
@ Target
Definition: Constants.h:495
__m128d Packet2d
Definition: LSX/PacketMath.h:36
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:318
EIGEN_STRONG_INLINE Packet2d pset1< Packet2d >(const double &from)
Definition: LSX/PacketMath.h:503
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf &a)
Definition: AltiVec/Complex.h:303
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88
EIGEN_DEVICE_FUNC Packet paddsub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:694
EIGEN_STRONG_INLINE Packet2d ploadu< Packet2d >(const double *from)
Definition: LSX/PacketMath.h:1448
EIGEN_STRONG_INLINE Packet4f vec4f_swizzle1(const Packet4f &a, int p, int q, int r, int s)
Definition: LSX/PacketMath.h:126
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2315
EIGEN_STRONG_INLINE Packet4f ploadu< Packet4f >(const float *from)
Definition: AltiVec/PacketMath.h:1533
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:337
__vector float Packet4f
Definition: AltiVec/PacketMath.h:33
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
Definition: Eigen_Colamd.h:49
typename plain_matrix_type< VectorLhs >::type DstPlainType
Definition: Geometry_SIMD.h:65
static DstPlainType run(const VectorLhs &lhs, const VectorRhs &rhs)
Definition: Geometry_SIMD.h:69
Definition: OrthoMethods.h:104
Definition: CoreEvaluators.h:104
Definition: XprHelper.h:389
static Quaternion< float > run(const QuaternionBase< Derived > &q)
Definition: Geometry_SIMD.h:51
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:740
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar > run(const QuaternionBase< Derived > &q)
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:741
static Quaternion< float > run(const QuaternionBase< Derived > &_a, const QuaternionBase< OtherDerived > &_b)
Definition: Geometry_SIMD.h:28
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:503
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar > run(const QuaternionBase< Derived1 > &a, const QuaternionBase< Derived2 > &b)
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:504
Definition: ForwardDeclarations.h:21