60 static void run(
const MatrixType &
mat, ResultType &result)
64 const float* data = matrix.data();
65 const Index stride = matrix.innerStride();
76 if (!StorageOrdersMatch)
78 A = vec4f_unpacklo(
_L1,
_L2);
79 B = vec4f_unpacklo(
_L3,
_L4);
80 C = vec4f_unpackhi(
_L1,
_L2);
85 A = vec4f_movelh(
_L1,
_L2);
86 B = vec4f_movehl(
_L2,
_L1);
87 C = vec4f_movelh(
_L3,
_L4);
94 AB = pmul(vec4f_swizzle2(A, A, 3, 3, 0, 0), B);
95 AB = psub(
AB, pmul(vec4f_swizzle2(A, A, 1, 1, 2, 2), vec4f_swizzle2(B, B, 2, 3, 0, 1)));
98 DC = pmul(vec4f_swizzle2(
D,
D, 3, 3, 0, 0), C);
99 DC = psub(
DC, pmul(vec4f_swizzle2(
D,
D, 1, 1, 2, 2), vec4f_swizzle2(C, C, 2, 3, 0, 1)));
104 dA = pmul(vec4f_swizzle2(A, A, 3, 3, 1, 1), A);
105 dA = psub(
dA, vec4f_movehl(
dA,
dA));
107 dB = pmul(vec4f_swizzle2(B, B, 3, 3, 1, 1), B);
108 dB = psub(
dB, vec4f_movehl(
dB,
dB));
110 dC = pmul(vec4f_swizzle2(C, C, 3, 3, 1, 1), C);
111 dC = psub(
dC, vec4f_movehl(
dC,
dC));
113 dD = pmul(vec4f_swizzle2(
D,
D, 3, 3, 1, 1),
D);
114 dD = psub(
dD, vec4f_movehl(
dD,
dD));
118 d = pmul(vec4f_swizzle2(
DC,
DC, 0, 2, 1, 3),
AB);
119 d = padd(d, vec4f_movehl(d, d));
120 d = padd(d, vec4f_swizzle2(d, d, 1, 0, 0, 0));
134 iD = pmul(vec4f_swizzle2(C, C, 0, 0, 2, 2), vec4f_movelh(
AB,
AB));
135 iD = padd(
iD, pmul(vec4f_swizzle2(C, C, 1, 1, 3, 3), vec4f_movehl(
AB,
AB)));
136 iD = psub(pmul(
D, vec4f_duplane(
dA, 0)),
iD);
139 iA = pmul(vec4f_swizzle2(B, B, 0, 0, 2, 2), vec4f_movelh(
DC,
DC));
140 iA = padd(
iA, pmul(vec4f_swizzle2(B, B, 1, 1, 3, 3), vec4f_movehl(
DC,
DC)));
141 iA = psub(pmul(A, vec4f_duplane(
dD, 0)),
iA);
144 iB = pmul(
D, vec4f_swizzle2(
AB,
AB, 3, 0, 3, 0));
145 iB = psub(
iB, pmul(vec4f_swizzle2(
D,
D, 1, 0, 3, 2), vec4f_swizzle2(
AB,
AB, 2, 1, 2, 1)));
146 iB = psub(pmul(C, vec4f_duplane(
dB, 0)),
iB);
149 iC = pmul(A, vec4f_swizzle2(
DC,
DC, 3, 0, 3, 0));
150 iC = psub(
iC, pmul(vec4f_swizzle2(A, A, 1, 0, 3, 2), vec4f_swizzle2(
DC,
DC, 2, 1, 2, 1)));
151 iC = psub(pmul(B, vec4f_duplane(
dC, 0)),
iC);
153 EIGEN_ALIGN_MAX
const float sign_mask[4] = {0.0f, -0.0f, -0.0f, 0.0f};
162 float *res = result.data();
185 typename MatrixType::PlainObject>::type
188 static void run(
const MatrixType &
mat, ResultType &result)
201 const double* data = matrix.data();
202 const Index stride = matrix.innerStride();
203 if (StorageOrdersMatch)
222 A1 = vec2d_unpacklo(
A1,
A2);
223 A2 = vec2d_unpackhi(temp,
A2);
226 C1 = vec2d_unpacklo(
C1,
C2);
227 C2 = vec2d_unpackhi(temp,
C2);
235 B1 = vec2d_unpacklo(B1, B2);
236 B2 = vec2d_unpackhi(temp, B2);
239 D1 = vec2d_unpacklo(
D1,
D2);
240 D2 = vec2d_unpackhi(temp,
D2);
246 dA = vec2d_swizzle2(
A2,
A2, 1);
248 dA = psub(
dA, vec2d_duplane(
dA, 1));
250 dB = vec2d_swizzle2(B2, B2, 1);
252 dB = psub(
dB, vec2d_duplane(
dB, 1));
254 dC = vec2d_swizzle2(
C2,
C2, 1);
256 dC = psub(
dC, vec2d_duplane(
dC, 1));
258 dD = vec2d_swizzle2(
D2,
D2, 1);
260 dD = psub(
dD, vec2d_duplane(
dD, 1));
265 AB1 = pmul(B1, vec2d_duplane(
A2, 1));
266 AB2 = pmul(B2, vec2d_duplane(
A1, 0));
267 AB1 = psub(
AB1, pmul(B2, vec2d_duplane(
A1, 1)));
268 AB2 = psub(
AB2, pmul(B1, vec2d_duplane(
A2, 0)));
271 DC1 = pmul(
C1, vec2d_duplane(
D2, 1));
272 DC2 = pmul(
C2, vec2d_duplane(
D1, 0));
273 DC1 = psub(
DC1, pmul(
C2, vec2d_duplane(
D1, 1)));
274 DC2 = psub(
DC2, pmul(
C1, vec2d_duplane(
D2, 0)));
287 rd = padd(rd, vec2d_duplane(rd, 1));
294 det = vec2d_duplane(
det, 0);
301 iD1 = pmul(
AB1, vec2d_duplane(
C1, 0));
302 iD2 = pmul(
AB1, vec2d_duplane(
C2, 0));
305 dA = vec2d_duplane(
dA, 0);
310 iA1 = pmul(
DC1, vec2d_duplane(B1, 0));
311 iA2 = pmul(
DC1, vec2d_duplane(B2, 0));
312 iA1 = padd(
iA1, pmul(
DC2, vec2d_duplane(B1, 1)));
313 iA2 = padd(
iA2, pmul(
DC2, vec2d_duplane(B2, 1)));
314 dD = vec2d_duplane(
dD, 0);
321 iB1 = psub(
iB1, pmul(vec2d_swizzle2(
D1,
D1, 1), vec2d_swizzle2(
AB2,
AB1, 2)));
322 iB2 = psub(
iB2, pmul(vec2d_swizzle2(
D2,
D2, 1), vec2d_swizzle2(
AB2,
AB1, 2)));
323 dB = vec2d_duplane(
dB, 0);
330 iC1 = psub(
iC1, pmul(vec2d_swizzle2(
A1,
A1, 1), vec2d_swizzle2(
DC2,
DC1, 2)));
331 iC2 = psub(
iC2, pmul(vec2d_swizzle2(
A2,
A2, 1), vec2d_swizzle2(
DC2,
DC1, 2)));
332 dC = vec2d_duplane(
dC, 0);
336 EIGEN_ALIGN_MAX
const double sign_mask1[2] = {0.0, -0.0};
337 EIGEN_ALIGN_MAX
const double sign_mask2[2] = {-0.0, 0.0};
344 double *res = result.data();