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)
 
   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);
 
  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)));
 
  162 #endif // end EIGEN_VECTORIZE_SSE_OR_EIGEN_ARCH_ARM64 
  168 #endif // EIGEN_GEOMETRY_SIMD_H