11 #ifndef EIGEN_GEOMETRY_SIMD_H
12 #define EIGEN_GEOMETRY_SIMD_H
18 template<
class Derived,
class OtherDerived>
31 const float neg_zero = numext::bit_cast<float>(0x80000000u);
32 const float arr[4] = {0.f, 0.f, 0.f, neg_zero};
34 Packet4f a = ae.template packet<AAlignment,Packet4f>(0);
35 Packet4f b = be.template packet<BAlignment,Packet4f>(0);
38 pstoret<float,Packet4f,ResAlignment>(
49 template<
class Derived>
59 const float neg_zero = numext::bit_cast<float>(0x80000000u);
60 const float arr[4] = {neg_zero, neg_zero, neg_zero,0.f};
68 template<
typename VectorLhs,
typename VectorRhs>
75 run(
const VectorLhs& lhs,
const VectorRhs& rhs)
80 Packet4f b = rhs_eval.template packet<traits<VectorRhs>::Alignment,
Packet4f>(0);
84 pstoret<float,Packet4f,ResAlignment>(&res.x(),
psub(mul1,mul2));
91 #if (defined EIGEN_VECTORIZE_SSE) || (EIGEN_ARCH_ARM64)
93 template<
class Derived,
class OtherDerived>
94 struct quat_product<Architecture::
Target, Derived, OtherDerived, double>
97 BAlignment = traits<OtherDerived>::Alignment,
98 ResAlignment = traits<Quaternion<double> >::Alignment
101 static inline Quaternion<double>
run(
const QuaternionBase<Derived>& _a,
const QuaternionBase<OtherDerived>& _b)
103 Quaternion<double> res;
105 evaluator<typename Derived::Coefficients> ae(_a.coeffs());
106 evaluator<typename OtherDerived::Coefficients> be(_b.coeffs());
108 const double*
a = _a.coeffs().data();
109 Packet2d b_xy = be.template packet<BAlignment,Packet2d>(0);
110 Packet2d b_zw = be.template packet<BAlignment,Packet2d>(2);
126 pstoret<double,Packet2d,ResAlignment>(&res.x(),
paddsub(t1,
preverse(t2)));
141 template<
class Derived>
142 struct quat_conj<Architecture::
Target, Derived, double>
145 ResAlignment = traits<Quaternion<double> >::Alignment
147 static inline Quaternion<double>
run(
const QuaternionBase<Derived>& q)
149 evaluator<typename Derived::Coefficients> qe(q.coeffs());
150 Quaternion<double> res;
151 const double neg_zero = numext::bit_cast<double>(0x8000000000000000ull);
152 const double arr1[2] = {neg_zero, neg_zero};
153 const double arr2[2] = {neg_zero, 0.0};
156 pstoret<double,Packet2d,ResAlignment>(&res.x(),
pxor(mask0, qe.template packet<traits<Derived>::Alignment,
Packet2d>(0)));
157 pstoret<double,Packet2d,ResAlignment>(&res.z(),
pxor(mask2, qe.template packet<traits<Derived>::Alignment,
Packet2d>(2)));
Base class for quaternion expressions.
Definition: Quaternion.h:36
EIGEN_DEVICE_FUNC const internal::traits< Derived >::Coefficients & coeffs() const
Definition: Quaternion.h:90
EIGEN_DEVICE_FUNC CoeffReturnType x() const
Definition: Quaternion.h:66
The quaternion class used to represent 3D orientations and rotations.
Definition: Quaternion.h:274
@ Target
Definition: Constants.h:492
v2f64 Packet2d
Definition: PacketMath.h:820
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:215
EIGEN_STRONG_INLINE Packet2d pset1< Packet2d >(const double &from)
Definition: PacketMath.h:872
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf &a)
Definition: Complex.h:184
EIGEN_DEVICE_FUNC Packet pmul(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:237
EIGEN_DEVICE_FUNC Packet paddsub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:545
EIGEN_STRONG_INLINE Packet2d ploadu< Packet2d >(const double *from)
Definition: PacketMath.h:1004
EIGEN_STRONG_INLINE Packet4f vec4f_swizzle1(const Packet4f &a, int p, int q, int r, int s)
Definition: PacketMath.h:113
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition: PacketMath.h:1047
EIGEN_STRONG_INLINE Packet4f ploadu< Packet4f >(const float *from)
Definition: PacketMath.h:968
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:222
__vector float Packet4f
Definition: PacketMath.h:30
Namespace containing all symbols from the Eigen library.
Definition: LDLT.h:16
Definition: document.h:416
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition: pointer.h:1181
static plain_matrix_type< VectorLhs >::type run(const VectorLhs &lhs, const VectorRhs &rhs)
Definition: Geometry_SIMD.h:75
Definition: OrthoMethods.h:56
Definition: CoreEvaluators.h:91
Definition: XprHelper.h:295
static Quaternion< float > run(const QuaternionBase< Derived > &q)
Definition: Geometry_SIMD.h:55
Definition: Quaternion.h:736
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar > run(const QuaternionBase< Derived > &q)
Definition: Quaternion.h:737
static Quaternion< float > run(const QuaternionBase< Derived > &_a, const QuaternionBase< OtherDerived > &_b)
Definition: Geometry_SIMD.h:26
Definition: Quaternion.h:488
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Quaternion< Scalar > run(const QuaternionBase< Derived1 > &a, const QuaternionBase< Derived2 > &b)
Definition: Quaternion.h:489
Definition: ForwardDeclarations.h:17