11#ifndef EIGEN_TYPE_CASTING_LSX_H
12#define EIGEN_TYPE_CASTING_LSX_H
15#include "../../InternalHeaderCheck.h"
25EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4i>(
const Packet4i& a) {
26 return (__m128)((__m128i)a);
29EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4ui>(
const Packet4ui& a) {
30 return (__m128)((__m128i)a);
33EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet2l>(
const Packet2l& a) {
34 return (__m128d)((__m128i)a);
37EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet2ul>(
const Packet2ul& a) {
38 return (__m128d)((__m128i)a);
41EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet4i>(
const Packet4i& a) {
42 return (__m128d)((__m128i)a);
45EIGEN_STRONG_INLINE Packet16c preinterpret<Packet16c, Packet16uc>(
const Packet16uc& a) {
49EIGEN_STRONG_INLINE Packet8s preinterpret<Packet8s, Packet8us>(
const Packet8us& a) {
53EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet4f>(
const Packet4f& a) {
57EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet4ui>(
const Packet4ui& a) {
61EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet2d>(
const Packet2d& a) {
65EIGEN_STRONG_INLINE Packet2l preinterpret<Packet2l, Packet2d>(
const Packet2d& a) {
69EIGEN_STRONG_INLINE Packet16uc preinterpret<Packet16uc, Packet16c>(
const Packet16c& a) {
73EIGEN_STRONG_INLINE Packet8us preinterpret<Packet8us, Packet8s>(
const Packet8s& a) {
77EIGEN_STRONG_INLINE Packet4ui preinterpret<Packet4ui, Packet4f>(
const Packet4f& a) {
81EIGEN_STRONG_INLINE Packet4ui preinterpret<Packet4ui, Packet4i>(
const Packet4i& a) {
85EIGEN_STRONG_INLINE Packet2ul preinterpret<Packet2ul, Packet2d>(
const Packet2d& a) {
89EIGEN_STRONG_INLINE Packet2ul preinterpret<Packet2ul, Packet2l>(
const Packet2l& a) {
94EIGEN_STRONG_INLINE Packet2l pcast<Packet4f, Packet2l>(
const Packet4f& a) {
95 Packet2d tmp = __lsx_vfcvtl_d_s(a);
96 return __lsx_vftint_l_d(tmp);
99EIGEN_STRONG_INLINE Packet2ul pcast<Packet4f, Packet2ul>(
const Packet4f& a) {
100 Packet2d tmp = __lsx_vfcvtl_d_s(a);
101 return __lsx_vftint_lu_d(tmp);
104EIGEN_STRONG_INLINE Packet4i pcast<Packet4f, Packet4i>(
const Packet4f& a) {
105 return __lsx_vftint_w_s(a);
108EIGEN_STRONG_INLINE Packet4ui pcast<Packet4f, Packet4ui>(
const Packet4f& a) {
109 return __lsx_vftint_wu_s(a);
112EIGEN_STRONG_INLINE Packet8s pcast<Packet4f, Packet8s>(
const Packet4f& a,
const Packet4f& b) {
113 return __lsx_vssrlni_h_w(__lsx_vftint_w_s(a), __lsx_vftint_w_s(b), 0);
116EIGEN_STRONG_INLINE Packet8us pcast<Packet4f, Packet8us>(
const Packet4f& a,
const Packet4f& b) {
117 return __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(a), __lsx_vftint_wu_s(b), 0);
120EIGEN_STRONG_INLINE Packet16c pcast<Packet4f, Packet16c>(
const Packet4f& a,
const Packet4f& b,
const Packet4f& c,
122 Packet8s tmp1 = __lsx_vssrlni_h_w(__lsx_vftint_w_s(a), __lsx_vftint_w_s(b), 0);
123 Packet8s tmp2 = __lsx_vssrlni_h_w(__lsx_vftint_w_s(c), __lsx_vftint_w_s(d), 0);
124 return __lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
127EIGEN_STRONG_INLINE Packet16uc pcast<Packet4f, Packet16uc>(
const Packet4f& a,
const Packet4f& b,
const Packet4f& c,
129 Packet8us tmp1 = __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(a), __lsx_vftint_wu_s(b), 0);
130 Packet8us tmp2 = __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(c), __lsx_vftint_wu_s(d), 0);
131 return __lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
135EIGEN_STRONG_INLINE Packet4f pcast<Packet16c, Packet4f>(
const Packet16c& a) {
136 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
137 Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
138 return __lsx_vffint_s_w(tmp2);
141EIGEN_STRONG_INLINE Packet2l pcast<Packet16c, Packet2l>(
const Packet16c& a) {
142 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
143 Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
144 return __lsx_vsllwil_d_w((__m128i)tmp2, 0);
147EIGEN_STRONG_INLINE Packet2ul pcast<Packet16c, Packet2ul>(
const Packet16c& a) {
148 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
149 Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
150 return (Packet2ul)__lsx_vsllwil_d_w((__m128i)tmp2, 0);
153EIGEN_STRONG_INLINE Packet4i pcast<Packet16c, Packet4i>(
const Packet16c& a) {
154 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
155 return __lsx_vsllwil_w_h((__m128i)tmp1, 0);
158EIGEN_STRONG_INLINE Packet4ui pcast<Packet16c, Packet4ui>(
const Packet16c& a) {
159 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
160 return (Packet4ui)__lsx_vsllwil_w_h((__m128i)tmp1, 0);
163EIGEN_STRONG_INLINE Packet8s pcast<Packet16c, Packet8s>(
const Packet16c& a) {
164 return __lsx_vsllwil_h_b((__m128i)a, 0);
167EIGEN_STRONG_INLINE Packet8us pcast<Packet16c, Packet8us>(
const Packet16c& a) {
168 return (Packet8us)__lsx_vsllwil_h_b((__m128i)a, 0);
172EIGEN_STRONG_INLINE Packet4f pcast<Packet16uc, Packet4f>(
const Packet16uc& a) {
173 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
174 Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
175 return __lsx_vffint_s_wu(tmp2);
178EIGEN_STRONG_INLINE Packet2ul pcast<Packet16uc, Packet2ul>(
const Packet16uc& a) {
179 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
180 Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
181 return __lsx_vsllwil_du_wu((__m128i)tmp2, 0);
184EIGEN_STRONG_INLINE Packet2l pcast<Packet16uc, Packet2l>(
const Packet16uc& a) {
185 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
186 Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
187 return (Packet2l)__lsx_vsllwil_du_wu((__m128i)tmp2, 0);
190EIGEN_STRONG_INLINE Packet4ui pcast<Packet16uc, Packet4ui>(
const Packet16uc& a) {
191 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
192 return __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
195EIGEN_STRONG_INLINE Packet4i pcast<Packet16uc, Packet4i>(
const Packet16uc& a) {
196 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
197 return (Packet4i)__lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
200EIGEN_STRONG_INLINE Packet8us pcast<Packet16uc, Packet8us>(
const Packet16uc& a) {
201 return __lsx_vsllwil_hu_bu((__m128i)a, 0);
204EIGEN_STRONG_INLINE Packet8s pcast<Packet16uc, Packet8s>(
const Packet16uc& a) {
205 return (Packet8s)__lsx_vsllwil_hu_bu((__m128i)a, 0);
209EIGEN_STRONG_INLINE Packet4f pcast<Packet8s, Packet4f>(
const Packet8s& a) {
210 Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
211 return __lsx_vffint_s_w(tmp1);
214EIGEN_STRONG_INLINE Packet2l pcast<Packet8s, Packet2l>(
const Packet8s& a) {
215 Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
216 return __lsx_vsllwil_d_w((__m128i)tmp1, 0);
219EIGEN_STRONG_INLINE Packet2ul pcast<Packet8s, Packet2ul>(
const Packet8s& a) {
220 Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
221 return (Packet2ul)__lsx_vsllwil_d_w((__m128i)tmp1, 0);
224EIGEN_STRONG_INLINE Packet4i pcast<Packet8s, Packet4i>(
const Packet8s& a) {
225 return __lsx_vsllwil_w_h((__m128i)a, 0);
228EIGEN_STRONG_INLINE Packet4ui pcast<Packet8s, Packet4ui>(
const Packet8s& a) {
229 return (Packet4ui)__lsx_vsllwil_w_h((__m128i)a, 0);
232EIGEN_STRONG_INLINE Packet16c pcast<Packet8s, Packet16c>(
const Packet8s& a,
const Packet8s& b) {
233 return __lsx_vssrlni_b_h((__m128i)a, (__m128i)b, 0);
236EIGEN_STRONG_INLINE Packet16uc pcast<Packet8s, Packet16uc>(
const Packet8s& a,
const Packet8s& b) {
237 return (Packet16uc)__lsx_vssrlni_b_h((__m128i)a, (__m128i)b, 0);
241EIGEN_STRONG_INLINE Packet4f pcast<Packet8us, Packet4f>(
const Packet8us& a) {
242 Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
243 return __lsx_vffint_s_wu(tmp1);
246EIGEN_STRONG_INLINE Packet2ul pcast<Packet8us, Packet2ul>(
const Packet8us& a) {
247 Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
248 return __lsx_vsllwil_du_wu((__m128i)tmp1, 0);
251EIGEN_STRONG_INLINE Packet2l pcast<Packet8us, Packet2l>(
const Packet8us& a) {
252 Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
253 return (Packet2l)__lsx_vsllwil_du_wu((__m128i)tmp1, 0);
256EIGEN_STRONG_INLINE Packet4ui pcast<Packet8us, Packet4ui>(
const Packet8us& a) {
257 return __lsx_vsllwil_wu_hu((__m128i)a, 0);
260EIGEN_STRONG_INLINE Packet4i pcast<Packet8us, Packet4i>(
const Packet8us& a) {
261 return (Packet4i)__lsx_vsllwil_wu_hu((__m128i)a, 0);
264EIGEN_STRONG_INLINE Packet16uc pcast<Packet8us, Packet16uc>(
const Packet8us& a,
const Packet8us& b) {
265 return __lsx_vssrlni_bu_h((__m128i)a, (__m128i)b, 0);
268EIGEN_STRONG_INLINE Packet16c pcast<Packet8us, Packet16c>(
const Packet8us& a,
const Packet8us& b) {
269 return (Packet16c)__lsx_vssrlni_bu_h((__m128i)a, (__m128i)b, 0);
273EIGEN_STRONG_INLINE Packet4f pcast<Packet4i, Packet4f>(
const Packet4i& a) {
274 return __lsx_vffint_s_w(a);
277EIGEN_STRONG_INLINE Packet2l pcast<Packet4i, Packet2l>(
const Packet4i& a) {
278 return __lsx_vsllwil_d_w((__m128i)a, 0);
281EIGEN_STRONG_INLINE Packet2ul pcast<Packet4i, Packet2ul>(
const Packet4i& a) {
282 return (Packet2ul)__lsx_vsllwil_d_w((__m128i)a, 0);
285EIGEN_STRONG_INLINE Packet8s pcast<Packet4i, Packet8s>(
const Packet4i& a,
const Packet4i& b) {
286 return __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
289EIGEN_STRONG_INLINE Packet8us pcast<Packet4i, Packet8us>(
const Packet4i& a,
const Packet4i& b) {
290 return (Packet8us)__lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
293EIGEN_STRONG_INLINE Packet16c pcast<Packet4i, Packet16c>(
const Packet4i& a,
const Packet4i& b,
const Packet4i& c,
295 Packet8s tmp1 = __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
296 Packet8s tmp2 = __lsx_vssrlni_h_w((__m128i)c, (__m128i)d, 0);
297 return __lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
300EIGEN_STRONG_INLINE Packet16uc pcast<Packet4i, Packet16uc>(
const Packet4i& a,
const Packet4i& b,
const Packet4i& c,
302 Packet8s tmp1 = __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
303 Packet8s tmp2 = __lsx_vssrlni_h_w((__m128i)c, (__m128i)d, 0);
304 return (Packet16uc)__lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
308EIGEN_STRONG_INLINE Packet4f pcast<Packet4ui, Packet4f>(
const Packet4ui& a) {
309 return __lsx_vffint_s_wu(a);
312EIGEN_STRONG_INLINE Packet2ul pcast<Packet4ui, Packet2ul>(
const Packet4ui& a) {
313 return __lsx_vsllwil_du_wu((__m128i)a, 0);
316EIGEN_STRONG_INLINE Packet2l pcast<Packet4ui, Packet2l>(
const Packet4ui& a) {
317 return (Packet2l)__lsx_vsllwil_du_wu((__m128i)a, 0);
320EIGEN_STRONG_INLINE Packet8us pcast<Packet4ui, Packet8us>(
const Packet4ui& a,
const Packet4ui& b) {
321 return __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
324EIGEN_STRONG_INLINE Packet8s pcast<Packet4ui, Packet8s>(
const Packet4ui& a,
const Packet4ui& b) {
325 return (Packet8s)__lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
328EIGEN_STRONG_INLINE Packet16uc pcast<Packet4ui, Packet16uc>(
const Packet4ui& a,
const Packet4ui& b,
const Packet4ui& c,
329 const Packet4ui& d) {
330 Packet8us tmp1 = __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
331 Packet8us tmp2 = __lsx_vssrlni_hu_w((__m128i)c, (__m128i)d, 0);
332 return __lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
335EIGEN_STRONG_INLINE Packet16c pcast<Packet4ui, Packet16c>(
const Packet4ui& a,
const Packet4ui& b,
const Packet4ui& c,
336 const Packet4ui& d) {
337 Packet8us tmp1 = __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
338 Packet8us tmp2 = __lsx_vssrlni_hu_w((__m128i)c, (__m128i)d, 0);
339 return (Packet16c)__lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
343EIGEN_STRONG_INLINE Packet4f pcast<Packet2l, Packet4f>(
const Packet2l& a,
const Packet2l& b) {
344 return __lsx_vffint_s_w(__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0));
347EIGEN_STRONG_INLINE Packet4i pcast<Packet2l, Packet4i>(
const Packet2l& a,
const Packet2l& b) {
348 return __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
351EIGEN_STRONG_INLINE Packet4ui pcast<Packet2l, Packet4ui>(
const Packet2l& a,
const Packet2l& b) {
352 return (Packet4ui)__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
355EIGEN_STRONG_INLINE Packet8s pcast<Packet2l, Packet8s>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
357 Packet4i tmp1 = __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
358 Packet4i tmp2 = __lsx_vssrlni_w_d((__m128i)c, (__m128i)d, 0);
359 return __lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
362EIGEN_STRONG_INLINE Packet8us pcast<Packet2l, Packet8us>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
364 Packet4i tmp1 = __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
365 Packet4i tmp2 = __lsx_vssrlni_w_d((__m128i)c, (__m128i)d, 0);
366 return (Packet8us)__lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
369EIGEN_STRONG_INLINE Packet16c pcast<Packet2l, Packet16c>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
370 const Packet2l& d,
const Packet2l& e,
const Packet2l& f,
371 const Packet2l& g,
const Packet2l& h) {
372 const Packet8s abcd = pcast<Packet2l, Packet8s>(a, b, c, d);
373 const Packet8s efgh = pcast<Packet2l, Packet8s>(e, f, g, h);
374 return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
377EIGEN_STRONG_INLINE Packet16uc pcast<Packet2l, Packet16uc>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
378 const Packet2l& d,
const Packet2l& e,
const Packet2l& f,
379 const Packet2l& g,
const Packet2l& h) {
380 const Packet8us abcd = pcast<Packet2l, Packet8us>(a, b, c, d);
381 const Packet8us efgh = pcast<Packet2l, Packet8us>(e, f, g, h);
382 return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
386EIGEN_STRONG_INLINE Packet4f pcast<Packet2ul, Packet4f>(
const Packet2ul& a,
const Packet2ul& b) {
387 return __lsx_vffint_s_wu(__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0));
390EIGEN_STRONG_INLINE Packet4ui pcast<Packet2ul, Packet4ui>(
const Packet2ul& a,
const Packet2ul& b) {
391 return __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
394EIGEN_STRONG_INLINE Packet4i pcast<Packet2ul, Packet4i>(
const Packet2ul& a,
const Packet2ul& b) {
395 return (Packet4i)__lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
398EIGEN_STRONG_INLINE Packet8us pcast<Packet2ul, Packet8us>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
399 const Packet2ul& d) {
400 Packet4ui tmp1 = __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
401 Packet4ui tmp2 = __lsx_vssrlni_wu_d((__m128i)c, (__m128i)d, 0);
402 return __lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
405EIGEN_STRONG_INLINE Packet8s pcast<Packet2ul, Packet8s>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
406 const Packet2ul& d) {
407 Packet4ui tmp1 = __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
408 Packet4ui tmp2 = __lsx_vssrlni_wu_d((__m128i)c, (__m128i)d, 0);
409 return (Packet8s)__lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
412EIGEN_STRONG_INLINE Packet16uc pcast<Packet2ul, Packet16uc>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
413 const Packet2ul& d,
const Packet2ul& e,
const Packet2ul& f,
414 const Packet2ul& g,
const Packet2ul& h) {
415 const Packet8s abcd = pcast<Packet2ul, Packet8s>(a, b, c, d);
416 const Packet8s efgh = pcast<Packet2ul, Packet8s>(e, f, g, h);
417 return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
420EIGEN_STRONG_INLINE Packet16c pcast<Packet2ul, Packet16c>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
421 const Packet2ul& d,
const Packet2ul& e,
const Packet2ul& f,
422 const Packet2ul& g,
const Packet2ul& h) {
423 const Packet8us abcd = pcast<Packet2ul, Packet8us>(a, b, c, d);
424 const Packet8us efgh = pcast<Packet2ul, Packet8us>(e, f, g, h);
425 return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
429EIGEN_STRONG_INLINE Packet4f pcast<Packet2d, Packet4f>(
const Packet2d& a,
const Packet2d& b) {
430 return __lsx_vfcvt_s_d(b, a);
433EIGEN_STRONG_INLINE Packet2l pcast<Packet2d, Packet2l>(
const Packet2d& a) {
434 return __lsx_vftint_l_d(a);
437EIGEN_STRONG_INLINE Packet2ul pcast<Packet2d, Packet2ul>(
const Packet2d& a) {
438 return __lsx_vftint_lu_d(a);
441EIGEN_STRONG_INLINE Packet4i pcast<Packet2d, Packet4i>(
const Packet2d& a,
const Packet2d& b) {
442 return __lsx_vssrlni_w_d(__lsx_vftint_l_d(a), __lsx_vftint_l_d(b), 0);
445EIGEN_STRONG_INLINE Packet4ui pcast<Packet2d, Packet4ui>(
const Packet2d& a,
const Packet2d& b) {
446 return __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(a), __lsx_vftint_lu_d(b), 0);
449EIGEN_STRONG_INLINE Packet8s pcast<Packet2d, Packet8s>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
451 Packet4i tmp1 = __lsx_vssrlni_w_d(__lsx_vftint_l_d(a), __lsx_vftint_l_d(b), 0);
452 Packet4i tmp2 = __lsx_vssrlni_w_d(__lsx_vftint_l_d(c), __lsx_vftint_l_d(d), 0);
453 return __lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
456EIGEN_STRONG_INLINE Packet8us pcast<Packet2d, Packet8us>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
458 Packet4ui tmp1 = __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(a), __lsx_vftint_lu_d(b), 0);
459 Packet4ui tmp2 = __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(c), __lsx_vftint_lu_d(d), 0);
460 return __lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
463EIGEN_STRONG_INLINE Packet16c pcast<Packet2d, Packet16c>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
464 const Packet2d& d,
const Packet2d& e,
const Packet2d& f,
465 const Packet2d& g,
const Packet2d& h) {
466 const Packet8s abcd = pcast<Packet2d, Packet8s>(a, b, c, d);
467 const Packet8s efgh = pcast<Packet2d, Packet8s>(e, f, g, h);
468 return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
471EIGEN_STRONG_INLINE Packet16uc pcast<Packet2d, Packet16uc>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
472 const Packet2d& d,
const Packet2d& e,
const Packet2d& f,
473 const Packet2d& g,
const Packet2d& h) {
474 const Packet8us abcd = pcast<Packet2d, Packet8us>(a, b, c, d);
475 const Packet8us efgh = pcast<Packet2d, Packet8us>(e, f, g, h);
476 return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
480EIGEN_STRONG_INLINE Packet2d pcast<Packet4f, Packet2d>(
const Packet4f& a) {
481 return __lsx_vfcvtl_d_s(a);
484EIGEN_STRONG_INLINE Packet2d pcast<Packet16c, Packet2d>(
const Packet16c& a) {
485 Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
486 Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
487 return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)tmp2, 0));
490EIGEN_STRONG_INLINE Packet2d pcast<Packet16uc, Packet2d>(
const Packet16uc& a) {
491 Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
492 Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
493 return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)tmp2, 0));
496EIGEN_STRONG_INLINE Packet2d pcast<Packet8s, Packet2d>(
const Packet8s& a) {
497 Packet4i tmp = __lsx_vsllwil_w_h((__m128i)a, 0);
498 return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)tmp, 0));
501EIGEN_STRONG_INLINE Packet2d pcast<Packet8us, Packet2d>(
const Packet8us& a) {
502 Packet4ui tmp = __lsx_vsllwil_wu_hu((__m128i)a, 0);
503 return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)tmp, 0));
506EIGEN_STRONG_INLINE Packet2d pcast<Packet4i, Packet2d>(
const Packet4i& a) {
507 return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)a, 0));
510EIGEN_STRONG_INLINE Packet2d pcast<Packet4ui, Packet2d>(
const Packet4ui& a) {
511 return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)a, 0));
514EIGEN_STRONG_INLINE Packet2d pcast<Packet2l, Packet2d>(
const Packet2l& a) {
515 return __lsx_vffint_d_l(a);
518EIGEN_STRONG_INLINE Packet2d pcast<Packet2ul, Packet2d>(
const Packet2ul& a) {
519 return __lsx_vffint_d_lu(a);
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1