35 #ifndef EIGEN_INVERSE_SIZE_4_H
36 #define EIGEN_INVERSE_SIZE_4_H
39 #include "../InternalHeaderCheck.h"
41 #if EIGEN_COMP_GNUC_STRICT
44 #pragma GCC push_options
45 #pragma GCC optimize("no-fast-math")
50 template <
typename MatrixType,
typename ResultType>
58 typename MatrixType::PlainObject>
67 Packet4f L2 = ploadt<Packet4f, MatrixAlignment>(
data + stride * 4);
68 Packet4f L3 = ploadt<Packet4f, MatrixAlignment>(
data + stride * 8);
69 Packet4f L4 = ploadt<Packet4f, MatrixAlignment>(
data + stride * 12);
76 if (!StorageOrdersMatch) {
92 AB =
psub(AB,
pmul(
vec4f_swizzle2(
A,
A, 1, 1, 2, 2),
vec4f_swizzle2(
B,
B, 2, 3, 0, 1)));
96 DC =
psub(DC,
pmul(
vec4f_swizzle2(
D,
D, 1, 1, 2, 2),
vec4f_swizzle2(
C,
C, 2, 3, 0, 1)));
142 iB =
psub(iB,
pmul(
vec4f_swizzle2(
D,
D, 1, 0, 3, 2),
vec4f_swizzle2(AB, AB, 2, 1, 2, 1)));
147 iC =
psub(iC,
pmul(
vec4f_swizzle2(
A,
A, 1, 0, 3, 2),
vec4f_swizzle2(DC, DC, 2, 1, 2, 1)));
152 rd =
pxor(rd, p4f_sign_PNNP);
158 Index res_stride = result.outerStride();
159 float *
res = result.data();
161 pstoret<float, Packet4f, ResultAlignment>(
res + 0,
vec4f_swizzle2(iA, iB, 3, 1, 3, 1));
162 pstoret<float, Packet4f, ResultAlignment>(
res + res_stride,
vec4f_swizzle2(iA, iB, 2, 0, 2, 0));
163 pstoret<float, Packet4f, ResultAlignment>(
res + 2 * res_stride,
vec4f_swizzle2(iC, iD, 3, 1, 3, 1));
164 pstoret<float, Packet4f, ResultAlignment>(
res + 3 * res_stride,
vec4f_swizzle2(iC, iD, 2, 0, 2, 0));
168 #if !(defined EIGEN_VECTORIZE_NEON && !(EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG))
171 template <
typename MatrixType,
typename ResultType>
179 typename MatrixType::PlainObject>
196 if (StorageOrdersMatch) {
197 A1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 0);
198 B1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 2);
199 A2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 4);
200 B2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 6);
201 C1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 8);
202 D1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 10);
203 C2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 12);
204 D2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 14);
207 A1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 0);
208 C1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 2);
209 A2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 4);
210 C2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 6);
219 B1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 8);
220 D1 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 10);
221 B2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 12);
222 D2 = ploadt<Packet2d, MatrixAlignment>(
data + stride * 14);
288 Packet2d iA1, iA2, iB1, iB2, iC1, iC2, iD1, iD2;
330 d1 =
pxor(rd, sign_PN);
331 d2 =
pxor(rd, sign_NP);
333 Index res_stride = result.outerStride();
334 double *
res = result.data();
338 pstoret<double, Packet2d, ResultAlignment>(
res + res_stride + 2,
pmul(
vec2d_swizzle2(iB2, iB1, 0), d2));
339 pstoret<double, Packet2d, ResultAlignment>(
res + 2 * res_stride,
pmul(
vec2d_swizzle2(iC2, iC1, 3), d1));
340 pstoret<double, Packet2d, ResultAlignment>(
res + 3 * res_stride,
pmul(
vec2d_swizzle2(iC2, iC1, 0), d2));
341 pstoret<double, Packet2d, ResultAlignment>(
res + 2 * res_stride + 2,
pmul(
vec2d_swizzle2(iD2, iD1, 3), d1));
342 pstoret<double, Packet2d, ResultAlignment>(
res + 3 * res_stride + 2,
pmul(
vec2d_swizzle2(iD2, iD1, 0), d2));
349 #if EIGEN_COMP_GNUC_STRICT
350 #pragma GCC pop_options
dominoes D
Definition: Domino.cpp:55
int data[]
Definition: Map_placement_new.cpp:1
#define vec4f_duplane(a, p)
Definition: NEON/PacketMath.h:150
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define vec2d_duplane(a, p)
Definition: SSE/PacketMath.h:136
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Matrix< Scalar, Dynamic, Dynamic > C
Definition: bench_gemm.cpp:49
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition: bench_gemm.cpp:48
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Definition: matrices.h:74
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
const unsigned int LinearAccessBit
Definition: Constants.h:133
const unsigned int RowMajorBit
Definition: Constants.h:70
@ 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 Packet4f vec4f_movelh(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:132
EIGEN_STRONG_INLINE Packet4f vec4f_swizzle2(const Packet4f &a, const Packet4f &b, int p, int q, int r, int s)
Definition: LSX/PacketMath.h:129
EIGEN_STRONG_INLINE Packet2d vec2d_unpackhi(const Packet2d &a, const Packet2d &b)
Definition: LSX/PacketMath.h:161
EIGEN_STRONG_INLINE Packet4f vec4f_movehl(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:135
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:368
EIGEN_STRONG_INLINE Packet2d vec2d_swizzle2(const Packet2d &a, const Packet2d &b, int mask)
Definition: LSX/PacketMath.h:157
EIGEN_STRONG_INLINE Packet2d pset1< Packet2d >(const double &from)
Definition: LSX/PacketMath.h:503
EIGEN_STRONG_INLINE Packet4f pload< Packet4f >(const float *from)
Definition: AltiVec/PacketMath.h:492
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88
EIGEN_DEVICE_FUNC Packet preciprocal(const Packet &a)
Definition: GenericPacketMath.h:1433
EIGEN_STRONG_INLINE Packet2d pload< Packet2d >(const double *from)
Definition: LSX/PacketMath.h:1407
EIGEN_STRONG_INLINE Packet4f vec4f_unpackhi(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:141
EIGEN_STRONG_INLINE Packet4f vec4f_unpacklo(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:138
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2315
EIGEN_STRONG_INLINE Packet2d vec2d_unpacklo(const Packet2d &a, const Packet2d &b)
Definition: LSX/PacketMath.h:160
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:337
__vector float Packet4f
Definition: AltiVec/PacketMath.h:33
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
double C1
"Mooney Rivlin" coefficient for generalised Mooney Rivlin law
Definition: TwenteMeshGluing.cpp:74
double C2
"Mooney Rivlin" coefficient for generalised Mooney Rivlin law
Definition: mpi/distribution/airy_cantilever/airy_cantilever2.cc:156
Definition: Eigen_Colamd.h:49
static void run(const MatrixType &mat, ResultType &result)
Definition: InverseSize4.h:182
std::conditional_t<(MatrixType::Flags &LinearAccessBit), MatrixType const &, typename MatrixType::PlainObject > ActualMatrixType
Definition: InverseSize4.h:180
std::conditional_t<(MatrixType::Flags &LinearAccessBit), MatrixType const &, typename MatrixType::PlainObject > ActualMatrixType
Definition: InverseSize4.h:59
static void run(const MatrixType &mat, ResultType &result)
Definition: InverseSize4.h:61
Definition: InverseImpl.h:182
Definition: ForwardDeclarations.h:21