11#ifndef EIGEN_TYPE_CASTING_NEON_H
12#define EIGEN_TYPE_CASTING_NEON_H
15#include "../../InternalHeaderCheck.h"
26EIGEN_STRONG_INLINE Packet8c preinterpret<Packet8c, Packet16c>(
const Packet16c& a) {
27 return Packet8c(vget_low_s8(a));
30EIGEN_STRONG_INLINE Packet4c preinterpret<Packet4c, Packet8c>(
const Packet8c& a) {
31 return Packet4c(vget_lane_s32(vreinterpret_s32_s8(a), 0));
34EIGEN_STRONG_INLINE Packet4c preinterpret<Packet4c, Packet16c>(
const Packet16c& a) {
35 return preinterpret<Packet4c>(preinterpret<Packet8c>(a));
39EIGEN_STRONG_INLINE Packet8uc preinterpret<Packet8uc, Packet16uc>(
const Packet16uc& a) {
40 return Packet8uc(vget_low_u8(a));
43EIGEN_STRONG_INLINE Packet4uc preinterpret<Packet4uc, Packet8uc>(
const Packet8uc& a) {
44 return Packet4uc(vget_lane_u32(vreinterpret_u32_u8(a), 0));
47EIGEN_STRONG_INLINE Packet4uc preinterpret<Packet4uc, Packet16uc>(
const Packet16uc& a) {
48 return preinterpret<Packet4uc>(preinterpret<Packet8uc>(a));
52EIGEN_STRONG_INLINE Packet4s preinterpret<Packet4s, Packet8s>(
const Packet8s& a) {
53 return Packet4s(vget_low_s16(a));
57EIGEN_STRONG_INLINE Packet4us preinterpret<Packet4us, Packet8us>(
const Packet8us& a) {
58 return Packet4us(vget_low_u16(a));
62EIGEN_STRONG_INLINE Packet2i preinterpret<Packet2i, Packet4i>(
const Packet4i& a) {
63 return Packet2i(vget_low_s32(a));
66EIGEN_STRONG_INLINE Packet2ui preinterpret<Packet2ui, Packet4ui>(
const Packet4ui& a) {
67 return Packet2ui(vget_low_u32(a));
71EIGEN_STRONG_INLINE Packet2f preinterpret<Packet2f, Packet4f>(
const Packet4f& a) {
72 return Packet2f(vget_low_f32(a));
79EIGEN_STRONG_INLINE Packet2f preinterpret<Packet2f, Packet2i>(
const Packet2i& a) {
80 return Packet2f(vreinterpret_f32_s32(a));
83EIGEN_STRONG_INLINE Packet2f preinterpret<Packet2f, Packet2ui>(
const Packet2ui& a) {
84 return Packet2f(vreinterpret_f32_u32(a));
87EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4i>(
const Packet4i& a) {
88 return Packet4f(vreinterpretq_f32_s32(a));
91EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4ui>(
const Packet4ui& a) {
92 return Packet4f(vreinterpretq_f32_u32(a));
96EIGEN_STRONG_INLINE Packet4c preinterpret<Packet4c, Packet4uc>(
const Packet4uc& a) {
97 return static_cast<Packet4c
>(a);
100EIGEN_STRONG_INLINE Packet8c preinterpret<Packet8c, Packet8uc>(
const Packet8uc& a) {
101 return Packet8c(vreinterpret_s8_u8(a));
104EIGEN_STRONG_INLINE Packet16c preinterpret<Packet16c, Packet16uc>(
const Packet16uc& a) {
105 return Packet16c(vreinterpretq_s8_u8(a));
109EIGEN_STRONG_INLINE Packet4uc preinterpret<Packet4uc, Packet4c>(
const Packet4c& a) {
110 return static_cast<Packet4uc
>(a);
113EIGEN_STRONG_INLINE Packet8uc preinterpret<Packet8uc, Packet8c>(
const Packet8c& a) {
114 return Packet8uc(vreinterpret_u8_s8(a));
117EIGEN_STRONG_INLINE Packet16uc preinterpret<Packet16uc, Packet16c>(
const Packet16c& a) {
118 return Packet16uc(vreinterpretq_u8_s8(a));
122EIGEN_STRONG_INLINE Packet4s preinterpret<Packet4s, Packet4us>(
const Packet4us& a) {
123 return Packet4s(vreinterpret_s16_u16(a));
126EIGEN_STRONG_INLINE Packet8s preinterpret<Packet8s, Packet8us>(
const Packet8us& a) {
127 return Packet8s(vreinterpretq_s16_u16(a));
130EIGEN_STRONG_INLINE Packet4us preinterpret<Packet4us, Packet4s>(
const Packet4s& a) {
131 return Packet4us(vreinterpret_u16_s16(a));
134EIGEN_STRONG_INLINE Packet8us preinterpret<Packet8us, Packet8s>(
const Packet8s& a) {
135 return Packet8us(vreinterpretq_u16_s16(a));
139EIGEN_STRONG_INLINE Packet2i preinterpret<Packet2i, Packet2f>(
const Packet2f& a) {
140 return Packet2i(vreinterpret_s32_f32(a));
143EIGEN_STRONG_INLINE Packet2i preinterpret<Packet2i, Packet2ui>(
const Packet2ui& a) {
144 return Packet2i(vreinterpret_s32_u32(a));
147EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet4f>(
const Packet4f& a) {
148 return Packet4i(vreinterpretq_s32_f32(a));
151EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet4ui>(
const Packet4ui& a) {
152 return Packet4i(vreinterpretq_s32_u32(a));
156EIGEN_STRONG_INLINE Packet2ui preinterpret<Packet2ui, Packet2f>(
const Packet2f& a) {
157 return Packet2ui(vreinterpret_u32_f32(a));
160EIGEN_STRONG_INLINE Packet2ui preinterpret<Packet2ui, Packet2i>(
const Packet2i& a) {
161 return Packet2ui(vreinterpret_u32_s32(a));
164EIGEN_STRONG_INLINE Packet4ui preinterpret<Packet4ui, Packet4f>(
const Packet4f& a) {
165 return Packet4ui(vreinterpretq_u32_f32(a));
168EIGEN_STRONG_INLINE Packet4ui preinterpret<Packet4ui, Packet4i>(
const Packet4i& a) {
169 return Packet4ui(vreinterpretq_u32_s32(a));
173EIGEN_STRONG_INLINE Packet2l preinterpret<Packet2l, Packet2ul>(
const Packet2ul& a) {
174 return Packet2l(vreinterpretq_s64_u64(a));
177EIGEN_STRONG_INLINE Packet2ul preinterpret<Packet2ul, Packet2l>(
const Packet2l& a) {
178 return Packet2ul(vreinterpretq_u64_s64(a));
186struct type_casting_traits<float, numext::int64_t> {
187 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
190struct type_casting_traits<float, numext::uint64_t> {
191 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
196EIGEN_STRONG_INLINE Packet2l pcast<Packet4f, Packet2l>(
const Packet4f& a) {
198 return vcvtq_s64_f64(vcvt_f64_f32(vget_low_f32(a)));
201EIGEN_STRONG_INLINE Packet2l pcast<Packet2f, Packet2l>(
const Packet2f& a) {
202 return vcvtq_s64_f64(vcvt_f64_f32(a));
205EIGEN_STRONG_INLINE Packet2ul pcast<Packet4f, Packet2ul>(
const Packet4f& a) {
207 return vcvtq_u64_f64(vcvt_f64_f32(vget_low_f32(a)));
210EIGEN_STRONG_INLINE Packet2ul pcast<Packet2f, Packet2ul>(
const Packet2f& a) {
211 return vcvtq_u64_f64(vcvt_f64_f32(a));
215EIGEN_STRONG_INLINE Packet2l pcast<Packet4f, Packet2l>(
const Packet4f& a) {
217 return vmovl_s32(vget_low_s32(vcvtq_s32_f32(a)));
220EIGEN_STRONG_INLINE Packet2l pcast<Packet2f, Packet2l>(
const Packet2f& a) {
221 return vmovl_s32(vcvt_s32_f32(a));
224EIGEN_STRONG_INLINE Packet2ul pcast<Packet4f, Packet2ul>(
const Packet4f& a) {
226 return vmovl_u32(vget_low_u32(vcvtq_u32_f32(a)));
229EIGEN_STRONG_INLINE Packet2ul pcast<Packet2f, Packet2ul>(
const Packet2f& a) {
231 return vmovl_u32(vcvt_u32_f32(a));
236struct type_casting_traits<float, numext::int32_t> {
237 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
240EIGEN_STRONG_INLINE Packet4i pcast<Packet4f, Packet4i>(
const Packet4f& a) {
241 return vcvtq_s32_f32(a);
244EIGEN_STRONG_INLINE Packet2i pcast<Packet2f, Packet2i>(
const Packet2f& a) {
245 return vcvt_s32_f32(a);
249struct type_casting_traits<float, numext::uint32_t> {
250 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
253EIGEN_STRONG_INLINE Packet4ui pcast<Packet4f, Packet4ui>(
const Packet4f& a) {
254 return vcvtq_u32_f32(a);
257EIGEN_STRONG_INLINE Packet2ui pcast<Packet2f, Packet2ui>(
const Packet2f& a) {
258 return vcvt_u32_f32(a);
262struct type_casting_traits<float, numext::int16_t> {
263 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
266EIGEN_STRONG_INLINE Packet8s pcast<Packet4f, Packet8s>(
const Packet4f& a,
const Packet4f& b) {
267 return vcombine_s16(vmovn_s32(vcvtq_s32_f32(a)), vmovn_s32(vcvtq_s32_f32(b)));
270EIGEN_STRONG_INLINE Packet4s pcast<Packet4f, Packet4s>(
const Packet4f& a) {
271 return vmovn_s32(vcvtq_s32_f32(a));
274EIGEN_STRONG_INLINE Packet4s pcast<Packet2f, Packet4s>(
const Packet2f& a,
const Packet2f& b) {
275 return vmovn_s32(vcombine_s32(vcvt_s32_f32(a), vcvt_s32_f32(b)));
279struct type_casting_traits<float, numext::uint16_t> {
280 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
283EIGEN_STRONG_INLINE Packet8us pcast<Packet4f, Packet8us>(
const Packet4f& a,
const Packet4f& b) {
284 return vcombine_u16(vmovn_u32(vcvtq_u32_f32(a)), vmovn_u32(vcvtq_u32_f32(b)));
287EIGEN_STRONG_INLINE Packet4us pcast<Packet4f, Packet4us>(
const Packet4f& a) {
288 return vmovn_u32(vcvtq_u32_f32(a));
291EIGEN_STRONG_INLINE Packet4us pcast<Packet2f, Packet4us>(
const Packet2f& a,
const Packet2f& b) {
292 return vmovn_u32(vcombine_u32(vcvt_u32_f32(a), vcvt_u32_f32(b)));
296struct type_casting_traits<float, numext::int8_t> {
297 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
300EIGEN_STRONG_INLINE Packet16c pcast<Packet4f, Packet16c>(
const Packet4f& a,
const Packet4f& b,
const Packet4f& c,
302 const int16x8_t ab_s16 = pcast<Packet4f, Packet8s>(a, b);
303 const int16x8_t cd_s16 = pcast<Packet4f, Packet8s>(c, d);
304 return vcombine_s8(vmovn_s16(ab_s16), vmovn_s16(cd_s16));
307EIGEN_STRONG_INLINE Packet8c pcast<Packet4f, Packet8c>(
const Packet4f& a,
const Packet4f& b) {
308 const int16x8_t ab_s16 = pcast<Packet4f, Packet8s>(a, b);
309 return vmovn_s16(ab_s16);
312EIGEN_STRONG_INLINE Packet8c pcast<Packet2f, Packet8c>(
const Packet2f& a,
const Packet2f& b,
const Packet2f& c,
314 const int16x4_t ab_s16 = pcast<Packet2f, Packet4s>(a, b);
315 const int16x4_t cd_s16 = pcast<Packet2f, Packet4s>(c, d);
316 return vmovn_s16(vcombine_s16(ab_s16, cd_s16));
319EIGEN_STRONG_INLINE Packet4c pcast<Packet4f, Packet4c>(
const Packet4f& a) {
320 const int32x4_t a_s32x4 = vcvtq_s32_f32(a);
321 const int16x4_t a_s16x4 = vmovn_s32(a_s32x4);
322 const int16x8_t aa_s16x8 = vcombine_s16(a_s16x4, a_s16x4);
323 const int8x8_t aa_s8x8 = vmovn_s16(aa_s16x8);
324 return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
328struct type_casting_traits<float, numext::uint8_t> {
329 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
332EIGEN_STRONG_INLINE Packet16uc pcast<Packet4f, Packet16uc>(
const Packet4f& a,
const Packet4f& b,
const Packet4f& c,
334 return preinterpret<Packet16uc>(pcast<Packet4f, Packet16c>(a, b, c, d));
337EIGEN_STRONG_INLINE Packet8uc pcast<Packet4f, Packet8uc>(
const Packet4f& a,
const Packet4f& b) {
338 return preinterpret<Packet8uc>(pcast<Packet4f, Packet8c>(a, b));
341EIGEN_STRONG_INLINE Packet8uc pcast<Packet2f, Packet8uc>(
const Packet2f& a,
const Packet2f& b,
const Packet2f& c,
343 return preinterpret<Packet8uc>(pcast<Packet2f, Packet8c>(a, b, c, d));
346EIGEN_STRONG_INLINE Packet4uc pcast<Packet4f, Packet4uc>(
const Packet4f& a) {
347 return static_cast<Packet4uc
>(pcast<Packet4f, Packet4c>(a));
354struct type_casting_traits<numext::int8_t, float> {
355 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
358EIGEN_STRONG_INLINE Packet4f pcast<Packet16c, Packet4f>(
const Packet16c& a) {
360 return vcvtq_f32_s32(vmovl_s16(vget_low_s16(vmovl_s8(vget_low_s8(a)))));
363EIGEN_STRONG_INLINE Packet4f pcast<Packet4c, Packet4f>(
const Packet4c& a) {
364 return vcvtq_f32_s32(vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_s32(vdup_n_s32(a))))));
367EIGEN_STRONG_INLINE Packet2f pcast<Packet8c, Packet2f>(
const Packet8c& a) {
369 return vcvt_f32_s32(vget_low_s32(vmovl_s16(vget_low_s16(vmovl_s8(a)))));
373struct type_casting_traits<numext::int8_t, numext::int64_t> {
374 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
377EIGEN_STRONG_INLINE Packet2l pcast<Packet16c, Packet2l>(
const Packet16c& a) {
379 return vmovl_s32(vget_low_s32(vmovl_s16(vget_low_s16(vmovl_s8(vget_low_s8(a))))));
383struct type_casting_traits<numext::int8_t, numext::uint64_t> {
384 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
387EIGEN_STRONG_INLINE Packet2ul pcast<Packet16c, Packet2ul>(
const Packet16c& a) {
388 return preinterpret<Packet2ul>(pcast<Packet16c, Packet2l>(a));
392struct type_casting_traits<numext::int8_t, numext::int32_t> {
393 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
396EIGEN_STRONG_INLINE Packet4i pcast<Packet16c, Packet4i>(
const Packet16c& a) {
398 return vmovl_s16(vget_low_s16(vmovl_s8(vget_low_s8(a))));
401EIGEN_STRONG_INLINE Packet4i pcast<Packet8c, Packet4i>(
const Packet8c& a) {
402 return vmovl_s16(vget_low_s16(vmovl_s8(a)));
405EIGEN_STRONG_INLINE Packet4i pcast<Packet4c, Packet4i>(
const Packet4c& a) {
406 return pcast<Packet8c, Packet4i>(vreinterpret_s8_s32(vdup_n_s32(a)));
409EIGEN_STRONG_INLINE Packet2i pcast<Packet8c, Packet2i>(
const Packet8c& a) {
411 return vget_low_s32(vmovl_s16(vget_low_s16(vmovl_s8(a))));
415struct type_casting_traits<numext::int8_t, numext::uint32_t> {
416 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
419EIGEN_STRONG_INLINE Packet4ui pcast<Packet16c, Packet4ui>(
const Packet16c& a) {
420 return preinterpret<Packet4ui>(pcast<Packet16c, Packet4i>(a));
423EIGEN_STRONG_INLINE Packet2ui pcast<Packet8c, Packet2ui>(
const Packet8c& a) {
424 return preinterpret<Packet2ui>(pcast<Packet8c, Packet2i>(a));
427EIGEN_STRONG_INLINE Packet4ui pcast<Packet4c, Packet4ui>(
const Packet4c& a) {
428 return preinterpret<Packet4ui>(pcast<Packet4c, Packet4i>(a));
432struct type_casting_traits<numext::int8_t, numext::int16_t> {
433 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
436EIGEN_STRONG_INLINE Packet8s pcast<Packet16c, Packet8s>(
const Packet16c& a) {
438 return vmovl_s8(vget_low_s8(a));
441EIGEN_STRONG_INLINE Packet8s pcast<Packet8c, Packet8s>(
const Packet8c& a) {
445EIGEN_STRONG_INLINE Packet4s pcast<Packet8c, Packet4s>(
const Packet8c& a) {
447 return vget_low_s16(vmovl_s8(a));
450EIGEN_STRONG_INLINE Packet4s pcast<Packet4c, Packet4s>(
const Packet4c& a) {
451 return pcast<Packet8c, Packet4s>(vreinterpret_s8_s32(vdup_n_s32(a)));
455struct type_casting_traits<numext::int8_t, numext::uint16_t> {
456 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
459EIGEN_STRONG_INLINE Packet8us pcast<Packet16c, Packet8us>(
const Packet16c& a) {
460 return preinterpret<Packet8us>(pcast<Packet16c, Packet8s>(a));
463EIGEN_STRONG_INLINE Packet8us pcast<Packet8c, Packet8us>(
const Packet8c& a) {
464 return preinterpret<Packet8us>(pcast<Packet8c, Packet8s>(a));
467EIGEN_STRONG_INLINE Packet4us pcast<Packet8c, Packet4us>(
const Packet8c& a) {
468 return preinterpret<Packet4us>(pcast<Packet8c, Packet4s>(a));
471EIGEN_STRONG_INLINE Packet4us pcast<Packet4c, Packet4us>(
const Packet4c& a) {
472 return preinterpret<Packet4us>(pcast<Packet4c, Packet4s>(a));
479struct type_casting_traits<numext::uint8_t, float> {
480 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
483EIGEN_STRONG_INLINE Packet4f pcast<Packet16uc, Packet4f>(
const Packet16uc& a) {
485 return vcvtq_f32_u32(vmovl_u16(vget_low_u16(vmovl_u8(vget_low_u8(a)))));
488EIGEN_STRONG_INLINE Packet4f pcast<Packet4uc, Packet4f>(
const Packet4uc& a) {
489 return vcvtq_f32_u32(vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(a))))));
492EIGEN_STRONG_INLINE Packet2f pcast<Packet8uc, Packet2f>(
const Packet8uc& a) {
494 return vcvt_f32_u32(vget_low_u32(vmovl_u16(vget_low_u16(vmovl_u8(a)))));
498struct type_casting_traits<numext::uint8_t, numext::uint64_t> {
499 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
502EIGEN_STRONG_INLINE Packet2ul pcast<Packet16uc, Packet2ul>(
const Packet16uc& a) {
504 return vmovl_u32(vget_low_u32(vmovl_u16(vget_low_u16(vmovl_u8(vget_low_u8(a))))));
508struct type_casting_traits<numext::uint8_t, numext::int64_t> {
509 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
512EIGEN_STRONG_INLINE Packet2l pcast<Packet16uc, Packet2l>(
const Packet16uc& a) {
513 return preinterpret<Packet2l>(pcast<Packet16uc, Packet2ul>(a));
517struct type_casting_traits<numext::uint8_t, numext::uint32_t> {
518 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
521EIGEN_STRONG_INLINE Packet4ui pcast<Packet16uc, Packet4ui>(
const Packet16uc& a) {
523 return vmovl_u16(vget_low_u16(vmovl_u8(vget_low_u8(a))));
526EIGEN_STRONG_INLINE Packet4ui pcast<Packet8uc, Packet4ui>(
const Packet8uc& a) {
527 return vmovl_u16(vget_low_u16(vmovl_u8(a)));
530EIGEN_STRONG_INLINE Packet2ui pcast<Packet8uc, Packet2ui>(
const Packet8uc& a) {
532 return vget_low_u32(vmovl_u16(vget_low_u16(vmovl_u8(a))));
535EIGEN_STRONG_INLINE Packet4ui pcast<Packet4uc, Packet4ui>(
const Packet4uc& a) {
536 return pcast<Packet8uc, Packet4ui>(vreinterpret_u8_u32(vdup_n_u32(a)));
540struct type_casting_traits<numext::uint8_t, numext::int32_t> {
541 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
544EIGEN_STRONG_INLINE Packet4i pcast<Packet16uc, Packet4i>(
const Packet16uc& a) {
545 return preinterpret<Packet4i>(pcast<Packet16uc, Packet4ui>(a));
548EIGEN_STRONG_INLINE Packet2i pcast<Packet8uc, Packet2i>(
const Packet8uc& a) {
549 return preinterpret<Packet2i>(pcast<Packet8uc, Packet2ui>(a));
552EIGEN_STRONG_INLINE Packet4i pcast<Packet4uc, Packet4i>(
const Packet4uc& a) {
553 return preinterpret<Packet4i>(pcast<Packet4uc, Packet4ui>(a));
557struct type_casting_traits<numext::uint8_t, numext::uint16_t> {
558 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
561EIGEN_STRONG_INLINE Packet8us pcast<Packet16uc, Packet8us>(
const Packet16uc& a) {
563 return vmovl_u8(vget_low_u8(a));
566EIGEN_STRONG_INLINE Packet8us pcast<Packet8uc, Packet8us>(
const Packet8uc& a) {
570EIGEN_STRONG_INLINE Packet4us pcast<Packet4uc, Packet4us>(
const Packet4uc& a) {
571 return vget_low_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(a))));
575struct type_casting_traits<numext::uint8_t, numext::int16_t> {
576 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
579EIGEN_STRONG_INLINE Packet8s pcast<Packet16uc, Packet8s>(
const Packet16uc& a) {
580 return preinterpret<Packet8s>(pcast<Packet16uc, Packet8us>(a));
583EIGEN_STRONG_INLINE Packet8s pcast<Packet8uc, Packet8s>(
const Packet8uc& a) {
584 return preinterpret<Packet8s>(pcast<Packet8uc, Packet8us>(a));
587EIGEN_STRONG_INLINE Packet4s pcast<Packet4uc, Packet4s>(
const Packet4uc& a) {
588 return preinterpret<Packet4s>(pcast<Packet4uc, Packet4us>(a));
595struct type_casting_traits<numext::int16_t, float> {
596 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
599EIGEN_STRONG_INLINE Packet4f pcast<Packet8s, Packet4f>(
const Packet8s& a) {
601 return vcvtq_f32_s32(vmovl_s16(vget_low_s16(a)));
604EIGEN_STRONG_INLINE Packet4f pcast<Packet4s, Packet4f>(
const Packet4s& a) {
605 return vcvtq_f32_s32(vmovl_s16(a));
608EIGEN_STRONG_INLINE Packet2f pcast<Packet4s, Packet2f>(
const Packet4s& a) {
610 return vcvt_f32_s32(vget_low_s32(vmovl_s16(a)));
614struct type_casting_traits<numext::int16_t, numext::int64_t> {
615 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
618EIGEN_STRONG_INLINE Packet2l pcast<Packet8s, Packet2l>(
const Packet8s& a) {
620 return vmovl_s32(vget_low_s32(vmovl_s16(vget_low_s16(a))));
624struct type_casting_traits<numext::int16_t, numext::uint64_t> {
625 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
628EIGEN_STRONG_INLINE Packet2ul pcast<Packet8s, Packet2ul>(
const Packet8s& a) {
629 return preinterpret<Packet2ul>(pcast<Packet8s, Packet2l>(a));
633struct type_casting_traits<numext::int16_t, numext::int32_t> {
634 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
637EIGEN_STRONG_INLINE Packet4i pcast<Packet8s, Packet4i>(
const Packet8s& a) {
639 return vmovl_s16(vget_low_s16(a));
642EIGEN_STRONG_INLINE Packet4i pcast<Packet4s, Packet4i>(
const Packet4s& a) {
646EIGEN_STRONG_INLINE Packet2i pcast<Packet4s, Packet2i>(
const Packet4s& a) {
648 return vget_low_s32(vmovl_s16(a));
652struct type_casting_traits<numext::int16_t, numext::uint32_t> {
653 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
656EIGEN_STRONG_INLINE Packet4ui pcast<Packet8s, Packet4ui>(
const Packet8s& a) {
657 return preinterpret<Packet4ui>(pcast<Packet8s, Packet4i>(a));
660EIGEN_STRONG_INLINE Packet4ui pcast<Packet4s, Packet4ui>(
const Packet4s& a) {
661 return preinterpret<Packet4ui>(pcast<Packet4s, Packet4i>(a));
664EIGEN_STRONG_INLINE Packet2ui pcast<Packet4s, Packet2ui>(
const Packet4s& a) {
665 return preinterpret<Packet2ui>(pcast<Packet4s, Packet2i>(a));
669struct type_casting_traits<numext::int16_t, numext::int8_t> {
670 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
673EIGEN_STRONG_INLINE Packet16c pcast<Packet8s, Packet16c>(
const Packet8s& a,
const Packet8s& b) {
674 return vcombine_s8(vmovn_s16(a), vmovn_s16(b));
677EIGEN_STRONG_INLINE Packet8c pcast<Packet8s, Packet8c>(
const Packet8s& a) {
681EIGEN_STRONG_INLINE Packet8c pcast<Packet4s, Packet8c>(
const Packet4s& a,
const Packet4s& b) {
682 return vmovn_s16(vcombine_s16(a, b));
685EIGEN_STRONG_INLINE Packet4c pcast<Packet4s, Packet4c>(
const Packet4s& a) {
686 const int8x8_t aa_s8x8 = pcast<Packet4s, Packet8c>(a, a);
687 return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
691struct type_casting_traits<numext::int16_t, numext::uint8_t> {
692 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
695EIGEN_STRONG_INLINE Packet16uc pcast<Packet8s, Packet16uc>(
const Packet8s& a,
const Packet8s& b) {
696 return preinterpret<Packet16uc>(pcast<Packet8s, Packet16c>(a, b));
699EIGEN_STRONG_INLINE Packet8uc pcast<Packet8s, Packet8uc>(
const Packet8s& a) {
700 return preinterpret<Packet8uc>(pcast<Packet8s, Packet8c>(a));
703EIGEN_STRONG_INLINE Packet8uc pcast<Packet4s, Packet8uc>(
const Packet4s& a,
const Packet4s& b) {
704 return preinterpret<Packet8uc>(pcast<Packet4s, Packet8c>(a, b));
707EIGEN_STRONG_INLINE Packet4uc pcast<Packet4s, Packet4uc>(
const Packet4s& a) {
708 return static_cast<Packet4uc
>(pcast<Packet4s, Packet4c>(a));
715struct type_casting_traits<numext::uint16_t, float> {
716 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
719EIGEN_STRONG_INLINE Packet4f pcast<Packet8us, Packet4f>(
const Packet8us& a) {
721 return vcvtq_f32_u32(vmovl_u16(vget_low_u16(a)));
724EIGEN_STRONG_INLINE Packet4f pcast<Packet4us, Packet4f>(
const Packet4us& a) {
725 return vcvtq_f32_u32(vmovl_u16(a));
728EIGEN_STRONG_INLINE Packet2f pcast<Packet4us, Packet2f>(
const Packet4us& a) {
730 return vcvt_f32_u32(vget_low_u32(vmovl_u16(a)));
734struct type_casting_traits<numext::uint16_t, numext::uint64_t> {
735 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
738EIGEN_STRONG_INLINE Packet2ul pcast<Packet8us, Packet2ul>(
const Packet8us& a) {
740 return vmovl_u32(vget_low_u32(vmovl_u16(vget_low_u16(a))));
744struct type_casting_traits<numext::uint16_t, numext::int64_t> {
745 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
748EIGEN_STRONG_INLINE Packet2l pcast<Packet8us, Packet2l>(
const Packet8us& a) {
749 return preinterpret<Packet2l>(pcast<Packet8us, Packet2ul>(a));
753struct type_casting_traits<numext::uint16_t, numext::uint32_t> {
754 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
757EIGEN_STRONG_INLINE Packet4ui pcast<Packet8us, Packet4ui>(
const Packet8us& a) {
759 return vmovl_u16(vget_low_u16(a));
762EIGEN_STRONG_INLINE Packet4ui pcast<Packet4us, Packet4ui>(
const Packet4us& a) {
766EIGEN_STRONG_INLINE Packet2ui pcast<Packet4us, Packet2ui>(
const Packet4us& a) {
768 return vget_low_u32(vmovl_u16(a));
772struct type_casting_traits<numext::uint16_t, numext::int32_t> {
773 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
776EIGEN_STRONG_INLINE Packet4i pcast<Packet8us, Packet4i>(
const Packet8us& a) {
777 return preinterpret<Packet4i>(pcast<Packet8us, Packet4ui>(a));
780EIGEN_STRONG_INLINE Packet4i pcast<Packet4us, Packet4i>(
const Packet4us& a) {
781 return preinterpret<Packet4i>(pcast<Packet4us, Packet4ui>(a));
784EIGEN_STRONG_INLINE Packet2i pcast<Packet4us, Packet2i>(
const Packet4us& a) {
785 return preinterpret<Packet2i>(pcast<Packet4us, Packet2ui>(a));
789struct type_casting_traits<numext::uint16_t, numext::uint8_t> {
790 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
793EIGEN_STRONG_INLINE Packet16uc pcast<Packet8us, Packet16uc>(
const Packet8us& a,
const Packet8us& b) {
794 return vcombine_u8(vmovn_u16(a), vmovn_u16(b));
797EIGEN_STRONG_INLINE Packet8uc pcast<Packet8us, Packet8uc>(
const Packet8us& a) {
801EIGEN_STRONG_INLINE Packet8uc pcast<Packet4us, Packet8uc>(
const Packet4us& a,
const Packet4us& b) {
802 return vmovn_u16(vcombine_u16(a, b));
805EIGEN_STRONG_INLINE Packet4uc pcast<Packet4us, Packet4uc>(
const Packet4us& a) {
806 uint8x8_t aa_u8x8 = pcast<Packet4us, Packet8uc>(a, a);
807 return vget_lane_u32(vreinterpret_u32_u8(aa_u8x8), 0);
811struct type_casting_traits<numext::uint16_t, numext::int8_t> {
812 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
815EIGEN_STRONG_INLINE Packet16c pcast<Packet8us, Packet16c>(
const Packet8us& a,
const Packet8us& b) {
816 return preinterpret<Packet16c>(pcast<Packet8us, Packet16uc>(a, b));
819EIGEN_STRONG_INLINE Packet8c pcast<Packet8us, Packet8c>(
const Packet8us& a) {
820 return preinterpret<Packet8c>(pcast<Packet8us, Packet8uc>(a));
823EIGEN_STRONG_INLINE Packet8c pcast<Packet4us, Packet8c>(
const Packet4us& a,
const Packet4us& b) {
824 return preinterpret<Packet8c>(pcast<Packet4us, Packet8uc>(a, b));
827EIGEN_STRONG_INLINE Packet4c pcast<Packet4us, Packet4c>(
const Packet4us& a) {
828 return static_cast<Packet4c
>(pcast<Packet4us, Packet4uc>(a));
835struct type_casting_traits<numext::int32_t, float> {
836 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
839EIGEN_STRONG_INLINE Packet4f pcast<Packet4i, Packet4f>(
const Packet4i& a) {
840 return vcvtq_f32_s32(a);
843EIGEN_STRONG_INLINE Packet2f pcast<Packet2i, Packet2f>(
const Packet2i& a) {
844 return vcvt_f32_s32(a);
848struct type_casting_traits<numext::int32_t, numext::int64_t> {
849 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
852EIGEN_STRONG_INLINE Packet2l pcast<Packet4i, Packet2l>(
const Packet4i& a) {
854 return vmovl_s32(vget_low_s32(a));
857EIGEN_STRONG_INLINE Packet2l pcast<Packet2i, Packet2l>(
const Packet2i& a) {
862struct type_casting_traits<numext::int32_t, numext::uint64_t> {
863 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
866EIGEN_STRONG_INLINE Packet2ul pcast<Packet4i, Packet2ul>(
const Packet4i& a) {
867 return preinterpret<Packet2ul>(pcast<Packet4i, Packet2l>(a));
870EIGEN_STRONG_INLINE Packet2ul pcast<Packet2i, Packet2ul>(
const Packet2i& a) {
871 return preinterpret<Packet2ul>(pcast<Packet2i, Packet2l>(a));
875struct type_casting_traits<numext::int32_t, numext::int16_t> {
876 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
879EIGEN_STRONG_INLINE Packet8s pcast<Packet4i, Packet8s>(
const Packet4i& a,
const Packet4i& b) {
880 return vcombine_s16(vmovn_s32(a), vmovn_s32(b));
883EIGEN_STRONG_INLINE Packet4s pcast<Packet4i, Packet4s>(
const Packet4i& a) {
887EIGEN_STRONG_INLINE Packet4s pcast<Packet2i, Packet4s>(
const Packet2i& a,
const Packet2i& b) {
888 return vmovn_s32(vcombine_s32(a, b));
892struct type_casting_traits<numext::int32_t, numext::uint16_t> {
893 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
896EIGEN_STRONG_INLINE Packet8us pcast<Packet4i, Packet8us>(
const Packet4i& a,
const Packet4i& b) {
897 return vcombine_u16(vmovn_u32(vreinterpretq_u32_s32(a)), vmovn_u32(vreinterpretq_u32_s32(b)));
900EIGEN_STRONG_INLINE Packet4us pcast<Packet4i, Packet4us>(
const Packet4i& a) {
901 return vmovn_u32(vreinterpretq_u32_s32(a));
904EIGEN_STRONG_INLINE Packet4us pcast<Packet2i, Packet4us>(
const Packet2i& a,
const Packet2i& b) {
905 return vmovn_u32(vreinterpretq_u32_s32(vcombine_s32(a, b)));
909struct type_casting_traits<numext::int32_t, numext::int8_t> {
910 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
913EIGEN_STRONG_INLINE Packet16c pcast<Packet4i, Packet16c>(
const Packet4i& a,
const Packet4i& b,
const Packet4i& c,
915 const int16x8_t ab_s16 = pcast<Packet4i, Packet8s>(a, b);
916 const int16x8_t cd_s16 = pcast<Packet4i, Packet8s>(c, d);
917 return vcombine_s8(vmovn_s16(ab_s16), vmovn_s16(cd_s16));
920EIGEN_STRONG_INLINE Packet8c pcast<Packet4i, Packet8c>(
const Packet4i& a,
const Packet4i& b) {
921 const int16x8_t ab_s16 = pcast<Packet4i, Packet8s>(a, b);
922 return vmovn_s16(ab_s16);
925EIGEN_STRONG_INLINE Packet8c pcast<Packet2i, Packet8c>(
const Packet2i& a,
const Packet2i& b,
const Packet2i& c,
927 const int16x4_t ab_s16 = vmovn_s32(vcombine_s32(a, b));
928 const int16x4_t cd_s16 = vmovn_s32(vcombine_s32(c, d));
929 return vmovn_s16(vcombine_s16(ab_s16, cd_s16));
932EIGEN_STRONG_INLINE Packet4c pcast<Packet4i, Packet4c>(
const Packet4i& a) {
933 const int16x4_t a_s16x4 = vmovn_s32(a);
934 const int16x8_t aa_s16x8 = vcombine_s16(a_s16x4, a_s16x4);
935 const int8x8_t aa_s8x8 = vmovn_s16(aa_s16x8);
936 return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
940struct type_casting_traits<numext::int32_t, numext::uint8_t> {
941 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
944EIGEN_STRONG_INLINE Packet16uc pcast<Packet4i, Packet16uc>(
const Packet4i& a,
const Packet4i& b,
const Packet4i& c,
946 return preinterpret<Packet16uc>(pcast<Packet4i, Packet16c>(a, b, c, d));
949EIGEN_STRONG_INLINE Packet8uc pcast<Packet4i, Packet8uc>(
const Packet4i& a,
const Packet4i& b) {
950 return preinterpret<Packet8uc>(pcast<Packet4i, Packet8c>(a, b));
953EIGEN_STRONG_INLINE Packet8uc pcast<Packet2i, Packet8uc>(
const Packet2i& a,
const Packet2i& b,
const Packet2i& c,
955 return preinterpret<Packet8uc>(pcast<Packet2i, Packet8c>(a, b, c, d));
958EIGEN_STRONG_INLINE Packet4uc pcast<Packet4i, Packet4uc>(
const Packet4i& a) {
959 return static_cast<Packet4uc
>(pcast<Packet4i, Packet4c>(a));
966struct type_casting_traits<numext::uint32_t, float> {
967 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
970EIGEN_STRONG_INLINE Packet4f pcast<Packet4ui, Packet4f>(
const Packet4ui& a) {
971 return vcvtq_f32_u32(a);
974EIGEN_STRONG_INLINE Packet2f pcast<Packet2ui, Packet2f>(
const Packet2ui& a) {
975 return vcvt_f32_u32(a);
979struct type_casting_traits<numext::uint32_t, numext::uint64_t> {
980 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
983EIGEN_STRONG_INLINE Packet2ul pcast<Packet4ui, Packet2ul>(
const Packet4ui& a) {
985 return vmovl_u32(vget_low_u32(a));
988EIGEN_STRONG_INLINE Packet2ul pcast<Packet2ui, Packet2ul>(
const Packet2ui& a) {
993struct type_casting_traits<numext::uint32_t, numext::int64_t> {
994 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
997EIGEN_STRONG_INLINE Packet2l pcast<Packet4ui, Packet2l>(
const Packet4ui& a) {
998 return preinterpret<Packet2l>(pcast<Packet4ui, Packet2ul>(a));
1001EIGEN_STRONG_INLINE Packet2l pcast<Packet2ui, Packet2l>(
const Packet2ui& a) {
1002 return preinterpret<Packet2l>(pcast<Packet2ui, Packet2ul>(a));
1006struct type_casting_traits<numext::uint32_t, numext::uint16_t> {
1007 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1010EIGEN_STRONG_INLINE Packet8us pcast<Packet4ui, Packet8us>(
const Packet4ui& a,
const Packet4ui& b) {
1011 return vcombine_u16(vmovn_u32(a), vmovn_u32(b));
1014EIGEN_STRONG_INLINE Packet4us pcast<Packet2ui, Packet4us>(
const Packet2ui& a,
const Packet2ui& b) {
1015 return vmovn_u32(vcombine_u32(a, b));
1018EIGEN_STRONG_INLINE Packet4us pcast<Packet4ui, Packet4us>(
const Packet4ui& a) {
1019 return vmovn_u32(a);
1023struct type_casting_traits<numext::uint32_t, numext::int16_t> {
1024 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1027EIGEN_STRONG_INLINE Packet8s pcast<Packet4ui, Packet8s>(
const Packet4ui& a,
const Packet4ui& b) {
1028 return preinterpret<Packet8s>(pcast<Packet4ui, Packet8us>(a, b));
1031EIGEN_STRONG_INLINE Packet4s pcast<Packet2ui, Packet4s>(
const Packet2ui& a,
const Packet2ui& b) {
1032 return preinterpret<Packet4s>(pcast<Packet2ui, Packet4us>(a, b));
1035EIGEN_STRONG_INLINE Packet4s pcast<Packet4ui, Packet4s>(
const Packet4ui& a) {
1036 return preinterpret<Packet4s>(pcast<Packet4ui, Packet4us>(a));
1040struct type_casting_traits<numext::uint32_t, numext::uint8_t> {
1041 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1044EIGEN_STRONG_INLINE Packet16uc pcast<Packet4ui, Packet16uc>(
const Packet4ui& a,
const Packet4ui& b,
const Packet4ui& c,
1045 const Packet4ui& d) {
1046 const uint16x8_t ab_u16 = vcombine_u16(vmovn_u32(a), vmovn_u32(b));
1047 const uint16x8_t cd_u16 = vcombine_u16(vmovn_u32(c), vmovn_u32(d));
1048 return vcombine_u8(vmovn_u16(ab_u16), vmovn_u16(cd_u16));
1051EIGEN_STRONG_INLINE Packet8uc pcast<Packet4ui, Packet8uc>(
const Packet4ui& a,
const Packet4ui& b) {
1052 const uint16x8_t ab_u16 = vcombine_u16(vmovn_u32(a), vmovn_u32(b));
1053 return vmovn_u16(ab_u16);
1056EIGEN_STRONG_INLINE Packet8uc pcast<Packet2ui, Packet8uc>(
const Packet2ui& a,
const Packet2ui& b,
const Packet2ui& c,
1057 const Packet2ui& d) {
1058 const uint16x4_t ab_u16 = vmovn_u32(vcombine_u32(a, b));
1059 const uint16x4_t cd_u16 = vmovn_u32(vcombine_u32(c, d));
1060 return vmovn_u16(vcombine_u16(ab_u16, cd_u16));
1063EIGEN_STRONG_INLINE Packet4uc pcast<Packet4ui, Packet4uc>(
const Packet4ui& a) {
1064 const uint16x4_t a_u16x4 = vmovn_u32(a);
1065 const uint16x8_t aa_u16x8 = vcombine_u16(a_u16x4, a_u16x4);
1066 const uint8x8_t aa_u8x8 = vmovn_u16(aa_u16x8);
1067 return vget_lane_u32(vreinterpret_u32_u8(aa_u8x8), 0);
1071struct type_casting_traits<numext::uint32_t, numext::int8_t> {
1072 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1075EIGEN_STRONG_INLINE Packet16c pcast<Packet4ui, Packet16c>(
const Packet4ui& a,
const Packet4ui& b,
const Packet4ui& c,
1076 const Packet4ui& d) {
1077 return preinterpret<Packet16c>(pcast<Packet4ui, Packet16uc>(a, b, c, d));
1080EIGEN_STRONG_INLINE Packet8c pcast<Packet4ui, Packet8c>(
const Packet4ui& a,
const Packet4ui& b) {
1081 return preinterpret<Packet8c>(pcast<Packet4ui, Packet8uc>(a, b));
1084EIGEN_STRONG_INLINE Packet8c pcast<Packet2ui, Packet8c>(
const Packet2ui& a,
const Packet2ui& b,
const Packet2ui& c,
1085 const Packet2ui& d) {
1086 return preinterpret<Packet8c>(pcast<Packet2ui, Packet8uc>(a, b, c, d));
1089EIGEN_STRONG_INLINE Packet4c pcast<Packet4ui, Packet4c>(
const Packet4ui& a) {
1090 return static_cast<Packet4c
>(pcast<Packet4ui, Packet4uc>(a));
1097struct type_casting_traits<numext::int64_t, float> {
1098 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1102EIGEN_STRONG_INLINE Packet4f pcast<Packet2l, Packet4f>(
const Packet2l& a,
const Packet2l& b) {
1104 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_s64(a)), vcvt_f32_f64(vcvtq_f64_s64(b)));
1106 EIGEN_ALIGN_MAX int64_t lvals[4];
1108 pstore(lvals + 2, b);
1109 EIGEN_ALIGN_MAX
float fvals[4] = {
static_cast<float>(lvals[0]),
static_cast<float>(lvals[1]),
1110 static_cast<float>(lvals[2]),
static_cast<float>(lvals[3])};
1111 return pload<Packet4f>(fvals);
1116EIGEN_STRONG_INLINE Packet2f pcast<Packet2l, Packet2f>(
const Packet2l& a) {
1118 return vcvt_f32_f64(vcvtq_f64_s64(a));
1120 EIGEN_ALIGN_MAX int64_t lvals[2];
1122 EIGEN_ALIGN_MAX
float fvals[2] = {
static_cast<float>(lvals[0]),
static_cast<float>(lvals[1])};
1123 return pload<Packet2f>(fvals);
1128struct type_casting_traits<numext::int64_t, numext::int32_t> {
1129 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1132EIGEN_STRONG_INLINE Packet4i pcast<Packet2l, Packet4i>(
const Packet2l& a,
const Packet2l& b) {
1133 return vcombine_s32(vmovn_s64(a), vmovn_s64(b));
1136EIGEN_STRONG_INLINE Packet2i pcast<Packet2l, Packet2i>(
const Packet2l& a) {
1137 return vmovn_s64(a);
1141struct type_casting_traits<numext::int64_t, numext::uint32_t> {
1142 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1145EIGEN_STRONG_INLINE Packet4ui pcast<Packet2l, Packet4ui>(
const Packet2l& a,
const Packet2l& b) {
1146 return vcombine_u32(vmovn_u64(vreinterpretq_u64_s64(a)), vmovn_u64(vreinterpretq_u64_s64(b)));
1149EIGEN_STRONG_INLINE Packet2ui pcast<Packet2l, Packet2ui>(
const Packet2l& a) {
1150 return vmovn_u64(vreinterpretq_u64_s64(a));
1154struct type_casting_traits<numext::int64_t, numext::int16_t> {
1155 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1158EIGEN_STRONG_INLINE Packet8s pcast<Packet2l, Packet8s>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1159 const Packet2l& d) {
1160 const int32x4_t ab_s32 = pcast<Packet2l, Packet4i>(a, b);
1161 const int32x4_t cd_s32 = pcast<Packet2l, Packet4i>(c, d);
1162 return vcombine_s16(vmovn_s32(ab_s32), vmovn_s32(cd_s32));
1165EIGEN_STRONG_INLINE Packet4s pcast<Packet2l, Packet4s>(
const Packet2l& a,
const Packet2l& b) {
1166 const int32x4_t ab_s32 = pcast<Packet2l, Packet4i>(a, b);
1167 return vmovn_s32(ab_s32);
1171struct type_casting_traits<numext::int64_t, numext::uint16_t> {
1172 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1175EIGEN_STRONG_INLINE Packet8us pcast<Packet2l, Packet8us>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1176 const Packet2l& d) {
1177 return preinterpret<Packet8us>(pcast<Packet2l, Packet8s>(a, b, c, d));
1180EIGEN_STRONG_INLINE Packet4us pcast<Packet2l, Packet4us>(
const Packet2l& a,
const Packet2l& b) {
1181 return preinterpret<Packet4us>(pcast<Packet2l, Packet4s>(a, b));
1185struct type_casting_traits<numext::int64_t, numext::int8_t> {
1186 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1189EIGEN_STRONG_INLINE Packet16c pcast<Packet2l, Packet16c>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1190 const Packet2l& d,
const Packet2l& e,
const Packet2l& f,
1191 const Packet2l& g,
const Packet2l& h) {
1192 const int16x8_t abcd_s16 = pcast<Packet2l, Packet8s>(a, b, c, d);
1193 const int16x8_t efgh_s16 = pcast<Packet2l, Packet8s>(e, f, g, h);
1194 return vcombine_s8(vmovn_s16(abcd_s16), vmovn_s16(efgh_s16));
1197EIGEN_STRONG_INLINE Packet8c pcast<Packet2l, Packet8c>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1198 const Packet2l& d) {
1199 const int16x8_t abcd_s16 = pcast<Packet2l, Packet8s>(a, b, c, d);
1200 return vmovn_s16(abcd_s16);
1203EIGEN_STRONG_INLINE Packet4c pcast<Packet2l, Packet4c>(
const Packet2l& a,
const Packet2l& b) {
1204 const int16x4_t ab_s16 = pcast<Packet2l, Packet4s>(a, b);
1205 const int16x8_t abab_s16 = vcombine_s16(ab_s16, ab_s16);
1206 const int8x8_t abab_s8 = vmovn_s16(abab_s16);
1207 return vget_lane_s32(vreinterpret_s32_s8(abab_s8), 0);
1211struct type_casting_traits<numext::int64_t, numext::uint8_t> {
1212 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1215EIGEN_STRONG_INLINE Packet16uc pcast<Packet2l, Packet16uc>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1216 const Packet2l& d,
const Packet2l& e,
const Packet2l& f,
1217 const Packet2l& g,
const Packet2l& h) {
1218 const uint16x8_t abcd_u16 = pcast<Packet2l, Packet8us>(a, b, c, d);
1219 const uint16x8_t efgh_u16 = pcast<Packet2l, Packet8us>(e, f, g, h);
1220 return vcombine_u8(vmovn_u16(abcd_u16), vmovn_u16(efgh_u16));
1223EIGEN_STRONG_INLINE Packet8uc pcast<Packet2l, Packet8uc>(
const Packet2l& a,
const Packet2l& b,
const Packet2l& c,
1224 const Packet2l& d) {
1225 return preinterpret<Packet8uc>(pcast<Packet2l, Packet8c>(a, b, c, d));
1228EIGEN_STRONG_INLINE Packet4uc pcast<Packet2l, Packet4uc>(
const Packet2l& a,
const Packet2l& b) {
1229 return static_cast<Packet4uc
>(pcast<Packet2l, Packet4c>(a, b));
1236struct type_casting_traits<numext::uint64_t, float> {
1237 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1240EIGEN_STRONG_INLINE Packet4f pcast<Packet2ul, Packet4f>(
const Packet2ul& a,
const Packet2ul& b) {
1242 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_u64(a)), vcvt_f32_f64(vcvtq_f64_u64(b)));
1244 EIGEN_ALIGN_MAX uint64_t uvals[4];
1246 pstore(uvals + 2, b);
1247 EIGEN_ALIGN_MAX
float fvals[4] = {
static_cast<float>(uvals[0]),
static_cast<float>(uvals[1]),
1248 static_cast<float>(uvals[2]),
static_cast<float>(uvals[3])};
1249 return pload<Packet4f>(fvals);
1253EIGEN_STRONG_INLINE Packet2f pcast<Packet2ul, Packet2f>(
const Packet2ul& a) {
1255 return vcvt_f32_f64(vcvtq_f64_u64(a));
1257 EIGEN_ALIGN_MAX uint64_t uvals[2];
1259 EIGEN_ALIGN_MAX
float fvals[2] = {
static_cast<float>(uvals[0]),
static_cast<float>(uvals[1])};
1260 return pload<Packet2f>(fvals);
1265struct type_casting_traits<numext::uint64_t, numext::uint32_t> {
1266 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1269EIGEN_STRONG_INLINE Packet4ui pcast<Packet2ul, Packet4ui>(
const Packet2ul& a,
const Packet2ul& b) {
1270 return vcombine_u32(vmovn_u64(a), vmovn_u64(b));
1273EIGEN_STRONG_INLINE Packet2ui pcast<Packet2ul, Packet2ui>(
const Packet2ul& a) {
1274 return vmovn_u64(a);
1278struct type_casting_traits<numext::uint64_t, numext::int32_t> {
1279 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1282EIGEN_STRONG_INLINE Packet4i pcast<Packet2ul, Packet4i>(
const Packet2ul& a,
const Packet2ul& b) {
1283 return preinterpret<Packet4i>(pcast<Packet2ul, Packet4ui>(a, b));
1286EIGEN_STRONG_INLINE Packet2i pcast<Packet2ul, Packet2i>(
const Packet2ul& a) {
1287 return preinterpret<Packet2i>(pcast<Packet2ul, Packet2ui>(a));
1291struct type_casting_traits<numext::uint64_t, numext::uint16_t> {
1292 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1295EIGEN_STRONG_INLINE Packet8us pcast<Packet2ul, Packet8us>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1296 const Packet2ul& d) {
1297 const uint16x4_t ab_u16 = vmovn_u32(vcombine_u32(vmovn_u64(a), vmovn_u64(b)));
1298 const uint16x4_t cd_u16 = vmovn_u32(vcombine_u32(vmovn_u64(c), vmovn_u64(d)));
1299 return vcombine_u16(ab_u16, cd_u16);
1302EIGEN_STRONG_INLINE Packet4us pcast<Packet2ul, Packet4us>(
const Packet2ul& a,
const Packet2ul& b) {
1303 return vmovn_u32(vcombine_u32(vmovn_u64(a), vmovn_u64(b)));
1307struct type_casting_traits<numext::uint64_t, numext::int16_t> {
1308 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1311EIGEN_STRONG_INLINE Packet8s pcast<Packet2ul, Packet8s>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1312 const Packet2ul& d) {
1313 return preinterpret<Packet8s>(pcast<Packet2ul, Packet8us>(a, b, c, d));
1316EIGEN_STRONG_INLINE Packet4s pcast<Packet2ul, Packet4s>(
const Packet2ul& a,
const Packet2ul& b) {
1317 return preinterpret<Packet4s>(pcast<Packet2ul, Packet4us>(a, b));
1321struct type_casting_traits<numext::uint64_t, numext::uint8_t> {
1322 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1325EIGEN_STRONG_INLINE Packet16uc pcast<Packet2ul, Packet16uc>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1326 const Packet2ul& d,
const Packet2ul& e,
const Packet2ul& f,
1327 const Packet2ul& g,
const Packet2ul& h) {
1328 const uint16x8_t abcd_u16 = pcast<Packet2ul, Packet8us>(a, b, c, d);
1329 const uint16x8_t efgh_u16 = pcast<Packet2ul, Packet8us>(e, f, g, h);
1330 return vcombine_u8(vmovn_u16(abcd_u16), vmovn_u16(efgh_u16));
1333EIGEN_STRONG_INLINE Packet8uc pcast<Packet2ul, Packet8uc>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1334 const Packet2ul& d) {
1335 const uint16x8_t abcd_u16 = pcast<Packet2ul, Packet8us>(a, b, c, d);
1336 return vmovn_u16(abcd_u16);
1339EIGEN_STRONG_INLINE Packet4uc pcast<Packet2ul, Packet4uc>(
const Packet2ul& a,
const Packet2ul& b) {
1340 const uint16x4_t ab_u16 = pcast<Packet2ul, Packet4us>(a, b);
1341 const uint16x8_t abab_u16 = vcombine_u16(ab_u16, ab_u16);
1342 const uint8x8_t abab_u8 = vmovn_u16(abab_u16);
1343 return vget_lane_u32(vreinterpret_u32_u8(abab_u8), 0);
1347struct type_casting_traits<numext::uint64_t, numext::int8_t> {
1348 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1351EIGEN_STRONG_INLINE Packet16c pcast<Packet2ul, Packet16c>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1352 const Packet2ul& d,
const Packet2ul& e,
const Packet2ul& f,
1353 const Packet2ul& g,
const Packet2ul& h) {
1354 return preinterpret<Packet16c>(pcast<Packet2ul, Packet16uc>(a, b, c, d, e, f, g, h));
1357EIGEN_STRONG_INLINE Packet8c pcast<Packet2ul, Packet8c>(
const Packet2ul& a,
const Packet2ul& b,
const Packet2ul& c,
1358 const Packet2ul& d) {
1359 return preinterpret<Packet8c>(pcast<Packet2ul, Packet8uc>(a, b, c, d));
1362EIGEN_STRONG_INLINE Packet4c pcast<Packet2ul, Packet4c>(
const Packet2ul& a,
const Packet2ul& b) {
1363 return static_cast<Packet4c
>(pcast<Packet2ul, Packet4uc>(a, b));
1373EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet2l>(
const Packet2l& a) {
1374 return Packet2d(vreinterpretq_f64_s64(a));
1377EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet2ul>(
const Packet2ul& a) {
1378 return Packet2d(vreinterpretq_f64_u64(a));
1381EIGEN_STRONG_INLINE Packet2l preinterpret<Packet2l, Packet2d>(
const Packet2d& a) {
1382 return Packet2l(vreinterpretq_s64_f64(a));
1385EIGEN_STRONG_INLINE Packet2ul preinterpret<Packet2ul, Packet2d>(
const Packet2d& a) {
1386 return Packet2ul(vreinterpretq_u64_f64(a));
1389EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d, Packet4i>(
const Packet4i& a) {
1390 return Packet2d(vreinterpretq_f64_s32(a));
1393EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i, Packet2d>(
const Packet2d& a) {
1394 return Packet4i(vreinterpretq_s32_f64(a));
1398struct type_casting_traits<double, float> {
1399 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1402EIGEN_STRONG_INLINE Packet4f pcast<Packet2d, Packet4f>(
const Packet2d& a,
const Packet2d& b) {
1403 return vcombine_f32(vcvt_f32_f64(a), vcvt_f32_f64(b));
1406EIGEN_STRONG_INLINE Packet2f pcast<Packet2d, Packet2f>(
const Packet2d& a) {
1407 return vcvt_f32_f64(a);
1411struct type_casting_traits<double, numext::int64_t> {
1412 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
1415EIGEN_STRONG_INLINE Packet2l pcast<Packet2d, Packet2l>(
const Packet2d& a) {
1416 return vcvtq_s64_f64(a);
1420struct type_casting_traits<double, numext::uint64_t> {
1421 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
1424EIGEN_STRONG_INLINE Packet2ul pcast<Packet2d, Packet2ul>(
const Packet2d& a) {
1425 return vcvtq_u64_f64(a);
1429struct type_casting_traits<double, numext::int32_t> {
1430 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1433EIGEN_STRONG_INLINE Packet4i pcast<Packet2d, Packet4i>(
const Packet2d& a,
const Packet2d& b) {
1434 return vcombine_s32(vmovn_s64(vcvtq_s64_f64(a)), vmovn_s64(vcvtq_s64_f64(b)));
1437EIGEN_STRONG_INLINE Packet2i pcast<Packet2d, Packet2i>(
const Packet2d& a) {
1438 return vmovn_s64(vcvtq_s64_f64(a));
1442struct type_casting_traits<double, numext::uint32_t> {
1443 enum { VectorizedCast = 1, SrcCoeffRatio = 2, TgtCoeffRatio = 1 };
1446EIGEN_STRONG_INLINE Packet4ui pcast<Packet2d, Packet4ui>(
const Packet2d& a,
const Packet2d& b) {
1447 return vcombine_u32(vmovn_u64(vcvtq_u64_f64(a)), vmovn_u64(vcvtq_u64_f64(b)));
1450EIGEN_STRONG_INLINE Packet2ui pcast<Packet2d, Packet2ui>(
const Packet2d& a) {
1451 return vmovn_u64(vcvtq_u64_f64(a));
1455struct type_casting_traits<double, numext::int16_t> {
1456 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1459EIGEN_STRONG_INLINE Packet8s pcast<Packet2d, Packet8s>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1460 const Packet2d& d) {
1461 const int32x4_t ab_s32 = pcast<Packet2d, Packet4i>(a, b);
1462 const int32x4_t cd_s32 = pcast<Packet2d, Packet4i>(c, d);
1463 return vcombine_s16(vmovn_s32(ab_s32), vmovn_s32(cd_s32));
1466EIGEN_STRONG_INLINE Packet4s pcast<Packet2d, Packet4s>(
const Packet2d& a,
const Packet2d& b) {
1467 const int32x4_t ab_s32 = pcast<Packet2d, Packet4i>(a, b);
1468 return vmovn_s32(ab_s32);
1472struct type_casting_traits<double, numext::uint16_t> {
1473 enum { VectorizedCast = 1, SrcCoeffRatio = 4, TgtCoeffRatio = 1 };
1476EIGEN_STRONG_INLINE Packet8us pcast<Packet2d, Packet8us>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1477 const Packet2d& d) {
1478 return preinterpret<Packet8us>(pcast<Packet2d, Packet8s>(a, b, c, d));
1481EIGEN_STRONG_INLINE Packet4us pcast<Packet2d, Packet4us>(
const Packet2d& a,
const Packet2d& b) {
1482 return preinterpret<Packet4us>(pcast<Packet2d, Packet4s>(a, b));
1486struct type_casting_traits<double, numext::int8_t> {
1487 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1490EIGEN_STRONG_INLINE Packet16c pcast<Packet2d, Packet16c>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1491 const Packet2d& d,
const Packet2d& e,
const Packet2d& f,
1492 const Packet2d& g,
const Packet2d& h) {
1493 const int16x8_t abcd_s16 = pcast<Packet2d, Packet8s>(a, b, c, d);
1494 const int16x8_t efgh_s16 = pcast<Packet2d, Packet8s>(e, f, g, h);
1495 return vcombine_s8(vmovn_s16(abcd_s16), vmovn_s16(efgh_s16));
1498EIGEN_STRONG_INLINE Packet8c pcast<Packet2d, Packet8c>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1499 const Packet2d& d) {
1500 const int16x8_t abcd_s16 = pcast<Packet2d, Packet8s>(a, b, c, d);
1501 return vmovn_s16(abcd_s16);
1504EIGEN_STRONG_INLINE Packet4c pcast<Packet2d, Packet4c>(
const Packet2d& a,
const Packet2d& b) {
1505 const int32x4_t ab_s32 = pcast<Packet2d, Packet4i>(a, b);
1506 return pcast<Packet4i, Packet4c>(ab_s32);
1510struct type_casting_traits<double, numext::uint8_t> {
1511 enum { VectorizedCast = 1, SrcCoeffRatio = 8, TgtCoeffRatio = 1 };
1514EIGEN_STRONG_INLINE Packet16uc pcast<Packet2d, Packet16uc>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1515 const Packet2d& d,
const Packet2d& e,
const Packet2d& f,
1516 const Packet2d& g,
const Packet2d& h) {
1517 const uint16x8_t abcd_u16 = pcast<Packet2d, Packet8us>(a, b, c, d);
1518 const uint16x8_t efgh_u16 = pcast<Packet2d, Packet8us>(e, f, g, h);
1519 return vcombine_u8(vmovn_u16(abcd_u16), vmovn_u16(efgh_u16));
1522EIGEN_STRONG_INLINE Packet8uc pcast<Packet2d, Packet8uc>(
const Packet2d& a,
const Packet2d& b,
const Packet2d& c,
1523 const Packet2d& d) {
1524 return preinterpret<Packet8uc>(pcast<Packet2d, Packet8c>(a, b, c, d));
1527EIGEN_STRONG_INLINE Packet4uc pcast<Packet2d, Packet4uc>(
const Packet2d& a,
const Packet2d& b) {
1528 return static_cast<Packet4uc
>(pcast<Packet2d, Packet4c>(a, b));
1532struct type_casting_traits<float, double> {
1533 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
1536EIGEN_STRONG_INLINE Packet2d pcast<Packet4f, Packet2d>(
const Packet4f& a) {
1538 return vcvt_f64_f32(vget_low_f32(a));
1541EIGEN_STRONG_INLINE Packet2d pcast<Packet2f, Packet2d>(
const Packet2f& a) {
1542 return vcvt_f64_f32(a);
1546struct type_casting_traits<numext::int8_t, double> {
1547 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
1550EIGEN_STRONG_INLINE Packet2d pcast<Packet16c, Packet2d>(
const Packet16c& a) {
1553 Packet2f tmp = pcast<Packet8c, Packet2f>(vget_low_s8(a));
1554 return vcvt_f64_f32(tmp);
1558struct type_casting_traits<numext::uint8_t, double> {
1559 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 8 };
1562EIGEN_STRONG_INLINE Packet2d pcast<Packet16uc, Packet2d>(
const Packet16uc& a) {
1564 Packet2f tmp = pcast<Packet8uc, Packet2f>(vget_low_u8(a));
1565 return vcvt_f64_f32(tmp);
1569struct type_casting_traits<numext::int16_t, double> {
1570 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
1573EIGEN_STRONG_INLINE Packet2d pcast<Packet8s, Packet2d>(
const Packet8s& a) {
1575 Packet2f tmp = pcast<Packet4s, Packet2f>(vget_low_s16(a));
1576 return vcvt_f64_f32(tmp);
1580struct type_casting_traits<numext::uint16_t, double> {
1581 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 4 };
1584EIGEN_STRONG_INLINE Packet2d pcast<Packet8us, Packet2d>(
const Packet8us& a) {
1586 Packet2f tmp = pcast<Packet4us, Packet2f>(vget_low_u16(a));
1587 return vcvt_f64_f32(tmp);
1591struct type_casting_traits<numext::int32_t, double> {
1592 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
1595EIGEN_STRONG_INLINE Packet2d pcast<Packet4i, Packet2d>(
const Packet4i& a) {
1597 return vcvtq_f64_s64(vmovl_s32(vget_low_s32(a)));
1600EIGEN_STRONG_INLINE Packet2d pcast<Packet2i, Packet2d>(
const Packet2i& a) {
1601 return vcvtq_f64_s64(vmovl_s32(a));
1605struct type_casting_traits<numext::uint32_t, double> {
1606 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 2 };
1609EIGEN_STRONG_INLINE Packet2d pcast<Packet4ui, Packet2d>(
const Packet4ui& a) {
1611 return vcvtq_f64_u64(vmovl_u32(vget_low_u32(a)));
1614EIGEN_STRONG_INLINE Packet2d pcast<Packet2ui, Packet2d>(
const Packet2ui& a) {
1615 return vcvtq_f64_u64(vmovl_u32(a));
1619struct type_casting_traits<numext::int64_t, double> {
1620 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
1623EIGEN_STRONG_INLINE Packet2d pcast<Packet2l, Packet2d>(
const Packet2l& a) {
1624 return vcvtq_f64_s64(a);
1628struct type_casting_traits<numext::uint64_t, double> {
1629 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
1632EIGEN_STRONG_INLINE Packet2d pcast<Packet2ul, Packet2d>(
const Packet2ul& a) {
1633 return vcvtq_f64_u64(a);
Namespace containing all symbols from the Eigen library.
Definition Core:137