mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
add bench_reverse, draft of a reverse vectorization for AltiVec, make
global Scaling function static
This commit is contained in:
@@ -111,7 +111,7 @@ template<> inline v4i ei_pmul(const v4i& a, const v4i& b)
|
||||
USE_CONST_v1i;
|
||||
USE_CONST_v16i_;
|
||||
|
||||
// Get the absolute values
|
||||
// Get the absolute values
|
||||
a1 = vec_abs(a);
|
||||
b1 = vec_abs(b);
|
||||
|
||||
@@ -146,7 +146,7 @@ template<> inline v4f ei_pdiv(const v4f& a, const v4f& b) {
|
||||
|
||||
// Altivec does not offer a divide instruction, we have to do a reciprocal approximation
|
||||
y_0 = vec_re(b);
|
||||
|
||||
|
||||
// Do one Newton-Raphson iteration to get the needed accuracy
|
||||
t = vec_nmsub(y_0, b, v1f);
|
||||
y_1 = vec_madd(y_0, t, y_0);
|
||||
@@ -260,6 +260,17 @@ template<> inline int ei_pfirst(const v4i& a)
|
||||
return ai[0];
|
||||
}
|
||||
|
||||
template<> EIGEN_STRONG_INLINE v4f ei_preverse(const v4f& a)
|
||||
{
|
||||
static const unsigned char __attribute__(aligned(16)) reverse_mask = {12,13,14,15, 8,9,10,11, 4,5,6,7, 0,1,2,3};
|
||||
return (v4f)vec_perm((__vector unsigned char)a,(__vector unsigned char)a,reverse_mask);
|
||||
}
|
||||
template<> EIGEN_STRONG_INLINE v4i ei_preverse(const v4i& a)
|
||||
{
|
||||
static const unsigned char __attribute__(aligned(16)) reverse_mask = {12,13,14,15, 8,9,10,11, 4,5,6,7, 0,1,2,3};
|
||||
return (v4i)vec_perm((__vector unsigned char)a,(__vector unsigned char)a,reverse_mask);
|
||||
}
|
||||
|
||||
inline v4f ei_preduxp(const v4f* vecs)
|
||||
{
|
||||
v4f v[4], sum[4];
|
||||
|
||||
@@ -120,28 +120,28 @@ public:
|
||||
};
|
||||
|
||||
/** Constructs a uniform scaling from scale factor \a s */
|
||||
inline UniformScaling<float> Scaling(float s) { return UniformScaling<float>(s); }
|
||||
static inline UniformScaling<float> Scaling(float s) { return UniformScaling<float>(s); }
|
||||
/** Constructs a uniform scaling from scale factor \a s */
|
||||
inline UniformScaling<double> Scaling(double s) { return UniformScaling<double>(s); }
|
||||
static inline UniformScaling<double> Scaling(double s) { return UniformScaling<double>(s); }
|
||||
/** Constructs a uniform scaling from scale factor \a s */
|
||||
template<typename RealScalar> inline UniformScaling<std::complex<RealScalar> >
|
||||
Scaling(const std::complex<RealScalar>& s)
|
||||
template<typename RealScalar>
|
||||
static inline UniformScaling<std::complex<RealScalar> > Scaling(const std::complex<RealScalar>& s)
|
||||
{ return UniformScaling<std::complex<RealScalar> >(s); }
|
||||
|
||||
/** Constructs a 2D axis aligned scaling */
|
||||
template<typename Scalar> inline DiagonalMatrix<Scalar,2>
|
||||
Scaling(Scalar sx, Scalar sy)
|
||||
template<typename Scalar>
|
||||
static inline DiagonalMatrix<Scalar,2> Scaling(Scalar sx, Scalar sy)
|
||||
{ return DiagonalMatrix<Scalar,2>(sx, sy); }
|
||||
/** Constructs a 3D axis aligned scaling */
|
||||
template<typename Scalar> inline DiagonalMatrix<Scalar,3>
|
||||
Scaling(Scalar sx, Scalar sy, Scalar sz)
|
||||
template<typename Scalar>
|
||||
static inline DiagonalMatrix<Scalar,3> Scaling(Scalar sx, Scalar sy, Scalar sz)
|
||||
{ return DiagonalMatrix<Scalar,3>(sx, sy, sz); }
|
||||
|
||||
/** Constructs an axis aligned scaling expression from vector expression \a coeffs
|
||||
* This is an alias for coeffs.asDiagonal()
|
||||
*/
|
||||
template<typename Derived>
|
||||
inline const DiagonalMatrixWrapper<Derived> Scaling(const MatrixBase<Derived>& coeffs)
|
||||
static inline const DiagonalMatrixWrapper<Derived> Scaling(const MatrixBase<Derived>& coeffs)
|
||||
{ return coeffs.asDiagonal(); }
|
||||
|
||||
/** \addtogroup Geometry_Module */
|
||||
|
||||
Reference in New Issue
Block a user