12 #ifndef EIGEN_PACKET_MATH_NEON_H
13 #define EIGEN_PACKET_MATH_NEON_H
15 #include "../../InternalHeaderCheck.h"
21 #ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
22 #define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 8
25 #ifndef EIGEN_HAS_SINGLE_INSTRUCTION_MADD
26 #define EIGEN_HAS_SINGLE_INSTRUCTION_MADD
29 #ifndef EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS
31 #define EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS 32
33 #define EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS 16
37 #if EIGEN_COMP_MSVC_STRICT
43 typedef eigen_packet_wrapper<float32x2_t,0>
Packet2f;
44 typedef eigen_packet_wrapper<float32x4_t,1>
Packet4f;
45 typedef eigen_packet_wrapper<int32_t ,2>
Packet4c;
46 typedef eigen_packet_wrapper<int8x8_t ,3>
Packet8c;
47 typedef eigen_packet_wrapper<int8x16_t ,4>
Packet16c;
48 typedef eigen_packet_wrapper<uint32_t ,5>
Packet4uc;
49 typedef eigen_packet_wrapper<uint8x8_t ,6>
Packet8uc;
50 typedef eigen_packet_wrapper<uint8x16_t ,7>
Packet16uc;
51 typedef eigen_packet_wrapper<int16x4_t ,8>
Packet4s;
52 typedef eigen_packet_wrapper<int16x8_t ,9>
Packet8s;
53 typedef eigen_packet_wrapper<uint16x4_t ,10>
Packet4us;
54 typedef eigen_packet_wrapper<uint16x8_t ,11>
Packet8us;
55 typedef eigen_packet_wrapper<int32x2_t ,12>
Packet2i;
56 typedef eigen_packet_wrapper<int32x4_t ,13>
Packet4i;
57 typedef eigen_packet_wrapper<uint32x2_t ,14>
Packet2ui;
58 typedef eigen_packet_wrapper<uint32x4_t ,15>
Packet4ui;
59 typedef eigen_packet_wrapper<int64x2_t ,16>
Packet2l;
60 typedef eigen_packet_wrapper<uint64x2_t ,17>
Packet2ul;
63 float from[4] = {
a,
b,
c, d};
64 return vld1q_f32(from);
68 float from[2] = {
a,
b};
69 return vld1_f32(from);
76 typedef eigen_packet_wrapper<int32_t ,2>
Packet4c;
79 typedef eigen_packet_wrapper<uint32_t ,5>
Packet4uc;
99 const float*
a =
reinterpret_cast<const float*
>(&
m);
108 template<
bool interleave>
111 const float*
a =
reinterpret_cast<const float*
>(&
m);
112 const float*
b =
reinterpret_cast<const float*
>(&
n);
120 const float*
a =
reinterpret_cast<const float*
>(&
m);
121 const float*
b =
reinterpret_cast<const float*
>(&
n);
152 #define vec4f_duplane(a, p) \
153 Packet4f(vdupq_lane_f32(vget_low_f32(a), p))
155 #define EIGEN_DECLARE_CONST_Packet4f(NAME,X) \
156 const Packet4f p4f_##NAME = pset1<Packet4f>(X)
158 #define EIGEN_DECLARE_CONST_Packet4f_FROM_INT(NAME,X) \
159 const Packet4f p4f_##NAME = vreinterpretq_f32_u32(pset1<int32_t>(X))
161 #define EIGEN_DECLARE_CONST_Packet4i(NAME,X) \
162 const Packet4i p4i_##NAME = pset1<Packet4i>(X)
164 #if EIGEN_ARCH_ARM64 && EIGEN_COMP_GNUC
168 #define EIGEN_ARM_PREFETCH(ADDR) __asm__ __volatile__("prfm pldl1keep, [%[addr]]\n" ::[addr] "r"(ADDR) : );
169 #elif EIGEN_HAS_BUILTIN(__builtin_prefetch) || EIGEN_COMP_GNUC
170 #define EIGEN_ARM_PREFETCH(ADDR) __builtin_prefetch(ADDR);
172 #define EIGEN_ARM_PREFETCH(ADDR) __pld(ADDR)
174 #define EIGEN_ARM_PREFETCH(ADDR) __asm__ __volatile__ ("pld [%[addr]]\n" :: [addr] "r" (ADDR) : );
177 #define EIGEN_ARM_PREFETCH(ADDR)
181 struct packet_traits<float> : default_packet_traits
230 struct packet_traits<
int8_t> : default_packet_traits
259 struct packet_traits<
uint8_t> : default_packet_traits
290 struct packet_traits<
int16_t> : default_packet_traits
319 struct packet_traits<
uint16_t> : default_packet_traits
349 struct packet_traits<
int32_t> : default_packet_traits
378 struct packet_traits<
uint32_t> : default_packet_traits
409 struct packet_traits<
int64_t> : default_packet_traits
438 struct packet_traits<
uint64_t> : default_packet_traits
466 template<>
struct unpacket_traits<
Packet2f>
476 masked_load_available =
false,
477 masked_store_available =
false
480 template<>
struct unpacket_traits<
Packet4f>
490 masked_load_available =
false,
491 masked_store_available =
false
494 template<>
struct unpacket_traits<
Packet4c>
503 masked_load_available =
false,
504 masked_store_available =
false
507 template<>
struct unpacket_traits<
Packet8c>
516 masked_load_available =
false,
517 masked_store_available =
false
520 template<>
struct unpacket_traits<
Packet16c>
529 masked_load_available =
false,
530 masked_store_available =
false
533 template<>
struct unpacket_traits<
Packet4uc>
542 masked_load_available =
false,
543 masked_store_available =
false
546 template<>
struct unpacket_traits<
Packet8uc>
555 masked_load_available =
false,
556 masked_store_available =
false
568 masked_load_available =
false,
569 masked_store_available =
false};
571 template<>
struct unpacket_traits<
Packet4s>
580 masked_load_available =
false,
581 masked_store_available =
false
584 template<>
struct unpacket_traits<
Packet8s>
593 masked_load_available =
false,
594 masked_store_available =
false
597 template<>
struct unpacket_traits<
Packet4us>
606 masked_load_available =
false,
607 masked_store_available =
false
610 template<>
struct unpacket_traits<
Packet8us>
619 masked_load_available =
false,
620 masked_store_available =
false
623 template<>
struct unpacket_traits<
Packet2i>
632 masked_load_available =
false,
633 masked_store_available =
false
636 template<>
struct unpacket_traits<
Packet4i>
645 masked_load_available =
false,
646 masked_store_available =
false
649 template<>
struct unpacket_traits<
Packet2ui>
658 masked_load_available =
false,
659 masked_store_available =
false
662 template<>
struct unpacket_traits<
Packet4ui>
671 masked_load_available =
false,
672 masked_store_available =
false
675 template<>
struct unpacket_traits<
Packet2l>
684 masked_load_available =
false,
685 masked_store_available =
false
688 template<>
struct unpacket_traits<
Packet2ul>
697 masked_load_available =
false,
698 masked_store_available =
false
705 {
return vget_lane_s32(vreinterpret_s32_s8(vdup_n_s8(from)), 0); }
709 {
return vget_lane_u32(vreinterpret_u32_u8(vdup_n_u8(from)), 0); }
724 {
return vreinterpret_f32_u32(vdup_n_u32(from)); }
726 {
return vreinterpretq_f32_u32(vdupq_n_u32(from)); }
730 const float c[] = {0.0f,1.0f};
735 const float c[] = {0.0f,1.0f,2.0f,3.0f};
739 {
return vget_lane_s32(vreinterpret_s32_s8(vadd_s8(vreinterpret_s8_u32(vdup_n_u32(0x03020100)), vdup_n_s8(
a))), 0); }
742 const int8_t c[] = {0,1,2,3,4,5,6,7};
747 const int8_t c[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
751 {
return vget_lane_u32(vreinterpret_u32_u8(vadd_u8(vreinterpret_u8_u32(vdup_n_u32(0x03020100)), vdup_n_u8(
a))), 0); }
754 const uint8_t c[] = {0,1,2,3,4,5,6,7};
759 const uint8_t c[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
774 const int16_t c[] = {0,1,2,3,4,5,6,7};
817 return vget_lane_s32(vreinterpret_s32_s8(vadd_s8(
818 vreinterpret_s8_s32(vdup_n_s32(
a)),
819 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
825 return vget_lane_u32(vreinterpret_u32_u8(vadd_u8(
826 vreinterpret_u8_u32(vdup_n_u32(
a)),
827 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
846 return vget_lane_s32(vreinterpret_s32_s8(vsub_s8(
847 vreinterpret_s8_s32(vdup_n_s32(
a)),
848 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
854 return vget_lane_u32(vreinterpret_u32_u8(vsub_u8(
855 vreinterpret_u8_u32(vdup_n_u32(
a)),
856 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
878 Packet4f mask =
make_packet4f(numext::bit_cast<float>(0x80000000u), 0.0f, numext::bit_cast<float>(0x80000000u), 0.0f);
885 {
return vget_lane_s32(vreinterpret_s32_s8(vneg_s8(vreinterpret_s8_s32(vdup_n_s32(
a)))), 0); }
897 vdup_n_s64(-vgetq_lane_s64(
a, 0)),
898 vdup_n_s64(-vgetq_lane_s64(
a, 1)));
925 return vget_lane_s32(vreinterpret_s32_s8(vmul_s8(
926 vreinterpret_s8_s32(vdup_n_s32(
a)),
927 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
933 return vget_lane_u32(vreinterpret_u32_u8(vmul_u8(
934 vreinterpret_u8_u32(vdup_n_u32(
a)),
935 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
949 vdup_n_s64(vgetq_lane_s64(
a, 0)*vgetq_lane_s64(
b, 0)),
950 vdup_n_s64(vgetq_lane_s64(
a, 1)*vgetq_lane_s64(
b, 1)));
954 vdup_n_u64(vgetq_lane_u64(
a, 0)*vgetq_lane_u64(
b, 0)),
955 vdup_n_u64(vgetq_lane_u64(
a, 1)*vgetq_lane_u64(
b, 1)));
961 return vdiv_f32(
a,
b);
974 restep = vrecps_f32(
b, inv);
975 inv = vmul_f32(restep, inv);
978 div = vmul_f32(
a, inv);
986 return vdivq_f32(
a,
b);
995 inv = vrecpeq_f32(
b);
999 restep = vrecpsq_f32(
b, inv);
1000 inv = vmulq_f32(restep, inv);
1003 div = vmulq_f32(
a, inv);
1011 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1016 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1021 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1026 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1031 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1036 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1041 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1046 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1051 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1056 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1061 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1066 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1071 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1076 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1081 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1086 eigen_assert(
false &&
"packet integer division are not supported by NEON");
1091 #ifdef __ARM_FEATURE_FMA
1093 {
return vfmaq_f32(
c,
a,
b); }
1095 {
return vfma_f32(
c,
a,
b); }
1099 return vmlaq_f32(
c,
a,
b);
1103 return vmla_f32(
c,
a,
b);
1110 return vget_lane_s32(vreinterpret_s32_s8(vmla_s8(
1111 vreinterpret_s8_s32(vdup_n_s32(
c)),
1112 vreinterpret_s8_s32(vdup_n_s32(
a)),
1113 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1116 {
return vmla_s8(
c,
a,
b); }
1118 {
return vmlaq_s8(
c,
a,
b); }
1121 return vget_lane_u32(vreinterpret_u32_u8(vmla_u8(
1122 vreinterpret_u8_u32(vdup_n_u32(
c)),
1123 vreinterpret_u8_u32(vdup_n_u32(
a)),
1124 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1127 {
return vmla_u8(
c,
a,
b); }
1129 {
return vmlaq_u8(
c,
a,
b); }
1131 {
return vmla_s16(
c,
a,
b); }
1133 {
return vmlaq_s16(
c,
a,
b); }
1135 {
return vmla_u16(
c,
a,
b); }
1137 {
return vmlaq_u16(
c,
a,
b); }
1139 {
return vmla_s32(
c,
a,
b); }
1141 {
return vmlaq_s32(
c,
a,
b); }
1143 {
return vmla_u32(
c,
a,
b); }
1145 {
return vmlaq_u32(
c,
a,
b); }
1148 {
return vabd_f32(
a,
b); }
1150 {
return vabdq_f32(
a,
b); }
1153 return vget_lane_s32(vreinterpret_s32_s8(vabd_s8(
1154 vreinterpret_s8_s32(vdup_n_s32(
a)),
1155 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1158 {
return vabd_s8(
a,
b); }
1160 {
return vabdq_s8(
a,
b); }
1163 return vget_lane_u32(vreinterpret_u32_u8(vabd_u8(
1164 vreinterpret_u8_u32(vdup_n_u32(
a)),
1165 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1168 {
return vabd_u8(
a,
b); }
1170 {
return vabdq_u8(
a,
b); }
1172 {
return vabd_s16(
a,
b); }
1174 {
return vabdq_s16(
a,
b); }
1176 {
return vabd_u16(
a,
b); }
1178 {
return vabdq_u16(
a,
b); }
1180 {
return vabd_s32(
a,
b); }
1182 {
return vabdq_s32(
a,
b); }
1184 {
return vabd_u32(
a,
b); }
1186 {
return vabdq_u32(
a,
b); }
1191 #ifdef __ARM_FEATURE_NUMERIC_MAXMIN
1194 template<> EIGEN_STRONG_INLINE
Packet2f pmin<PropagateNumbers, Packet2f>(
const Packet2f&
a,
const Packet2f&
b) {
return vminnm_f32(
a,
b); }
1203 return vget_lane_s32(vreinterpret_s32_s8(vmin_s8(
1204 vreinterpret_s8_s32(vdup_n_s32(
a)),
1205 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1211 return vget_lane_u32(vreinterpret_u32_u8(vmin_u8(
1212 vreinterpret_u8_u32(vdup_n_u32(
a)),
1213 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1226 return vcombine_s64(
1227 vdup_n_s64((
std::min)(vgetq_lane_s64(
a, 0), vgetq_lane_s64(
b, 0))),
1228 vdup_n_s64((
std::min)(vgetq_lane_s64(
a, 1), vgetq_lane_s64(
b, 1))));
1231 return vcombine_u64(
1232 vdup_n_u64((
std::min)(vgetq_lane_u64(
a, 0), vgetq_lane_u64(
b, 0))),
1233 vdup_n_u64((
std::min)(vgetq_lane_u64(
a, 1), vgetq_lane_u64(
b, 1))));
1239 #ifdef __ARM_FEATURE_NUMERIC_MAXMIN
1242 template<> EIGEN_STRONG_INLINE
Packet2f pmax<PropagateNumbers, Packet2f>(
const Packet2f&
a,
const Packet2f&
b) {
return vmaxnm_f32(
a,
b); }
1251 return vget_lane_s32(vreinterpret_s32_s8(vmax_s8(
1252 vreinterpret_s8_s32(vdup_n_s32(
a)),
1253 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1259 return vget_lane_u32(vreinterpret_u32_u8(vmax_u8(
1260 vreinterpret_u8_u32(vdup_n_u32(
a)),
1261 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1274 return vcombine_s64(
1275 vdup_n_s64((
std::max)(vgetq_lane_s64(
a, 0), vgetq_lane_s64(
b, 0))),
1276 vdup_n_s64((
std::max)(vgetq_lane_s64(
a, 1), vgetq_lane_s64(
b, 1))));
1279 return vcombine_u64(
1280 vdup_n_u64((
std::max)(vgetq_lane_u64(
a, 0), vgetq_lane_u64(
b, 0))),
1281 vdup_n_u64((
std::max)(vgetq_lane_u64(
a, 1), vgetq_lane_u64(
b, 1))));
1285 {
return vreinterpret_f32_u32(vcle_f32(
a,
b)); }
1287 {
return vreinterpretq_f32_u32(vcleq_f32(
a,
b)); }
1290 return vget_lane_s32(vreinterpret_s32_u8(vcle_s8(
1291 vreinterpret_s8_s32(vdup_n_s32(
a)),
1292 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1295 {
return vreinterpret_s8_u8(vcle_s8(
a,
b)); }
1297 {
return vreinterpretq_s8_u8(vcleq_s8(
a,
b)); }
1300 return vget_lane_u32(vreinterpret_u32_u8(vcle_u8(
1301 vreinterpret_u8_u32(vdup_n_u32(
a)),
1302 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1305 {
return vcle_u8(
a,
b); }
1307 {
return vcleq_u8(
a,
b); }
1309 {
return vreinterpret_s16_u16(vcle_s16(
a,
b)); }
1311 {
return vreinterpretq_s16_u16(vcleq_s16(
a,
b)); }
1313 {
return vcle_u16(
a,
b); }
1315 {
return vcleq_u16(
a,
b); }
1317 {
return vreinterpret_s32_u32(vcle_s32(
a,
b)); }
1319 {
return vreinterpretq_s32_u32(vcleq_s32(
a,
b)); }
1321 {
return vcle_u32(
a,
b); }
1323 {
return vcleq_u32(
a,
b); }
1326 #if EIGEN_ARCH_ARM64
1327 return vreinterpretq_s64_u64(vcleq_s64(
a,
b));
1329 return vcombine_s64(
1330 vdup_n_s64(vgetq_lane_s64(
a, 0) <= vgetq_lane_s64(
b, 0) ?
numext::int64_t(-1) : 0),
1331 vdup_n_s64(vgetq_lane_s64(
a, 1) <= vgetq_lane_s64(
b, 1) ?
numext::int64_t(-1) : 0));
1336 #if EIGEN_ARCH_ARM64
1337 return vcleq_u64(
a,
b);
1339 return vcombine_u64(
1341 vdup_n_u64(vgetq_lane_u64(
a, 1) <= vgetq_lane_u64(
b, 1) ?
numext::uint64_t(-1) : 0));
1346 {
return vreinterpret_f32_u32(vclt_f32(
a,
b)); }
1348 {
return vreinterpretq_f32_u32(vcltq_f32(
a,
b)); }
1351 return vget_lane_s32(vreinterpret_s32_u8(vclt_s8(
1352 vreinterpret_s8_s32(vdup_n_s32(
a)),
1353 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1356 {
return vreinterpret_s8_u8(vclt_s8(
a,
b)); }
1358 {
return vreinterpretq_s8_u8(vcltq_s8(
a,
b)); }
1361 return vget_lane_u32(vreinterpret_u32_u8(vclt_u8(
1362 vreinterpret_u8_u32(vdup_n_u32(
a)),
1363 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1366 {
return vclt_u8(
a,
b); }
1368 {
return vcltq_u8(
a,
b); }
1370 {
return vreinterpret_s16_u16(vclt_s16(
a,
b)); }
1372 {
return vreinterpretq_s16_u16(vcltq_s16(
a,
b)); }
1374 {
return vclt_u16(
a,
b); }
1376 {
return vcltq_u16(
a,
b); }
1378 {
return vreinterpret_s32_u32(vclt_s32(
a,
b)); }
1380 {
return vreinterpretq_s32_u32(vcltq_s32(
a,
b)); }
1382 {
return vclt_u32(
a,
b); }
1384 {
return vcltq_u32(
a,
b); }
1387 #if EIGEN_ARCH_ARM64
1388 return vreinterpretq_s64_u64(vcltq_s64(
a,
b));
1390 return vcombine_s64(
1391 vdup_n_s64(vgetq_lane_s64(
a, 0) < vgetq_lane_s64(
b, 0) ?
numext::int64_t(-1) : 0),
1392 vdup_n_s64(vgetq_lane_s64(
a, 1) < vgetq_lane_s64(
b, 1) ?
numext::int64_t(-1) : 0));
1397 #if EIGEN_ARCH_ARM64
1398 return vcltq_u64(
a,
b);
1400 return vcombine_u64(
1407 {
return vreinterpret_f32_u32(vceq_f32(
a,
b)); }
1409 {
return vreinterpretq_f32_u32(vceqq_f32(
a,
b)); }
1412 return vget_lane_s32(vreinterpret_s32_u8(vceq_s8(
1413 vreinterpret_s8_s32(vdup_n_s32(
a)),
1414 vreinterpret_s8_s32(vdup_n_s32(
b)))), 0);
1417 {
return vreinterpret_s8_u8(vceq_s8(
a,
b)); }
1419 {
return vreinterpretq_s8_u8(vceqq_s8(
a,
b)); }
1422 return vget_lane_u32(vreinterpret_u32_u8(vceq_u8(
1423 vreinterpret_u8_u32(vdup_n_u32(
a)),
1424 vreinterpret_u8_u32(vdup_n_u32(
b)))), 0);
1427 {
return vceq_u8(
a,
b); }
1429 {
return vceqq_u8(
a,
b); }
1431 {
return vreinterpret_s16_u16(vceq_s16(
a,
b)); }
1433 {
return vreinterpretq_s16_u16(vceqq_s16(
a,
b)); }
1435 {
return vceq_u16(
a,
b); }
1437 {
return vceqq_u16(
a,
b); }
1439 {
return vreinterpret_s32_u32(vceq_s32(
a,
b)); }
1441 {
return vreinterpretq_s32_u32(vceqq_s32(
a,
b)); }
1443 {
return vceq_u32(
a,
b); }
1445 {
return vceqq_u32(
a,
b); }
1448 #if EIGEN_ARCH_ARM64
1449 return vreinterpretq_s64_u64(vceqq_s64(
a,
b));
1451 return vcombine_s64(
1452 vdup_n_s64(vgetq_lane_s64(
a, 0) == vgetq_lane_s64(
b, 0) ?
numext::int64_t(-1) : 0),
1453 vdup_n_s64(vgetq_lane_s64(
a, 1) == vgetq_lane_s64(
b, 1) ?
numext::int64_t(-1) : 0));
1458 #if EIGEN_ARCH_ARM64
1459 return vceqq_u64(
a,
b);
1461 return vcombine_u64(
1463 vdup_n_u64(vgetq_lane_u64(
a, 1) == vgetq_lane_u64(
b, 1) ?
numext::uint64_t(-1) : 0));
1468 {
return vreinterpret_f32_u32(vmvn_u32(vcge_f32(
a,
b))); }
1470 {
return vreinterpretq_f32_u32(vmvnq_u32(vcgeq_f32(
a,
b))); }
1474 {
return vreinterpret_f32_u32(vand_u32(vreinterpret_u32_f32(
a),vreinterpret_u32_f32(
b))); }
1476 {
return vreinterpretq_f32_u32(vandq_u32(vreinterpretq_u32_f32(
a),vreinterpretq_u32_f32(
b))); }
1480 {
return vand_s8(
a,
b); }
1482 {
return vandq_s8(
a,
b); }
1486 {
return vand_u8(
a,
b); }
1488 {
return vandq_u8(
a,
b); }
1492 {
return vand_u16(
a,
b); }
1494 {
return vandq_u16(
a,
b); }
1498 {
return vand_u32(
a,
b); }
1500 {
return vandq_u32(
a,
b); }
1503 {
return vandq_u64(
a,
b); }
1506 {
return vreinterpret_f32_u32(vorr_u32(vreinterpret_u32_f32(
a),vreinterpret_u32_f32(
b))); }
1508 {
return vreinterpretq_f32_u32(vorrq_u32(vreinterpretq_u32_f32(
a),vreinterpretq_u32_f32(
b))); }
1513 {
return vorrq_s8(
a,
b); }
1517 {
return vorr_u8(
a,
b); }
1519 {
return vorrq_u8(
a,
b); }
1521 {
return vorr_s16(
a,
b); }
1523 {
return vorrq_s16(
a,
b); }
1525 {
return vorr_u16(
a,
b); }
1527 {
return vorrq_u16(
a,
b); }
1531 {
return vorr_u32(
a,
b); }
1533 {
return vorrq_u32(
a,
b); }
1535 {
return vorrq_s64(
a,
b); }
1537 {
return vorrq_u64(
a,
b); }
1540 {
return vreinterpret_f32_u32(veor_u32(vreinterpret_u32_f32(
a),vreinterpret_u32_f32(
b))); }
1542 {
return vreinterpretq_f32_u32(veorq_u32(vreinterpretq_u32_f32(
a),vreinterpretq_u32_f32(
b))); }
1546 {
return veor_s8(
a,
b); }
1548 {
return veorq_s8(
a,
b); }
1552 {
return veor_u8(
a,
b); }
1554 {
return veorq_u8(
a,
b); }
1558 {
return veor_u16(
a,
b); }
1560 {
return veorq_u16(
a,
b); }
1564 {
return veor_u32(
a,
b); }
1566 {
return veorq_u32(
a,
b); }
1568 {
return veorq_s64(
a,
b); }
1570 {
return veorq_u64(
a,
b); }
1573 {
return vreinterpret_f32_u32(vbic_u32(vreinterpret_u32_f32(
a),vreinterpret_u32_f32(
b))); }
1575 {
return vreinterpretq_f32_u32(vbicq_u32(vreinterpretq_u32_f32(
a),vreinterpretq_u32_f32(
b))); }
1583 {
return vbic_u8(
a,
b); }
1585 {
return vbicq_u8(
a,
b); }
1587 {
return vbic_s16(
a,
b); }
1589 {
return vbicq_s16(
a,
b); }
1591 {
return vbic_u16(
a,
b); }
1593 {
return vbicq_u16(
a,
b); }
1595 {
return vbic_s32(
a,
b); }
1597 {
return vbicq_s32(
a,
b); }
1599 {
return vbic_u32(
a,
b); }
1601 {
return vbicq_u32(
a,
b); }
1603 {
return vbicq_s64(
a,
b); }
1605 {
return vbicq_u64(
a,
b); }
1609 {
return vget_lane_s32(vreinterpret_s32_s8(vshr_n_s8(vreinterpret_s8_s32(vdup_n_s32(
a)), N)), 0); }
1613 {
return vget_lane_u32(vreinterpret_u32_u8(vshr_n_u8(vreinterpret_u8_u32(vdup_n_u32(
a)), N)), 0); }
1628 {
return vget_lane_s32(vreinterpret_s32_u8(vshr_n_u8(vreinterpret_u8_s32(vdup_n_s32(
a)), N)), 0); }
1630 {
return vreinterpret_s8_u8(vshr_n_u8(vreinterpret_u8_s8(
a),N)); }
1632 {
return vreinterpretq_s8_u8(vshrq_n_u8(vreinterpretq_u8_s8(
a),N)); }
1634 {
return vget_lane_u32(vreinterpret_u32_s8(vshr_n_s8(vreinterpret_s8_u32(vdup_n_u32(
a)), N)), 0); }
1638 {
return vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(
a),N)); }
1640 {
return vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(
a),N)); }
1644 {
return vreinterpret_s32_u32(vshr_n_u32(vreinterpret_u32_s32(
a),N)); }
1646 {
return vreinterpretq_s32_u32(vshrq_n_u32(vreinterpretq_u32_s32(
a),N)); }
1650 {
return vreinterpretq_s64_u64(vshrq_n_u64(vreinterpretq_u64_s64(
a),N)); }
1654 {
return vget_lane_s32(vreinterpret_s32_s8(vshl_n_s8(vreinterpret_s8_s32(vdup_n_s32(
a)), N)), 0); }
1658 {
return vget_lane_u32(vreinterpret_u32_u8(vshl_n_u8(vreinterpret_u8_u32(vdup_n_u32(
a)), N)), 0); }
1763 {
return vld1_dup_f32(from); }
1765 {
return vcombine_f32(vld1_dup_f32(from), vld1_dup_f32(from+1)); }
1769 return vget_lane_s32(vreinterpret_s32_s8(vzip_s8(
a,
a).val[0]), 0);
1773 const int8x8_t
a = vld1_s8(from);
1774 return vzip_s8(
a,
a).val[0];
1778 const int8x8_t
a = vld1_s8(from);
1779 const int8x8x2_t
b = vzip_s8(
a,
a);
1780 return vcombine_s8(
b.val[0],
b.val[1]);
1785 return vget_lane_u32(vreinterpret_u32_u8(vzip_u8(
a,
a).val[0]), 0);
1789 const uint8x8_t
a = vld1_u8(from);
1790 return vzip_u8(
a,
a).val[0];
1794 const uint8x8_t
a = vld1_u8(from);
1795 const uint8x8x2_t
b = vzip_u8(
a,
a);
1796 return vcombine_u8(
b.val[0],
b.val[1]);
1800 return vreinterpret_s16_u32(vzip_u32(vreinterpret_u32_s16(vld1_dup_s16(from)),
1801 vreinterpret_u32_s16(vld1_dup_s16(from+1))).val[0]);
1805 const int16x4_t
a = vld1_s16(from);
1806 const int16x4x2_t
b = vzip_s16(
a,
a);
1807 return vcombine_s16(
b.val[0],
b.val[1]);
1811 return vreinterpret_u16_u32(vzip_u32(vreinterpret_u32_u16(vld1_dup_u16(from)),
1812 vreinterpret_u32_u16(vld1_dup_u16(from+1))).val[0]);
1816 const uint16x4_t
a = vld1_u16(from);
1817 const uint16x4x2_t
b = vzip_u16(
a,
a);
1818 return vcombine_u16(
b.val[0],
b.val[1]);
1821 {
return vld1_dup_s32(from); }
1823 {
return vcombine_s32(vld1_dup_s32(from), vld1_dup_s32(from+1)); }
1825 {
return vld1_dup_u32(from); }
1827 {
return vcombine_u32(vld1_dup_u32(from), vld1_dup_u32(from+1)); }
1829 {
return vld1q_dup_s64(from); }
1831 {
return vld1q_dup_u64(from); }
1835 {
return vget_lane_s32(vreinterpret_s32_s8(vld1_dup_s8(from)), 0); }
1838 return vreinterpret_s8_u32(vzip_u32(
1839 vreinterpret_u32_s8(vld1_dup_s8(from)),
1840 vreinterpret_u32_s8(vld1_dup_s8(from+1))).val[0]);
1844 const int8x8_t
a = vreinterpret_s8_u32(vzip_u32(
1845 vreinterpret_u32_s8(vld1_dup_s8(from)),
1846 vreinterpret_u32_s8(vld1_dup_s8(from+1))).val[0]);
1847 const int8x8_t
b = vreinterpret_s8_u32(vzip_u32(
1848 vreinterpret_u32_s8(vld1_dup_s8(from+2)),
1849 vreinterpret_u32_s8(vld1_dup_s8(from+3))).val[0]);
1850 return vcombine_s8(
a,
b);
1853 {
return vget_lane_u32(vreinterpret_u32_u8(vld1_dup_u8(from)), 0); }
1856 return vreinterpret_u8_u32(vzip_u32(
1857 vreinterpret_u32_u8(vld1_dup_u8(from)),
1858 vreinterpret_u32_u8(vld1_dup_u8(from+1))).val[0]);
1862 const uint8x8_t
a = vreinterpret_u8_u32(vzip_u32(
1863 vreinterpret_u32_u8(vld1_dup_u8(from)),
1864 vreinterpret_u32_u8(vld1_dup_u8(from+1))).val[0]);
1865 const uint8x8_t
b = vreinterpret_u8_u32(vzip_u32(
1866 vreinterpret_u32_u8(vld1_dup_u8(from+2)),
1867 vreinterpret_u32_u8(vld1_dup_u8(from+3))).val[0]);
1868 return vcombine_u8(
a,
b);
1871 {
return vcombine_s16(vld1_dup_s16(from), vld1_dup_s16(from+1)); }
1873 {
return vcombine_u16(vld1_dup_u16(from), vld1_dup_u16(from+1)); }
1882 { memcpy(to, &from,
sizeof(from)); }
1888 { memcpy(to, &from,
sizeof(from)); }
1919 { memcpy(to, &from,
sizeof(from)); }
1925 { memcpy(to, &from,
sizeof(from)); }
1954 res = vld1_lane_f32(from + 1*stride,
res, 1);
1960 res = vld1q_lane_f32(from + 1*stride,
res, 1);
1961 res = vld1q_lane_f32(from + 2*stride,
res, 2);
1962 res = vld1q_lane_f32(from + 3*stride,
res, 3);
1968 for (
int i = 0;
i != 4;
i++)
1969 reinterpret_cast<int8_t*
>(&
res)[
i] = *(from +
i * stride);
1975 res = vld1_lane_s8(from + 1*stride,
res, 1);
1976 res = vld1_lane_s8(from + 2*stride,
res, 2);
1977 res = vld1_lane_s8(from + 3*stride,
res, 3);
1978 res = vld1_lane_s8(from + 4*stride,
res, 4);
1979 res = vld1_lane_s8(from + 5*stride,
res, 5);
1980 res = vld1_lane_s8(from + 6*stride,
res, 6);
1981 res = vld1_lane_s8(from + 7*stride,
res, 7);
1987 res = vld1q_lane_s8(from + 1*stride,
res, 1);
1988 res = vld1q_lane_s8(from + 2*stride,
res, 2);
1989 res = vld1q_lane_s8(from + 3*stride,
res, 3);
1990 res = vld1q_lane_s8(from + 4*stride,
res, 4);
1991 res = vld1q_lane_s8(from + 5*stride,
res, 5);
1992 res = vld1q_lane_s8(from + 6*stride,
res, 6);
1993 res = vld1q_lane_s8(from + 7*stride,
res, 7);
1994 res = vld1q_lane_s8(from + 8*stride,
res, 8);
1995 res = vld1q_lane_s8(from + 9*stride,
res, 9);
1996 res = vld1q_lane_s8(from + 10*stride,
res, 10);
1997 res = vld1q_lane_s8(from + 11*stride,
res, 11);
1998 res = vld1q_lane_s8(from + 12*stride,
res, 12);
1999 res = vld1q_lane_s8(from + 13*stride,
res, 13);
2000 res = vld1q_lane_s8(from + 14*stride,
res, 14);
2001 res = vld1q_lane_s8(from + 15*stride,
res, 15);
2007 for (
int i = 0;
i != 4;
i++)
2008 reinterpret_cast<uint8_t*
>(&
res)[
i] = *(from +
i * stride);
2014 res = vld1_lane_u8(from + 1*stride,
res, 1);
2015 res = vld1_lane_u8(from + 2*stride,
res, 2);
2016 res = vld1_lane_u8(from + 3*stride,
res, 3);
2017 res = vld1_lane_u8(from + 4*stride,
res, 4);
2018 res = vld1_lane_u8(from + 5*stride,
res, 5);
2019 res = vld1_lane_u8(from + 6*stride,
res, 6);
2020 res = vld1_lane_u8(from + 7*stride,
res, 7);
2026 res = vld1q_lane_u8(from + 1*stride,
res, 1);
2027 res = vld1q_lane_u8(from + 2*stride,
res, 2);
2028 res = vld1q_lane_u8(from + 3*stride,
res, 3);
2029 res = vld1q_lane_u8(from + 4*stride,
res, 4);
2030 res = vld1q_lane_u8(from + 5*stride,
res, 5);
2031 res = vld1q_lane_u8(from + 6*stride,
res, 6);
2032 res = vld1q_lane_u8(from + 7*stride,
res, 7);
2033 res = vld1q_lane_u8(from + 8*stride,
res, 8);
2034 res = vld1q_lane_u8(from + 9*stride,
res, 9);
2035 res = vld1q_lane_u8(from + 10*stride,
res, 10);
2036 res = vld1q_lane_u8(from + 11*stride,
res, 11);
2037 res = vld1q_lane_u8(from + 12*stride,
res, 12);
2038 res = vld1q_lane_u8(from + 13*stride,
res, 13);
2039 res = vld1q_lane_u8(from + 14*stride,
res, 14);
2040 res = vld1q_lane_u8(from + 15*stride,
res, 15);
2046 res = vld1_lane_s16(from + 1*stride,
res, 1);
2047 res = vld1_lane_s16(from + 2*stride,
res, 2);
2048 res = vld1_lane_s16(from + 3*stride,
res, 3);
2054 res = vld1q_lane_s16(from + 1*stride,
res, 1);
2055 res = vld1q_lane_s16(from + 2*stride,
res, 2);
2056 res = vld1q_lane_s16(from + 3*stride,
res, 3);
2057 res = vld1q_lane_s16(from + 4*stride,
res, 4);
2058 res = vld1q_lane_s16(from + 5*stride,
res, 5);
2059 res = vld1q_lane_s16(from + 6*stride,
res, 6);
2060 res = vld1q_lane_s16(from + 7*stride,
res, 7);
2066 res = vld1_lane_u16(from + 1*stride,
res, 1);
2067 res = vld1_lane_u16(from + 2*stride,
res, 2);
2068 res = vld1_lane_u16(from + 3*stride,
res, 3);
2074 res = vld1q_lane_u16(from + 1*stride,
res, 1);
2075 res = vld1q_lane_u16(from + 2*stride,
res, 2);
2076 res = vld1q_lane_u16(from + 3*stride,
res, 3);
2077 res = vld1q_lane_u16(from + 4*stride,
res, 4);
2078 res = vld1q_lane_u16(from + 5*stride,
res, 5);
2079 res = vld1q_lane_u16(from + 6*stride,
res, 6);
2080 res = vld1q_lane_u16(from + 7*stride,
res, 7);
2086 res = vld1_lane_s32(from + 1*stride,
res, 1);
2092 res = vld1q_lane_s32(from + 1*stride,
res, 1);
2093 res = vld1q_lane_s32(from + 2*stride,
res, 2);
2094 res = vld1q_lane_s32(from + 3*stride,
res, 3);
2100 res = vld1_lane_u32(from + 1*stride,
res, 1);
2106 res = vld1q_lane_u32(from + 1*stride,
res, 1);
2107 res = vld1q_lane_u32(from + 2*stride,
res, 2);
2108 res = vld1q_lane_u32(from + 3*stride,
res, 3);
2114 res = vld1q_lane_s64(from + 1*stride,
res, 1);
2120 res = vld1q_lane_u64(from + 1*stride,
res, 1);
2126 vst1_lane_f32(to + stride*0, from, 0);
2127 vst1_lane_f32(to + stride*1, from, 1);
2131 vst1q_lane_f32(to + stride*0, from, 0);
2132 vst1q_lane_f32(to + stride*1, from, 1);
2133 vst1q_lane_f32(to + stride*2, from, 2);
2134 vst1q_lane_f32(to + stride*3, from, 3);
2138 for (
int i = 0;
i != 4;
i++)
2139 *(to +
i * stride) =
reinterpret_cast<const int8_t*
>(&from)[
i];
2143 vst1_lane_s8(to + stride*0, from, 0);
2144 vst1_lane_s8(to + stride*1, from, 1);
2145 vst1_lane_s8(to + stride*2, from, 2);
2146 vst1_lane_s8(to + stride*3, from, 3);
2147 vst1_lane_s8(to + stride*4, from, 4);
2148 vst1_lane_s8(to + stride*5, from, 5);
2149 vst1_lane_s8(to + stride*6, from, 6);
2150 vst1_lane_s8(to + stride*7, from, 7);
2154 vst1q_lane_s8(to + stride*0, from, 0);
2155 vst1q_lane_s8(to + stride*1, from, 1);
2156 vst1q_lane_s8(to + stride*2, from, 2);
2157 vst1q_lane_s8(to + stride*3, from, 3);
2158 vst1q_lane_s8(to + stride*4, from, 4);
2159 vst1q_lane_s8(to + stride*5, from, 5);
2160 vst1q_lane_s8(to + stride*6, from, 6);
2161 vst1q_lane_s8(to + stride*7, from, 7);
2162 vst1q_lane_s8(to + stride*8, from, 8);
2163 vst1q_lane_s8(to + stride*9, from, 9);
2164 vst1q_lane_s8(to + stride*10, from, 10);
2165 vst1q_lane_s8(to + stride*11, from, 11);
2166 vst1q_lane_s8(to + stride*12, from, 12);
2167 vst1q_lane_s8(to + stride*13, from, 13);
2168 vst1q_lane_s8(to + stride*14, from, 14);
2169 vst1q_lane_s8(to + stride*15, from, 15);
2173 for (
int i = 0;
i != 4;
i++)
2174 *(to +
i * stride) =
reinterpret_cast<const uint8_t*
>(&from)[
i];
2178 vst1_lane_u8(to + stride*0, from, 0);
2179 vst1_lane_u8(to + stride*1, from, 1);
2180 vst1_lane_u8(to + stride*2, from, 2);
2181 vst1_lane_u8(to + stride*3, from, 3);
2182 vst1_lane_u8(to + stride*4, from, 4);
2183 vst1_lane_u8(to + stride*5, from, 5);
2184 vst1_lane_u8(to + stride*6, from, 6);
2185 vst1_lane_u8(to + stride*7, from, 7);
2189 vst1q_lane_u8(to + stride*0, from, 0);
2190 vst1q_lane_u8(to + stride*1, from, 1);
2191 vst1q_lane_u8(to + stride*2, from, 2);
2192 vst1q_lane_u8(to + stride*3, from, 3);
2193 vst1q_lane_u8(to + stride*4, from, 4);
2194 vst1q_lane_u8(to + stride*5, from, 5);
2195 vst1q_lane_u8(to + stride*6, from, 6);
2196 vst1q_lane_u8(to + stride*7, from, 7);
2197 vst1q_lane_u8(to + stride*8, from, 8);
2198 vst1q_lane_u8(to + stride*9, from, 9);
2199 vst1q_lane_u8(to + stride*10, from, 10);
2200 vst1q_lane_u8(to + stride*11, from, 11);
2201 vst1q_lane_u8(to + stride*12, from, 12);
2202 vst1q_lane_u8(to + stride*13, from, 13);
2203 vst1q_lane_u8(to + stride*14, from, 14);
2204 vst1q_lane_u8(to + stride*15, from, 15);
2208 vst1_lane_s16(to + stride*0, from, 0);
2209 vst1_lane_s16(to + stride*1, from, 1);
2210 vst1_lane_s16(to + stride*2, from, 2);
2211 vst1_lane_s16(to + stride*3, from, 3);
2215 vst1q_lane_s16(to + stride*0, from, 0);
2216 vst1q_lane_s16(to + stride*1, from, 1);
2217 vst1q_lane_s16(to + stride*2, from, 2);
2218 vst1q_lane_s16(to + stride*3, from, 3);
2219 vst1q_lane_s16(to + stride*4, from, 4);
2220 vst1q_lane_s16(to + stride*5, from, 5);
2221 vst1q_lane_s16(to + stride*6, from, 6);
2222 vst1q_lane_s16(to + stride*7, from, 7);
2226 vst1_lane_u16(to + stride*0, from, 0);
2227 vst1_lane_u16(to + stride*1, from, 1);
2228 vst1_lane_u16(to + stride*2, from, 2);
2229 vst1_lane_u16(to + stride*3, from, 3);
2233 vst1q_lane_u16(to + stride*0, from, 0);
2234 vst1q_lane_u16(to + stride*1, from, 1);
2235 vst1q_lane_u16(to + stride*2, from, 2);
2236 vst1q_lane_u16(to + stride*3, from, 3);
2237 vst1q_lane_u16(to + stride*4, from, 4);
2238 vst1q_lane_u16(to + stride*5, from, 5);
2239 vst1q_lane_u16(to + stride*6, from, 6);
2240 vst1q_lane_u16(to + stride*7, from, 7);
2244 vst1_lane_s32(to + stride*0, from, 0);
2245 vst1_lane_s32(to + stride*1, from, 1);
2249 vst1q_lane_s32(to + stride*0, from, 0);
2250 vst1q_lane_s32(to + stride*1, from, 1);
2251 vst1q_lane_s32(to + stride*2, from, 2);
2252 vst1q_lane_s32(to + stride*3, from, 3);
2256 vst1_lane_u32(to + stride*0, from, 0);
2257 vst1_lane_u32(to + stride*1, from, 1);
2261 vst1q_lane_u32(to + stride*0, from, 0);
2262 vst1q_lane_u32(to + stride*1, from, 1);
2263 vst1q_lane_u32(to + stride*2, from, 2);
2264 vst1q_lane_u32(to + stride*3, from, 3);
2268 vst1q_lane_s64(to + stride*0, from, 0);
2269 vst1q_lane_s64(to + stride*1, from, 1);
2273 vst1q_lane_u64(to + stride*0, from, 0);
2274 vst1q_lane_u64(to + stride*1, from, 1);
2309 const float32x4_t a_r64 = vrev64q_f32(
a);
2310 return vcombine_f32(vget_high_f32(a_r64), vget_low_f32(a_r64));
2313 {
return vget_lane_s32(vreinterpret_s32_s8(vrev64_s8(vreinterpret_s8_s32(vdup_n_s32(
a)))), 0); }
2317 const int8x16_t a_r64 = vrev64q_s8(
a);
2318 return vcombine_s8(vget_high_s8(a_r64), vget_low_s8(a_r64));
2321 {
return vget_lane_u32(vreinterpret_u32_u8(vrev64_u8(vreinterpret_u8_u32(vdup_n_u32(
a)))), 0); }
2325 const uint8x16_t a_r64 = vrev64q_u8(
a);
2326 return vcombine_u8(vget_high_u8(a_r64), vget_low_u8(a_r64));
2331 const int16x8_t a_r64 = vrev64q_s16(
a);
2332 return vcombine_s16(vget_high_s16(a_r64), vget_low_s16(a_r64));
2337 const uint16x8_t a_r64 = vrev64q_u16(
a);
2338 return vcombine_u16(vget_high_u16(a_r64), vget_low_u16(a_r64));
2343 const int32x4_t a_r64 = vrev64q_s32(
a);
2344 return vcombine_s32(vget_high_s32(a_r64), vget_low_s32(a_r64));
2349 const uint32x4_t a_r64 = vrev64q_u32(
a);
2350 return vcombine_u32(vget_high_u32(a_r64), vget_low_u32(a_r64));
2353 {
return vcombine_s64(vget_high_s64(
a), vget_low_s64(
a)); }
2355 {
return vcombine_u64(vget_high_u64(
a), vget_low_u64(
a)); }
2360 {
return vget_lane_s32(vreinterpret_s32_s8(vabs_s8(vreinterpret_s8_s32(vdup_n_s32(
a)))), 0); }
2375 #if EIGEN_ARCH_ARM64
2376 return vabsq_s64(
a);
2378 return vcombine_s64(
2379 vdup_n_s64((
std::abs)(vgetq_lane_s64(
a, 0))),
2380 vdup_n_s64((
std::abs)(vgetq_lane_s64(
a, 1))));
2387 return vreinterpret_f32_s32(vshr_n_s32(vreinterpret_s32_f32(
a), 31));
2391 return vreinterpretq_f32_s32(vshrq_n_s32(vreinterpretq_s32_f32(
a), 31));
2404 #if EIGEN_ARCH_ARM64
2411 const float32x2_t sum = vadd_f32(vget_low_f32(
a), vget_high_f32(
a));
2412 return vget_lane_f32(vpadd_f32(sum, sum), 0);
2417 const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(
a));
2418 int8x8_t sum = vpadd_s8(a_dup, a_dup);
2419 sum = vpadd_s8(sum, sum);
2420 return vget_lane_s8(sum, 0);
2422 #if EIGEN_ARCH_ARM64
2428 int8x8_t sum = vpadd_s8(
a,
a);
2429 sum = vpadd_s8(sum, sum);
2430 sum = vpadd_s8(sum, sum);
2431 return vget_lane_s8(sum, 0);
2435 int8x8_t sum = vadd_s8(vget_low_s8(
a), vget_high_s8(
a));
2436 sum = vpadd_s8(sum, sum);
2437 sum = vpadd_s8(sum, sum);
2438 sum = vpadd_s8(sum, sum);
2439 return vget_lane_s8(sum, 0);
2444 const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(
a));
2445 uint8x8_t sum = vpadd_u8(a_dup, a_dup);
2446 sum = vpadd_u8(sum, sum);
2447 return vget_lane_u8(sum, 0);
2449 #if EIGEN_ARCH_ARM64
2465 uint8x8_t sum = vpadd_u8(
a,
a);
2466 sum = vpadd_u8(sum, sum);
2467 sum = vpadd_u8(sum, sum);
2468 return vget_lane_u8(sum, 0);
2472 uint8x8_t sum = vadd_u8(vget_low_u8(
a), vget_high_u8(
a));
2473 sum = vpadd_u8(sum, sum);
2474 sum = vpadd_u8(sum, sum);
2475 sum = vpadd_u8(sum, sum);
2476 return vget_lane_u8(sum, 0);
2480 const int16x4_t sum = vpadd_s16(
a,
a);
2481 return vget_lane_s16(vpadd_s16(sum, sum), 0);
2485 int16x4_t sum = vadd_s16(vget_low_s16(
a), vget_high_s16(
a));
2486 sum = vpadd_s16(sum, sum);
2487 sum = vpadd_s16(sum, sum);
2488 return vget_lane_s16(sum, 0);
2492 const uint16x4_t sum = vpadd_u16(
a,
a);
2493 return vget_lane_u16(vpadd_u16(sum, sum), 0);
2497 uint16x4_t sum = vadd_u16(vget_low_u16(
a), vget_high_u16(
a));
2498 sum = vpadd_u16(sum, sum);
2499 sum = vpadd_u16(sum, sum);
2500 return vget_lane_u16(sum, 0);
2505 const int32x2_t sum = vadd_s32(vget_low_s32(
a), vget_high_s32(
a));
2506 return vget_lane_s32(vpadd_s32(sum, sum), 0);
2511 const uint32x2_t sum = vadd_u32(vget_low_u32(
a), vget_high_u32(
a));
2512 return vget_lane_u32(vpadd_u32(sum, sum), 0);
2515 {
return vgetq_lane_s64(
a, 0) + vgetq_lane_s64(
a, 1); }
2517 {
return vgetq_lane_u64(
a, 0) + vgetq_lane_u64(
a, 1); }
2522 return vget_lane_s32(vreinterpret_s32_s8(vadd_s8(
a,
2523 vreinterpret_s8_s32(vrev64_s32(vreinterpret_s32_s8(
a))))), 0);
2526 {
return vadd_s8(vget_high_s8(
a), vget_low_s8(
a)); }
2529 return vget_lane_u32(vreinterpret_u32_u8(vadd_u8(
a,
2530 vreinterpret_u8_u32(vrev64_u32(vreinterpret_u32_u8(
a))))), 0);
2533 {
return vadd_u8(vget_high_u8(
a), vget_low_u8(
a)); }
2535 {
return vadd_s16(vget_high_s16(
a), vget_low_s16(
a)); }
2537 {
return vadd_u16(vget_high_u16(
a), vget_low_u16(
a)); }
2542 {
return vget_lane_f32(
a, 0) * vget_lane_f32(
a, 1); }
2547 int8x8_t prod = vreinterpret_s8_s32(vdup_n_s32(
a));
2548 prod = vmul_s8(prod, vrev16_s8(prod));
2549 return vget_lane_s8(prod, 0) * vget_lane_s8(prod, 2);
2553 int8x8_t prod = vmul_s8(
a, vrev16_s8(
a));
2554 prod = vmul_s8(prod, vrev32_s8(prod));
2555 return vget_lane_s8(prod, 0) * vget_lane_s8(prod, 4);
2561 uint8x8_t prod = vreinterpret_u8_u32(vdup_n_u32(
a));
2562 prod = vmul_u8(prod, vrev16_u8(prod));
2563 return vget_lane_u8(prod, 0) * vget_lane_u8(prod, 2);
2567 uint8x8_t prod = vmul_u8(
a, vrev16_u8(
a));
2568 prod = vmul_u8(prod, vrev32_u8(prod));
2569 return vget_lane_u8(prod, 0) * vget_lane_u8(prod, 4);
2575 const int16x4_t prod = vmul_s16(
a, vrev32_s16(
a));
2576 return vget_lane_s16(prod, 0) * vget_lane_s16(prod, 2);
2583 prod = vmul_s16(vget_low_s16(
a), vget_high_s16(
a));
2585 prod = vmul_s16(prod, vrev32_s16(prod));
2587 return vget_lane_s16(prod, 0) * vget_lane_s16(prod, 2);
2591 const uint16x4_t prod = vmul_u16(
a, vrev32_u16(
a));
2592 return vget_lane_u16(prod, 0) * vget_lane_u16(prod, 2);
2599 prod = vmul_u16(vget_low_u16(
a), vget_high_u16(
a));
2601 prod = vmul_u16(prod, vrev32_u16(prod));
2603 return vget_lane_u16(prod, 0) * vget_lane_u16(prod, 2);
2606 {
return vget_lane_s32(
a, 0) * vget_lane_s32(
a, 1); }
2610 {
return vget_lane_u32(
a, 0) * vget_lane_u32(
a, 1); }
2614 {
return vgetq_lane_s64(
a, 0) * vgetq_lane_s64(
a, 1); }
2616 {
return vgetq_lane_u64(
a, 0) * vgetq_lane_u64(
a, 1); }
2619 #if EIGEN_ARCH_ARM64
2624 {
return vget_lane_f32(vpmin_f32(
a,
a), 0); }
2627 const float32x2_t
min = vmin_f32(vget_low_f32(
a), vget_high_f32(
a));
2628 return vget_lane_f32(vpmin_f32(
min,
min), 0);
2633 const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(
a));
2634 int8x8_t
min = vpmin_s8(a_dup, a_dup);
2636 return vget_lane_s8(
min, 0);
2638 #if EIGEN_ARCH_ARM64
2644 int8x8_t
min = vpmin_s8(
a,
a);
2647 return vget_lane_s8(
min, 0);
2651 int8x8_t
min = vmin_s8(vget_low_s8(
a), vget_high_s8(
a));
2655 return vget_lane_s8(
min, 0);
2660 const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(
a));
2661 uint8x8_t
min = vpmin_u8(a_dup, a_dup);
2663 return vget_lane_u8(
min, 0);
2665 #if EIGEN_ARCH_ARM64
2679 uint8x8_t
min = vpmin_u8(
a,
a);
2682 return vget_lane_u8(
min, 0);
2686 uint8x8_t
min = vmin_u8(vget_low_u8(
a), vget_high_u8(
a));
2690 return vget_lane_u8(
min, 0);
2694 const int16x4_t
min = vpmin_s16(
a,
a);
2695 return vget_lane_s16(vpmin_s16(
min,
min), 0);
2699 int16x4_t
min = vmin_s16(vget_low_s16(
a), vget_high_s16(
a));
2702 return vget_lane_s16(
min, 0);
2706 const uint16x4_t
min = vpmin_u16(
a,
a);
2707 return vget_lane_u16(vpmin_u16(
min,
min), 0);
2711 uint16x4_t
min = vmin_u16(vget_low_u16(
a), vget_high_u16(
a));
2714 return vget_lane_u16(
min, 0);
2717 {
return vget_lane_s32(vpmin_s32(
a,
a), 0); }
2720 const int32x2_t
min = vmin_s32(vget_low_s32(
a), vget_high_s32(
a));
2721 return vget_lane_s32(vpmin_s32(
min,
min), 0);
2724 {
return vget_lane_u32(vpmin_u32(
a,
a), 0); }
2727 const uint32x2_t
min = vmin_u32(vget_low_u32(
a), vget_high_u32(
a));
2728 return vget_lane_u32(vpmin_u32(
min,
min), 0);
2732 {
return (
std::min)(vgetq_lane_s64(
a, 0), vgetq_lane_s64(
a, 1)); }
2734 {
return (
std::min)(vgetq_lane_u64(
a, 0), vgetq_lane_u64(
a, 1)); }
2737 #if EIGEN_ARCH_ARM64
2742 {
return vget_lane_f32(vpmax_f32(
a,
a), 0); }
2745 const float32x2_t
max = vmax_f32(vget_low_f32(
a), vget_high_f32(
a));
2746 return vget_lane_f32(vpmax_f32(
max,
max), 0);
2751 const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(
a));
2752 int8x8_t
max = vpmax_s8(a_dup, a_dup);
2754 return vget_lane_s8(
max, 0);
2756 #if EIGEN_ARCH_ARM64
2762 int8x8_t
max = vpmax_s8(
a,
a);
2765 return vget_lane_s8(
max, 0);
2769 int8x8_t
max = vmax_s8(vget_low_s8(
a), vget_high_s8(
a));
2773 return vget_lane_s8(
max, 0);
2778 const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(
a));
2779 uint8x8_t
max = vpmax_u8(a_dup, a_dup);
2781 return vget_lane_u8(
max, 0);
2783 #if EIGEN_ARCH_ARM64
2797 uint8x8_t
max = vpmax_u8(
a,
a);
2800 return vget_lane_u8(
max, 0);
2804 uint8x8_t
max = vmax_u8(vget_low_u8(
a), vget_high_u8(
a));
2808 return vget_lane_u8(
max, 0);
2812 const int16x4_t
max = vpmax_s16(
a,
a);
2813 return vget_lane_s16(vpmax_s16(
max,
max), 0);
2817 int16x4_t
max = vmax_s16(vget_low_s16(
a), vget_high_s16(
a));
2820 return vget_lane_s16(
max, 0);
2824 const uint16x4_t
max = vpmax_u16(
a,
a);
2825 return vget_lane_u16(vpmax_u16(
max,
max), 0);
2829 uint16x4_t
max = vmax_u16(vget_low_u16(
a), vget_high_u16(
a));
2832 return vget_lane_u16(
max, 0);
2835 {
return vget_lane_s32(vpmax_s32(
a,
a), 0); }
2838 const int32x2_t
max = vmax_s32(vget_low_s32(
a), vget_high_s32(
a));
2839 return vget_lane_s32(vpmax_s32(
max,
max), 0);
2842 {
return vget_lane_u32(vpmax_u32(
a,
a), 0); }
2845 const uint32x2_t
max = vmax_u32(vget_low_u32(
a), vget_high_u32(
a));
2846 return vget_lane_u32(vpmax_u32(
max,
max), 0);
2850 {
return (
std::max)(vgetq_lane_s64(
a, 0), vgetq_lane_s64(
a, 1)); }
2852 {
return (
std::max)(vgetq_lane_u64(
a, 0), vgetq_lane_u64(
a, 1)); }
2856 uint32x2_t tmp = vorr_u32(vget_low_u32( vreinterpretq_u32_f32(
x)),
2857 vget_high_u32(vreinterpretq_u32_f32(
x)));
2858 return vget_lane_u32(vpmax_u32(tmp, tmp), 0);
2864 template<
typename Packet>
2865 void zip_in_place(Packet&
p1, Packet& p2);
2869 const float32x2x2_t tmp = vzip_f32(
p1, p2);
2876 const float32x4x2_t tmp = vzipq_f32(
p1, p2);
2883 const int8x8x2_t tmp = vzip_s8(
p1, p2);
2890 const int8x16x2_t tmp = vzipq_s8(
p1, p2);
2897 const uint8x8x2_t tmp = vzip_u8(
p1, p2);
2904 const uint8x16x2_t tmp = vzipq_u8(
p1, p2);
2911 const int32x2x2_t tmp = vzip_s32(
p1, p2);
2918 const int32x4x2_t tmp = vzipq_s32(
p1, p2);
2925 const uint32x2x2_t tmp = vzip_u32(
p1, p2);
2932 const uint32x4x2_t tmp = vzipq_u32(
p1, p2);
2939 const int16x4x2_t tmp = vzip_s16(
p1, p2);
2946 const int16x8x2_t tmp = vzipq_s16(
p1, p2);
2953 const uint16x4x2_t tmp = vzip_u16(
p1, p2);
2960 const uint16x8x2_t tmp = vzipq_u16(
p1, p2);
2965 template<
typename Packet>
2967 zip_in_place(kernel.packet[0], kernel.packet[1]);
2970 template<
typename Packet>
2972 zip_in_place(kernel.packet[0], kernel.packet[2]);
2973 zip_in_place(kernel.packet[1], kernel.packet[3]);
2974 zip_in_place(kernel.packet[0], kernel.packet[1]);
2975 zip_in_place(kernel.packet[2], kernel.packet[3]);
2978 template<
typename Packet>
2980 zip_in_place(kernel.packet[0], kernel.packet[4]);
2981 zip_in_place(kernel.packet[1], kernel.packet[5]);
2982 zip_in_place(kernel.packet[2], kernel.packet[6]);
2983 zip_in_place(kernel.packet[3], kernel.packet[7]);
2985 zip_in_place(kernel.packet[0], kernel.packet[2]);
2986 zip_in_place(kernel.packet[1], kernel.packet[3]);
2987 zip_in_place(kernel.packet[4], kernel.packet[6]);
2988 zip_in_place(kernel.packet[5], kernel.packet[7]);
2990 zip_in_place(kernel.packet[0], kernel.packet[1]);
2991 zip_in_place(kernel.packet[2], kernel.packet[3]);
2992 zip_in_place(kernel.packet[4], kernel.packet[5]);
2993 zip_in_place(kernel.packet[6], kernel.packet[7]);
2996 template<
typename Packet>
2999 for (
int i=0;
i<4; ++
i) {
3000 const int m = (1 <<
i);
3002 for (
int j=0;
j<
m; ++
j) {
3003 const int n = (1 << (3-
i));
3005 for (
int k=0; k<
n; ++k) {
3006 const int idx = 2*
j*
n+k;
3007 zip_in_place(kernel.packet[idx], kernel.packet[idx +
n]);
3016 detail::ptranspose_impl(kernel);
3019 detail::ptranspose_impl(kernel);
3024 const int8x8_t
a = vreinterpret_s8_s32(vset_lane_s32(kernel.packet[2], vdup_n_s32(kernel.packet[0]), 1));
3025 const int8x8_t
b = vreinterpret_s8_s32(vset_lane_s32(kernel.packet[3], vdup_n_s32(kernel.packet[1]), 1));
3027 const int8x8x2_t zip8 = vzip_s8(
a,
b);
3028 const int16x4x2_t zip16 = vzip_s16(vreinterpret_s16_s8(zip8.val[0]), vreinterpret_s16_s8(zip8.val[1]));
3030 kernel.packet[0] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[0]), 0);
3031 kernel.packet[1] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[0]), 1);
3032 kernel.packet[2] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[1]), 0);
3033 kernel.packet[3] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[1]), 1);
3036 detail::ptranspose_impl(kernel);
3039 detail::ptranspose_impl(kernel);
3042 detail::ptranspose_impl(kernel);
3045 detail::ptranspose_impl(kernel);
3048 detail::ptranspose_impl(kernel);
3053 const uint8x8_t
a = vreinterpret_u8_u32(vset_lane_u32(kernel.packet[2], vdup_n_u32(kernel.packet[0]), 1));
3054 const uint8x8_t
b = vreinterpret_u8_u32(vset_lane_u32(kernel.packet[3], vdup_n_u32(kernel.packet[1]), 1));
3056 const uint8x8x2_t zip8 = vzip_u8(
a,
b);
3057 const uint16x4x2_t zip16 = vzip_u16(vreinterpret_u16_u8(zip8.val[0]), vreinterpret_u16_u8(zip8.val[1]));
3059 kernel.packet[0] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[0]), 0);
3060 kernel.packet[1] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[0]), 1);
3061 kernel.packet[2] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[1]), 0);
3062 kernel.packet[3] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[1]), 1);
3065 detail::ptranspose_impl(kernel);
3068 detail::ptranspose_impl(kernel);
3071 detail::ptranspose_impl(kernel);
3074 detail::ptranspose_impl(kernel);
3077 detail::ptranspose_impl(kernel);
3081 detail::ptranspose_impl(kernel);
3084 detail::ptranspose_impl(kernel);
3087 detail::ptranspose_impl(kernel);
3091 detail::ptranspose_impl(kernel);
3094 detail::ptranspose_impl(kernel);
3097 detail::ptranspose_impl(kernel);
3101 detail::ptranspose_impl(kernel);
3104 detail::ptranspose_impl(kernel);
3107 detail::zip_in_place(kernel.packet[0], kernel.packet[1]);
3110 detail::ptranspose_impl(kernel);
3116 #if EIGEN_ARCH_ARM64
3117 const int64x2_t tmp1 = vzip1q_s64(kernel.packet[0], kernel.packet[1]);
3118 kernel.packet[1] = vzip2q_s64(kernel.packet[0], kernel.packet[1]);
3119 kernel.packet[0] = tmp1;
3121 const int64x1_t tmp[2][2] = {
3122 { vget_low_s64(kernel.packet[0]), vget_high_s64(kernel.packet[0]) },
3123 { vget_low_s64(kernel.packet[1]), vget_high_s64(kernel.packet[1]) }
3126 kernel.packet[0] = vcombine_s64(tmp[0][0], tmp[1][0]);
3127 kernel.packet[1] = vcombine_s64(tmp[0][1], tmp[1][1]);
3133 #if EIGEN_ARCH_ARM64
3134 const uint64x2_t tmp1 = vzip1q_u64(kernel.packet[0], kernel.packet[1]);
3135 kernel.packet[1] = vzip2q_u64(kernel.packet[0], kernel.packet[1]);
3136 kernel.packet[0] = tmp1;
3138 const uint64x1_t tmp[2][2] = {
3139 { vget_low_u64(kernel.packet[0]), vget_high_u64(kernel.packet[0]) },
3140 { vget_low_u64(kernel.packet[1]), vget_high_u64(kernel.packet[1]) }
3143 kernel.packet[0] = vcombine_u64(tmp[0][0], tmp[1][0]);
3144 kernel.packet[1] = vcombine_u64(tmp[0][1], tmp[1][1]);
3149 {
return vbsl_f32(vreinterpret_u32_f32(mask),
a,
b); }
3151 {
return vbslq_f32(vreinterpretq_u32_f32(mask),
a,
b); }
3153 {
return vbsl_s8(vreinterpret_u8_s8(mask),
a,
b); }
3155 {
return vbslq_s8(vreinterpretq_u8_s8(mask),
a,
b); }
3157 {
return vbsl_u8(mask,
a,
b); }
3159 {
return vbslq_u8(mask,
a,
b); }
3161 {
return vbsl_s16(vreinterpret_u16_s16(mask),
a,
b); }
3163 {
return vbslq_s16(vreinterpretq_u16_s16(mask),
a,
b); }
3165 {
return vbsl_u16(mask,
a,
b); }
3167 {
return vbslq_u16(mask,
a,
b); }
3169 {
return vbsl_s32(vreinterpret_u32_s32(mask),
a,
b); }
3171 {
return vbslq_s32(vreinterpretq_u32_s32(mask),
a,
b); }
3173 {
return vbsl_u32(mask,
a,
b); }
3175 {
return vbslq_u32(mask,
a,
b); }
3177 {
return vbslq_s64(vreinterpretq_u64_s64(mask),
a,
b); }
3179 {
return vbslq_u64(mask,
a,
b); }
3182 #if EIGEN_ARCH_ARMV8
3184 {
return vrndn_f32(
a); }
3187 {
return vrndnq_f32(
a); }
3190 {
return vrndm_f32(
a); }
3193 {
return vrndmq_f32(
a); }
3196 {
return vrndp_f32(
a); }
3199 {
return vrndpq_f32(
a); }
3237 mask =
pand(mask, cst_1);
3238 return psub(tmp, mask);
3247 mask =
pand(mask, cst_1);
3248 return psub(tmp, mask);
3257 mask =
pand(mask, cst_1);
3258 return padd(tmp, mask);
3267 mask =
pand(mask, cst_1);
3268 return padd(tmp, mask);
3280 uint8x8_t
x = vreinterpret_u8_u32(vdup_n_u32(
a));
3281 uint8x8_t
res = vdup_n_u8(0);
3282 uint8x8_t add = vdup_n_u8(0x8);
3283 for (
int i = 0;
i < 4;
i++)
3285 const uint8x8_t temp = vorr_u8(
res, add);
3286 res = vbsl_u8(vcge_u8(
x, vmul_u8(temp, temp)), temp,
res);
3287 add = vshr_n_u8(add, 1);
3289 return vget_lane_u32(vreinterpret_u32_u8(
res), 0);
3293 uint8x8_t
res = vdup_n_u8(0);
3294 uint8x8_t add = vdup_n_u8(0x8);
3295 for (
int i = 0;
i < 4;
i++)
3297 const uint8x8_t temp = vorr_u8(
res, add);
3298 res = vbsl_u8(vcge_u8(
a, vmul_u8(temp, temp)), temp,
res);
3299 add = vshr_n_u8(add, 1);
3305 uint8x16_t
res = vdupq_n_u8(0);
3306 uint8x16_t add = vdupq_n_u8(0x8);
3307 for (
int i = 0;
i < 4;
i++)
3309 const uint8x16_t temp = vorrq_u8(
res, add);
3310 res = vbslq_u8(vcgeq_u8(
a, vmulq_u8(temp, temp)), temp,
res);
3311 add = vshrq_n_u8(add, 1);
3317 uint16x4_t
res = vdup_n_u16(0);
3318 uint16x4_t add = vdup_n_u16(0x80);
3319 for (
int i = 0;
i < 8;
i++)
3321 const uint16x4_t temp = vorr_u16(
res, add);
3322 res = vbsl_u16(vcge_u16(
a, vmul_u16(temp, temp)), temp,
res);
3323 add = vshr_n_u16(add, 1);
3329 uint16x8_t
res = vdupq_n_u16(0);
3330 uint16x8_t add = vdupq_n_u16(0x80);
3331 for (
int i = 0;
i < 8;
i++)
3333 const uint16x8_t temp = vorrq_u16(
res, add);
3334 res = vbslq_u16(vcgeq_u16(
a, vmulq_u16(temp, temp)), temp,
res);
3335 add = vshrq_n_u16(add, 1);
3341 uint32x2_t
res = vdup_n_u32(0);
3342 uint32x2_t add = vdup_n_u32(0x8000);
3343 for (
int i = 0;
i < 16;
i++)
3345 const uint32x2_t temp = vorr_u32(
res, add);
3346 res = vbsl_u32(vcge_u32(
a, vmul_u32(temp, temp)), temp,
res);
3347 add = vshr_n_u32(add, 1);
3353 uint32x4_t
res = vdupq_n_u32(0);
3354 uint32x4_t add = vdupq_n_u32(0x8000);
3355 for (
int i = 0;
i < 16;
i++)
3357 const uint32x4_t temp = vorrq_u32(
res, add);
3358 res = vbslq_u32(vcgeq_u32(
a, vmulq_u32(temp, temp)), temp,
res);
3359 add = vshrq_n_u32(add, 1);
3366 return generic_rsqrt_newton_step<
Packet4f, 2>::run(
a, vrsqrteq_f32(
a));
3371 return generic_rsqrt_newton_step<
Packet2f, 2>::run(
a, vrsqrte_f32(
a));
3375 #if EIGEN_ARCH_ARM64
3380 return generic_sqrt_newton_step<Packet4f>::run(
a,
prsqrt(
a));
3383 return generic_sqrt_newton_step<Packet2f>::run(
a,
prsqrt(
a));
3393 template<>
struct is_arithmetic<
Packet4bf> {
enum { value =
true }; };
3395 template<>
struct packet_traits<
bfloat16> : default_packet_traits
3402 AlignedOnScalar = 1,
3437 template<>
struct unpacket_traits<
Packet4bf>
3439 typedef bfloat16 type;
3445 vectorizable =
true,
3446 masked_load_available =
false,
3447 masked_store_available =
false
3454 const uint16x4x2_t tmp = vzip_u16(
p1, p2);
3467 Packet4ui lsb = vandq_u32(vshrq_n_u32(input, 16), vdupq_n_u32(1));
3470 Packet4ui rounding_bias = vaddq_u32(lsb, vdupq_n_u32(0x7fff));
3473 input = vaddq_u32(input, rounding_bias);
3476 input = vshrq_n_u32(input, 16);
3479 const Packet4ui bf16_nan = vdupq_n_u32(0x7fc0);
3481 input = vbslq_u32(mask, input, bf16_nan);
3484 return vmovn_u32(input);
3489 return Packet4f(vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(
p), 16)));
3493 return vmovn_u32(vreinterpretq_u32_f32(
p));
3666 detail::ptranspose_impl(kernel);
3703 #if EIGEN_COMP_CLANGAPPLE
3707 #define EIGEN_APPLE_DOUBLE_NEON_BUG (EIGEN_COMP_CLANGAPPLE < 6010000)
3709 #define EIGEN_APPLE_DOUBLE_NEON_BUG 0
3712 #if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
3720 template <
typename T> uint64x2_t vreinterpretq_u64_f64(
T a) {
return (uint64x2_t)
a; }
3722 template <
typename T> float64x2_t vreinterpretq_f64_u64(
T a) {
return (float64x2_t)
a; }
3725 #if EIGEN_COMP_MSVC_STRICT
3726 typedef eigen_packet_wrapper<float64x2_t, 18>
Packet2d;
3727 typedef eigen_packet_wrapper<float64x1_t, 19> Packet1d;
3730 double from[2] = {
a,
b};
3731 return vld1q_f64(from);
3736 typedef float64x1_t Packet1d;
3747 const double*
a =
reinterpret_cast<const double*
>(&
m);
3748 const double*
b =
reinterpret_cast<const double*
>(&
n);
3749 Packet2d res = make_packet2d(*(
a + (mask & 1)), *(
b + ((mask >> 1) & 1)));
3755 return shuffle(
a,
b, mask);
3759 return shuffle(
a,
b, 0);
3763 return shuffle(
a,
b, 3);
3765 #define vec2d_duplane(a, p) \
3766 Packet2d(vdupq_laneq_f64(a, p))
3768 template<>
struct packet_traits<double> : default_packet_traits
3775 AlignedOnScalar = 1,
3799 #if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
3813 template<>
struct unpacket_traits<
Packet2d>
3815 typedef double type;
3822 vectorizable =
true,
3823 masked_load_available =
false,
3824 masked_store_available =
false
3832 const double c[] = {0.0,1.0};
3842 const Packet2d mask = make_packet2d(numext::bit_cast<double>(0x8000000000000000ull), 0.0);
3854 #ifdef __ARM_FEATURE_FMA
3857 {
return vfmaq_f64(
c,
a,
b); }
3860 {
return vmlaq_f64(
c,
a,
b); }
3865 #ifdef __ARM_FEATURE_NUMERIC_MAXMIN
3881 {
return vreinterpretq_f64_u64(vandq_u64(vreinterpretq_u64_f64(
a),vreinterpretq_u64_f64(
b))); }
3884 {
return vreinterpretq_f64_u64(vorrq_u64(vreinterpretq_u64_f64(
a),vreinterpretq_u64_f64(
b))); }
3887 {
return vreinterpretq_f64_u64(veorq_u64(vreinterpretq_u64_f64(
a),vreinterpretq_u64_f64(
b))); }
3890 {
return vreinterpretq_f64_u64(vbicq_u64(vreinterpretq_u64_f64(
a),vreinterpretq_u64_f64(
b))); }
3893 {
return vreinterpretq_f64_u64(vcleq_f64(
a,
b)); }
3896 {
return vreinterpretq_f64_u64(vcltq_f64(
a,
b)); }
3899 {
return vreinterpretq_f64_u32(vmvnq_u32(vreinterpretq_u32_u64(vcgeq_f64(
a,
b)))); }
3902 {
return vreinterpretq_f64_u64(vceqq_f64(
a,
b)); }
3920 res = vld1q_lane_f64(from + 0*stride,
res, 0);
3921 res = vld1q_lane_f64(from + 1*stride,
res, 1);
3927 vst1q_lane_f64(to + stride*0, from, 0);
3928 vst1q_lane_f64(to + stride*1, from, 1);
3937 {
return vcombine_f64(vget_high_f64(
a), vget_low_f64(
a)); }
3943 return vreinterpretq_f64_s64(vshrq_n_s64(vreinterpretq_s64_f64(
a), 63));
3947 {
return vaddvq_f64(
a); }
3951 #if EIGEN_COMP_CLANGAPPLE
3953 {
return (vget_low_f64(
a) * vget_high_f64(
a))[0]; }
3956 {
return vget_lane_f64(vmul_f64(vget_low_f64(
a), vget_high_f64(
a)), 0); }
3961 {
return vminvq_f64(
a); }
3965 {
return vmaxvq_f64(
a); }
3971 const float64x2_t tmp1 = vzip1q_f64(kernel.packet[0], kernel.packet[1]);
3972 const float64x2_t tmp2 = vzip2q_f64(kernel.packet[0], kernel.packet[1]);
3974 kernel.packet[0] = tmp1;
3975 kernel.packet[1] = tmp2;
3979 {
return vbslq_f64(vreinterpretq_u64_f64(mask),
a,
b); }
3982 {
return vrndnq_f64(
a); }
3985 {
return vrndmq_f64(
a); }
3988 {
return vrndpq_f64(
a); }
3997 {
return vreinterpretq_f64_u64(vdupq_n_u64(from)); }
4001 return generic_rsqrt_newton_step<
Packet2d, 3>::run(
a, vrsqrteq_f64(
a));
4009 #if EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC
4010 typedef float16x4_t Packet4hf;
4011 typedef float16x8_t Packet8hf;
4014 struct packet_traits<
Eigen::half> : default_packet_traits {
4015 typedef Packet8hf type;
4016 typedef Packet4hf half;
4019 AlignedOnScalar = 1,
4048 HasTanh = packet_traits<float>::HasTanh,
4058 struct unpacket_traits<Packet4hf> {
4060 typedef Packet4hf half;
4064 vectorizable =
true,
4065 masked_load_available =
false,
4066 masked_store_available =
false
4071 struct unpacket_traits<Packet8hf> {
4073 typedef Packet4hf half;
4077 vectorizable =
true,
4078 masked_load_available =
false,
4079 masked_store_available =
false
4084 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4hf predux_half_dowto4<Packet8hf>(
const Packet8hf&
a) {
4085 return vadd_f16(vget_low_f16(
a), vget_high_f16(
a));
4089 EIGEN_STRONG_INLINE Packet8hf pset1<Packet8hf>(
const Eigen::half& from) {
4090 return vdupq_n_f16(from.
x);
4094 EIGEN_STRONG_INLINE Packet4hf pset1<Packet4hf>(
const Eigen::half& from) {
4095 return vdup_n_f16(from.
x);
4099 EIGEN_STRONG_INLINE Packet8hf plset<Packet8hf>(
const Eigen::half&
a) {
4100 const float16_t f[] = {0, 1, 2, 3, 4, 5, 6, 7};
4101 Packet8hf countdown = vld1q_f16(f);
4102 return vaddq_f16(pset1<Packet8hf>(
a), countdown);
4106 EIGEN_STRONG_INLINE Packet4hf plset<Packet4hf>(
const Eigen::half&
a) {
4107 const float16_t f[] = {0, 1, 2, 3};
4108 Packet4hf countdown = vld1_f16(f);
4109 return vadd_f16(pset1<Packet4hf>(
a), countdown);
4113 EIGEN_STRONG_INLINE Packet8hf padd<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4114 return vaddq_f16(
a,
b);
4118 EIGEN_STRONG_INLINE Packet4hf padd<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4119 return vadd_f16(
a,
b);
4123 EIGEN_STRONG_INLINE Packet8hf psub<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4124 return vsubq_f16(
a,
b);
4128 EIGEN_STRONG_INLINE Packet4hf psub<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4129 return vsub_f16(
a,
b);
4133 EIGEN_STRONG_INLINE Packet8hf
pnegate(
const Packet8hf&
a) {
4134 return vnegq_f16(
a);
4138 EIGEN_STRONG_INLINE Packet4hf
pnegate(
const Packet4hf&
a) {
4143 EIGEN_STRONG_INLINE Packet8hf
pconj(
const Packet8hf&
a) {
4148 EIGEN_STRONG_INLINE Packet4hf
pconj(
const Packet4hf&
a) {
4153 EIGEN_STRONG_INLINE Packet8hf pmul<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4154 return vmulq_f16(
a,
b);
4158 EIGEN_STRONG_INLINE Packet4hf pmul<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4159 return vmul_f16(
a,
b);
4163 EIGEN_STRONG_INLINE Packet8hf pdiv<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4164 return vdivq_f16(
a,
b);
4168 EIGEN_STRONG_INLINE Packet4hf pdiv<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4169 return vdiv_f16(
a,
b);
4173 EIGEN_STRONG_INLINE Packet8hf
pmadd(
const Packet8hf&
a,
const Packet8hf&
b,
const Packet8hf&
c) {
4174 return vfmaq_f16(
c,
a,
b);
4178 EIGEN_STRONG_INLINE Packet4hf
pmadd(
const Packet4hf&
a,
const Packet4hf&
b,
const Packet4hf&
c) {
4179 return vfma_f16(
c,
a,
b);
4183 EIGEN_STRONG_INLINE Packet8hf pmin<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4184 return vminq_f16(
a,
b);
4188 EIGEN_STRONG_INLINE Packet4hf pmin<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4189 return vmin_f16(
a,
b);
4192 #ifdef __ARM_FEATURE_NUMERIC_MAXMIN
4194 template<> EIGEN_STRONG_INLINE Packet4hf pmin<PropagateNumbers, Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
return vminnm_f16(
a,
b); }
4195 template<> EIGEN_STRONG_INLINE Packet8hf pmin<PropagateNumbers, Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
return vminnmq_f16(
a,
b); }
4198 template<> EIGEN_STRONG_INLINE Packet4hf pmin<PropagateNaN, Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
return pmin<Packet4hf>(
a,
b); }
4200 template<> EIGEN_STRONG_INLINE Packet8hf pmin<PropagateNaN, Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
return pmin<Packet8hf>(
a,
b); }
4203 EIGEN_STRONG_INLINE Packet8hf pmax<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4204 return vmaxq_f16(
a,
b);
4208 EIGEN_STRONG_INLINE Packet4hf pmax<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4209 return vmax_f16(
a,
b);
4212 #ifdef __ARM_FEATURE_NUMERIC_MAXMIN
4214 template<> EIGEN_STRONG_INLINE Packet4hf pmax<PropagateNumbers, Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
return vmaxnm_f16(
a,
b); }
4215 template<> EIGEN_STRONG_INLINE Packet8hf pmax<PropagateNumbers, Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
return vmaxnmq_f16(
a,
b); }
4218 template<> EIGEN_STRONG_INLINE Packet4hf pmax<PropagateNaN, Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
return pmax<Packet4hf>(
a,
b); }
4220 template<> EIGEN_STRONG_INLINE Packet8hf pmax<PropagateNaN, Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
return pmax<Packet8hf>(
a,
b); }
4222 #define EIGEN_MAKE_ARM_FP16_CMP_8(name) \
4224 EIGEN_STRONG_INLINE Packet8hf pcmp_##name(const Packet8hf& a, const Packet8hf& b) { \
4225 return vreinterpretq_f16_u16(vc##name##q_f16(a, b)); \
4228 #define EIGEN_MAKE_ARM_FP16_CMP_4(name) \
4230 EIGEN_STRONG_INLINE Packet4hf pcmp_##name(const Packet4hf& a, const Packet4hf& b) { \
4231 return vreinterpret_f16_u16(vc##name##_f16(a, b)); \
4234 EIGEN_MAKE_ARM_FP16_CMP_8(eq)
4235 EIGEN_MAKE_ARM_FP16_CMP_8(lt)
4236 EIGEN_MAKE_ARM_FP16_CMP_8(le)
4238 EIGEN_MAKE_ARM_FP16_CMP_4(eq)
4239 EIGEN_MAKE_ARM_FP16_CMP_4(lt)
4240 EIGEN_MAKE_ARM_FP16_CMP_4(le)
4242 #undef EIGEN_MAKE_ARM_FP16_CMP_8
4243 #undef EIGEN_MAKE_ARM_FP16_CMP_4
4246 EIGEN_STRONG_INLINE Packet8hf pcmp_lt_or_nan<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4247 return vreinterpretq_f16_u16(vmvnq_u16(vcgeq_f16(
a,
b)));
4251 EIGEN_STRONG_INLINE Packet4hf pcmp_lt_or_nan<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4252 return vreinterpret_f16_u16(vmvn_u16(vcge_f16(
a,
b)));
4256 EIGEN_STRONG_INLINE Packet8hf print<Packet8hf>(
const Packet8hf&
a)
4257 {
return vrndnq_f16(
a); }
4260 EIGEN_STRONG_INLINE Packet4hf print<Packet4hf>(
const Packet4hf&
a)
4261 {
return vrndn_f16(
a); }
4264 EIGEN_STRONG_INLINE Packet8hf pfloor<Packet8hf>(
const Packet8hf&
a)
4265 {
return vrndmq_f16(
a); }
4268 EIGEN_STRONG_INLINE Packet4hf pfloor<Packet4hf>(
const Packet4hf&
a)
4269 {
return vrndm_f16(
a); }
4272 EIGEN_STRONG_INLINE Packet8hf pceil<Packet8hf>(
const Packet8hf&
a)
4273 {
return vrndpq_f16(
a); }
4276 EIGEN_STRONG_INLINE Packet4hf pceil<Packet4hf>(
const Packet4hf&
a)
4277 {
return vrndp_f16(
a); }
4280 EIGEN_STRONG_INLINE Packet8hf psqrt<Packet8hf>(
const Packet8hf&
a) {
4281 return vsqrtq_f16(
a);
4285 EIGEN_STRONG_INLINE Packet4hf psqrt<Packet4hf>(
const Packet4hf&
a) {
4286 return vsqrt_f16(
a);
4290 EIGEN_STRONG_INLINE Packet8hf pand<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4291 return vreinterpretq_f16_u16(vandq_u16(vreinterpretq_u16_f16(
a), vreinterpretq_u16_f16(
b)));
4295 EIGEN_STRONG_INLINE Packet4hf pand<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4296 return vreinterpret_f16_u16(vand_u16(vreinterpret_u16_f16(
a), vreinterpret_u16_f16(
b)));
4300 EIGEN_STRONG_INLINE Packet8hf por<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4301 return vreinterpretq_f16_u16(vorrq_u16(vreinterpretq_u16_f16(
a), vreinterpretq_u16_f16(
b)));
4305 EIGEN_STRONG_INLINE Packet4hf por<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4306 return vreinterpret_f16_u16(vorr_u16(vreinterpret_u16_f16(
a), vreinterpret_u16_f16(
b)));
4310 EIGEN_STRONG_INLINE Packet8hf pxor<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4311 return vreinterpretq_f16_u16(veorq_u16(vreinterpretq_u16_f16(
a), vreinterpretq_u16_f16(
b)));
4315 EIGEN_STRONG_INLINE Packet4hf pxor<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4316 return vreinterpret_f16_u16(veor_u16(vreinterpret_u16_f16(
a), vreinterpret_u16_f16(
b)));
4320 EIGEN_STRONG_INLINE Packet8hf pandnot<Packet8hf>(
const Packet8hf&
a,
const Packet8hf&
b) {
4321 return vreinterpretq_f16_u16(vbicq_u16(vreinterpretq_u16_f16(
a), vreinterpretq_u16_f16(
b)));
4325 EIGEN_STRONG_INLINE Packet4hf pandnot<Packet4hf>(
const Packet4hf&
a,
const Packet4hf&
b) {
4326 return vreinterpret_f16_u16(vbic_u16(vreinterpret_u16_f16(
a), vreinterpret_u16_f16(
b)));
4330 EIGEN_STRONG_INLINE Packet8hf pload<Packet8hf>(
const Eigen::half* from) {
4335 EIGEN_STRONG_INLINE Packet4hf pload<Packet4hf>(
const Eigen::half* from) {
4340 EIGEN_STRONG_INLINE Packet8hf ploadu<Packet8hf>(
const Eigen::half* from) {
4345 EIGEN_STRONG_INLINE Packet4hf ploadu<Packet4hf>(
const Eigen::half* from) {
4350 EIGEN_STRONG_INLINE Packet8hf ploaddup<Packet8hf>(
const Eigen::half* from) {
4352 packet[0] = from[0].
x;
4353 packet[1] = from[0].
x;
4354 packet[2] = from[1].
x;
4355 packet[3] = from[1].
x;
4356 packet[4] = from[2].
x;
4357 packet[5] = from[2].
x;
4358 packet[6] = from[3].
x;
4359 packet[7] = from[3].
x;
4364 EIGEN_STRONG_INLINE Packet4hf ploaddup<Packet4hf>(
const Eigen::half* from) {
4367 tmp = (float16_t*)&packet;
4376 EIGEN_STRONG_INLINE Packet8hf ploadquad<Packet8hf>(
const Eigen::half* from) {
4378 lo = vld1_dup_f16(
reinterpret_cast<const float16_t*
>(from));
4379 hi = vld1_dup_f16(
reinterpret_cast<const float16_t*
>(from+1));
4380 return vcombine_f16(lo, hi);
4389 return vbslq_f16(vreinterpretq_u16_f16(mask),
a,
b);
4394 return vbsl_f16(vreinterpret_u16_f16(mask),
a,
b);
4402 EIGEN_STRONG_INLINE
void pstore<Eigen::half>(
Eigen::half* to,
const Packet8hf& from) {
4407 EIGEN_STRONG_INLINE
void pstore<Eigen::half>(
Eigen::half* to,
const Packet4hf& from) {
4412 EIGEN_STRONG_INLINE
void pstoreu<Eigen::half>(
Eigen::half* to,
const Packet8hf& from) {
4417 EIGEN_STRONG_INLINE
void pstoreu<Eigen::half>(
Eigen::half* to,
const Packet4hf& from) {
4424 res = vsetq_lane_f16(from[0 * stride].
x,
res, 0);
4425 res = vsetq_lane_f16(from[1 * stride].
x,
res, 1);
4426 res = vsetq_lane_f16(from[2 * stride].
x,
res, 2);
4427 res = vsetq_lane_f16(from[3 * stride].
x,
res, 3);
4428 res = vsetq_lane_f16(from[4 * stride].
x,
res, 4);
4429 res = vsetq_lane_f16(from[5 * stride].
x,
res, 5);
4430 res = vsetq_lane_f16(from[6 * stride].
x,
res, 6);
4431 res = vsetq_lane_f16(from[7 * stride].
x,
res, 7);
4438 res = vset_lane_f16(from[0 * stride].
x,
res, 0);
4439 res = vset_lane_f16(from[1 * stride].
x,
res, 1);
4440 res = vset_lane_f16(from[2 * stride].
x,
res, 2);
4441 res = vset_lane_f16(from[3 * stride].
x,
res, 3);
4447 to[stride * 0].
x = vgetq_lane_f16(from, 0);
4448 to[stride * 1].
x = vgetq_lane_f16(from, 1);
4449 to[stride * 2].
x = vgetq_lane_f16(from, 2);
4450 to[stride * 3].
x = vgetq_lane_f16(from, 3);
4451 to[stride * 4].
x = vgetq_lane_f16(from, 4);
4452 to[stride * 5].
x = vgetq_lane_f16(from, 5);
4453 to[stride * 6].
x = vgetq_lane_f16(from, 6);
4454 to[stride * 7].
x = vgetq_lane_f16(from, 7);
4459 to[stride * 0].
x = vget_lane_f16(from, 0);
4460 to[stride * 1].
x = vget_lane_f16(from, 1);
4461 to[stride * 2].
x = vget_lane_f16(from, 2);
4462 to[stride * 3].
x = vget_lane_f16(from, 3);
4466 EIGEN_STRONG_INLINE
void prefetch<Eigen::half>(
const Eigen::half* addr) {
4471 EIGEN_STRONG_INLINE
Eigen::half pfirst<Packet8hf>(
const Packet8hf&
a) {
4480 EIGEN_STRONG_INLINE
Eigen::half pfirst<Packet4hf>(
const Packet4hf&
a) {
4488 template<> EIGEN_STRONG_INLINE Packet8hf
preverse(
const Packet8hf&
a) {
4489 float16x4_t a_lo, a_hi;
4492 a_r64 = vrev64q_f16(
a);
4493 a_lo = vget_low_f16(a_r64);
4494 a_hi = vget_high_f16(a_r64);
4495 return vcombine_f16(a_hi, a_lo);
4499 EIGEN_STRONG_INLINE Packet4hf preverse<Packet4hf>(
const Packet4hf&
a) {
4500 return vrev64_f16(
a);
4504 EIGEN_STRONG_INLINE Packet8hf pabs<Packet8hf>(
const Packet8hf&
a) {
4505 return vabsq_f16(
a);
4509 EIGEN_STRONG_INLINE Packet8hf
psignbit(
const Packet8hf&
a) {
4510 return vreinterpretq_f16_s16(vshrq_n_s16(vreinterpretq_s16_f16(
a), 15));
4514 EIGEN_STRONG_INLINE Packet4hf pabs<Packet4hf>(
const Packet4hf&
a) {
4519 EIGEN_STRONG_INLINE Packet4hf
psignbit(
const Packet4hf&
a) {
4520 return vreinterpret_f16_s16( vshr_n_s16( vreinterpret_s16_f16(
a), 15));
4524 EIGEN_STRONG_INLINE
Eigen::half predux<Packet8hf>(
const Packet8hf&
a) {
4525 float16x4_t a_lo, a_hi, sum;
4527 a_lo = vget_low_f16(
a);
4528 a_hi = vget_high_f16(
a);
4529 sum = vpadd_f16(a_lo, a_hi);
4530 sum = vpadd_f16(sum, sum);
4531 sum = vpadd_f16(sum, sum);
4534 h.
x = vget_lane_f16(sum, 0);
4539 EIGEN_STRONG_INLINE
Eigen::half predux<Packet4hf>(
const Packet4hf&
a) {
4542 sum = vpadd_f16(
a,
a);
4543 sum = vpadd_f16(sum, sum);
4545 h.
x = vget_lane_f16(sum, 0);
4550 EIGEN_STRONG_INLINE
Eigen::half predux_mul<Packet8hf>(
const Packet8hf&
a) {
4551 float16x4_t a_lo, a_hi, prod;
4553 a_lo = vget_low_f16(
a);
4554 a_hi = vget_high_f16(
a);
4555 prod = vmul_f16(a_lo, a_hi);
4556 prod = vmul_f16(prod, vrev64_f16(prod));
4559 h.
x = vmulh_f16(vget_lane_f16(prod, 0), vget_lane_f16(prod, 1));
4564 EIGEN_STRONG_INLINE
Eigen::half predux_mul<Packet4hf>(
const Packet4hf&
a) {
4566 prod = vmul_f16(
a, vrev64_f16(
a));
4568 h.
x = vmulh_f16(vget_lane_f16(prod, 0), vget_lane_f16(prod, 1));
4573 EIGEN_STRONG_INLINE
Eigen::half predux_min<Packet8hf>(
const Packet8hf&
a) {
4575 h.
x = vminvq_f16(
a);
4580 EIGEN_STRONG_INLINE
Eigen::half predux_min<Packet4hf>(
const Packet4hf&
a) {
4587 EIGEN_STRONG_INLINE
Eigen::half predux_max<Packet8hf>(
const Packet8hf&
a) {
4589 h.
x = vmaxvq_f16(
a);
4594 EIGEN_STRONG_INLINE
Eigen::half predux_max<Packet4hf>(
const Packet4hf&
a) {
4602 const float16x8x2_t zip16_1 = vzipq_f16(kernel.packet[0], kernel.packet[1]);
4603 const float16x8x2_t zip16_2 = vzipq_f16(kernel.packet[2], kernel.packet[3]);
4605 const float32x4x2_t zip32_1 = vzipq_f32(vreinterpretq_f32_f16(zip16_1.val[0]), vreinterpretq_f32_f16(zip16_2.val[0]));
4606 const float32x4x2_t zip32_2 = vzipq_f32(vreinterpretq_f32_f16(zip16_1.val[1]), vreinterpretq_f32_f16(zip16_2.val[1]));
4608 kernel.packet[0] = vreinterpretq_f16_f32(zip32_1.val[0]);
4609 kernel.packet[1] = vreinterpretq_f16_f32(zip32_1.val[1]);
4610 kernel.packet[2] = vreinterpretq_f16_f32(zip32_2.val[0]);
4611 kernel.packet[3] = vreinterpretq_f16_f32(zip32_2.val[1]);
4616 float16_t* tmp = (float16_t*)&kernel;
4617 tmp_x4 = vld4_f16(tmp);
4619 kernel.packet[0] = tmp_x4.val[0];
4620 kernel.packet[1] = tmp_x4.val[1];
4621 kernel.packet[2] = tmp_x4.val[2];
4622 kernel.packet[3] = tmp_x4.val[3];
4626 float16x8x2_t T_1[4];
4628 T_1[0] = vuzpq_f16(kernel.packet[0], kernel.packet[1]);
4629 T_1[1] = vuzpq_f16(kernel.packet[2], kernel.packet[3]);
4630 T_1[2] = vuzpq_f16(kernel.packet[4], kernel.packet[5]);
4631 T_1[3] = vuzpq_f16(kernel.packet[6], kernel.packet[7]);
4633 float16x8x2_t T_2[4];
4634 T_2[0] = vuzpq_f16(T_1[0].val[0], T_1[1].val[0]);
4635 T_2[1] = vuzpq_f16(T_1[0].val[1], T_1[1].val[1]);
4636 T_2[2] = vuzpq_f16(T_1[2].val[0], T_1[3].val[0]);
4637 T_2[3] = vuzpq_f16(T_1[2].val[1], T_1[3].val[1]);
4639 float16x8x2_t T_3[4];
4640 T_3[0] = vuzpq_f16(T_2[0].val[0], T_2[2].val[0]);
4641 T_3[1] = vuzpq_f16(T_2[0].val[1], T_2[2].val[1]);
4642 T_3[2] = vuzpq_f16(T_2[1].val[0], T_2[3].val[0]);
4643 T_3[3] = vuzpq_f16(T_2[1].val[1], T_2[3].val[1]);
4645 kernel.packet[0] = T_3[0].val[0];
4646 kernel.packet[1] = T_3[2].val[0];
4647 kernel.packet[2] = T_3[1].val[0];
4648 kernel.packet[3] = T_3[3].val[0];
4649 kernel.packet[4] = T_3[0].val[1];
4650 kernel.packet[5] = T_3[2].val[1];
4651 kernel.packet[6] = T_3[1].val[1];
4652 kernel.packet[7] = T_3[3].val[1];
const AbsReturnType abs() const
#define EIGEN_DEBUG_ALIGNED_STORE
#define EIGEN_DEBUG_ALIGNED_LOAD
#define EIGEN_DEBUG_UNALIGNED_STORE
#define EIGEN_DEBUG_UNALIGNED_LOAD
#define EIGEN_ALWAYS_INLINE
#define EIGEN_UNROLL_LOOP
#define EIGEN_DEVICE_FUNC
#define EIGEN_OPTIMIZATION_BARRIER(X)
#define EIGEN_ARM_PREFETCH(ADDR)
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
#define vec2d_swizzle2(a, b, mask)
bfloat16() max(const bfloat16 &a, const bfloat16 &b)
EIGEN_CONSTEXPR __bfloat16_raw raw_uint16_to_bfloat16(unsigned short value)
bfloat16() min(const bfloat16 &a, const bfloat16 &b)
Packet2ui pdiv< Packet2ui >(const Packet2ui &, const Packet2ui &)
Packet4uc pset1< Packet4uc >(const uint8_t &from)
Packet4f pcmp_lt< Packet4f >(const Packet4f &a, const Packet4f &b)
int16_t predux_max< Packet4s >(const Packet4s &a)
signed char pfirst< Packet16c >(const Packet16c &a)
Packet8us pand< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet4c pand< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet2d pdiv< Packet2d >(const Packet2d &a, const Packet2d &b)
void pstoreu< int8_t >(int8_t *to, const Packet4c &from)
Packet8uc pxor< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet4s pcmp_eq< Packet4s >(const Packet4s &a, const Packet4s &b)
void prefetch< int8_t >(const int8_t *addr)
Packet16c pabsdiff< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet16uc psub< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet8us pandnot< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet padd(const Packet &a, const Packet &b)
Packet16uc ploadu< Packet16uc >(const unsigned char *from)
Packet4f pmin< PropagateNumbers, Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2ul pcmp_lt< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
uint32_t pfirst< Packet2ui >(const Packet2ui &a)
Packet2i pload< Packet2i >(const int32_t *from)
Packet8s pmax< Packet8s >(const Packet8s &a, const Packet8s &b)
uint64_t pfirst< Packet2ul >(const Packet2ul &a)
Packet2l pand< Packet2l >(const Packet2l &a, const Packet2l &b)
void pscatter< uint16_t, Packet8us >(uint16_t *to, const Packet8us &from, Index stride)
double predux_max< Packet2d >(const Packet2d &a)
uint8_t predux_min< Packet4uc >(const Packet4uc &a)
Packet8uc plset< Packet8uc >(const uint8_t &a)
Packet8f pzero(const Packet8f &)
Packet2l por< Packet2l >(const Packet2l &a, const Packet2l &b)
void pstore< float >(float *to, const Packet4f &from)
Packet4ui pxor< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet16uc pandnot< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet8us pgather< uint16_t, Packet8us >(const uint16_t *from, Index stride)
void pscatter< int64_t, Packet2l >(int64_t *to, const Packet2l &from, Index stride)
uint32_t pfirst< Packet4ui >(const Packet4ui &a)
Packet2i pmul< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet4us pcmp_le< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4s ploaddup< Packet4s >(const int16_t *from)
Packet8c psub< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet16uc pand< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet8c pgather< int8_t, Packet8c >(const int8_t *from, Index stride)
Packet2l ploaddup< Packet2l >(const int64_t *from)
Packet2d pset1frombits< Packet2d >(uint64_t from)
Packet4c pset1< Packet4c >(const int8_t &from)
float predux_max< Packet4f >(const Packet4f &a)
double predux_min< Packet2d >(const Packet2d &a)
void pstoreu< int32_t >(int32_t *to, const Packet4i &from)
Packet2d plset< Packet2d >(const double &a)
Packet4c ploadquad< Packet4c >(const int8_t *from)
Packet4s psub< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet2l plset< Packet2l >(const int64_t &a)
Packet2ul plset< Packet2ul >(const uint64_t &a)
Packet4bf pabsdiff< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2ul pand< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
uint16_t pfirst< Packet4us >(const Packet4us &a)
int32_t predux_mul< Packet2i >(const Packet2i &a)
Packet4f pmin< PropagateNaN, Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4bf pcmp_le< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet4ui pcmp_le< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet4s pand< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet8c plset< Packet8c >(const int8_t &a)
Packet4s pxor< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4c pmin< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet4c pmul< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet16uc pgather< uint8_t, Packet16uc >(const uint8_t *from, Index stride)
Packet2d pmin< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet2d pmul< Packet2d >(const Packet2d &a, const Packet2d &b)
static int eigen_neon_shuffle_mask(int p, int q, int r, int s)
Packet4uc por< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet2f pmax< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet16c pload< Packet16c >(const signed char *from)
Packet8c pand< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4f pcmp_lt_or_nan(const Packet4f &a, const Packet4f &b)
void pscatter< float, Packet2f >(float *to, const Packet2f &from, Index stride)
Packet4ui pabsdiff< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet8uc pgather< uint8_t, Packet8uc >(const uint8_t *from, Index stride)
Packet4uc pgather< uint8_t, Packet4uc >(const uint8_t *from, Index stride)
Packet4f vec4f_unpackhi(const Packet4f &a, const Packet4f &b)
Packet2ul pgather< uint64_t, Packet2ul >(const uint64_t *from, Index stride)
int8_t predux< Packet4c >(const Packet4c &a)
int16_t predux_mul< Packet4s >(const Packet4s &a)
uint64_t predux< Packet2ul >(const Packet2ul &a)
Packet2ul pmin< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet8c pmax< Packet8c >(const Packet8c &a, const Packet8c &b)
void prefetch< int64_t >(const int64_t *addr)
Packet4uc pmax< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet4us pmax< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4f pxor< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2d pfrexp< Packet2d >(const Packet2d &a, Packet2d &exponent)
__vector unsigned char Packet16uc
Packet8bf F32ToBf16(Packet4f p4f)
Packet4c pmax< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet8uc pcmp_le< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet4us ploaddup< Packet4us >(const uint16_t *from)
Packet4f vec4f_unpacklo(const Packet4f &a, const Packet4f &b)
Packet2f pldexp< Packet2f >(const Packet2f &a, const Packet2f &exponent)
Packet16uc plset< Packet16uc >(const unsigned char &a)
Packet4bf F32MaskToBf16Mask(const Packet4f &p)
Packet2ul ploaddup< Packet2ul >(const uint64_t *from)
uint64_t predux_mul< Packet2ul >(const Packet2ul &a)
Packet4f shuffle2< true >(const Packet4f &m, const Packet4f &n, int mask)
Packet16uc pabsdiff< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
void pscatter< uint16_t, Packet4us >(uint16_t *to, const Packet4us &from, Index stride)
Packet8us ploaddup< Packet8us >(const unsigned short int *from)
Packet16c pcmp_lt< Packet16c >(const Packet16c &a, const Packet16c &b)
eigen_packet_wrapper< uint16x4_t, 19 > Packet4bf
uint32_t predux_min< Packet2ui >(const Packet2ui &a)
Packet4c psub< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet2i pand< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet2ul pdiv< Packet2ul >(const Packet2ul &, const Packet2ul &)
Packet8c pdiv< Packet8c >(const Packet8c &, const Packet8c &)
Packet4bf pdiv< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet16uc pcmp_eq< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet2ul ploadu< Packet2ul >(const uint64_t *from)
Packet2f plset< Packet2f >(const float &a)
Packet8uc pload< Packet8uc >(const uint8_t *from)
short int predux_mul< Packet8s >(const Packet8s &a)
Packet2d pmax< PropagateNaN, Packet2d >(const Packet2d &a, const Packet2d &b)
Packet8s padd< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet8us por< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet2ul pcmp_eq< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
int64_t predux_max< Packet2l >(const Packet2l &a)
Packet8s ploaddup< Packet8s >(const short int *from)
Packet16uc pset1< Packet16uc >(const unsigned char &from)
Packet4ui plset< Packet4ui >(const uint32_t &a)
int predux< Packet4i >(const Packet4i &a)
Packet4f pmin< Packet4f >(const Packet4f &a, const Packet4f &b)
float predux_max< Packet2f >(const Packet2f &a)
Packet8s ploadu< Packet8s >(const short int *from)
int32_t predux_max< Packet2i >(const Packet2i &a)
Packet4s pabsdiff< Packet4s >(const Packet4s &a, const Packet4s &b)
float predux_min< Packet4f >(const Packet4f &a)
Packet4f pset1frombits< Packet4f >(unsigned int from)
Packet2d pceil< Packet2d >(const Packet2d &a)
Packet8s pdiv< Packet8s >(const Packet8s &, const Packet8s &)
Packet4s plset< Packet4s >(const int16_t &a)
void pscatter< int8_t, Packet4c >(int8_t *to, const Packet4c &from, Index stride)
void pscatter< uint32_t, Packet4ui >(uint32_t *to, const Packet4ui &from, Index stride)
Packet4ui pmax< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet2ui pabsdiff< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet16c pand< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2l pmin< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet4f shuffle2(const Packet4f &m, const Packet4f &n, int mask)
Packet2f pmin< PropagateNaN, Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4us pload< Packet4us >(const uint16_t *from)
Packet4f por< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2i pandnot< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet2f pabsdiff< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet8c pandnot< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet8us pabsdiff< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet4uc pcmp_lt< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
void pstoreu< uint32_t >(uint32_t *to, const Packet8ui &from)
Packet2l pmul< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet4bf pceil< Packet4bf >(const Packet4bf &a)
int8_t predux< Packet8c >(const Packet8c &a)
Packet2ui pload< Packet2ui >(const uint32_t *from)
Packet4bf ploadu< Packet4bf >(const bfloat16 *from)
uint32_t predux< Packet2ui >(const Packet2ui &a)
eigen_packet_wrapper< int32_t,2 > Packet4c
Packet8c pload< Packet8c >(const int8_t *from)
Packet4us psub< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet16c pdiv< Packet16c >(const Packet16c &, const Packet16c &)
bfloat16 pfirst< Packet4bf >(const Packet4bf &from)
Packet4f pandnot< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet8h pandnot(const Packet8h &a, const Packet8h &b)
Packet4f pldexp< Packet4f >(const Packet4f &a, const Packet4f &exponent)
Packet8uc padd< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet4f pabs(const Packet4f &a)
Packet4bf pmax< PropagateNumbers, Packet4bf >(const Packet4bf &a, const Packet4bf &b)
__vector unsigned short int Packet8us
Packet4c pcmp_lt< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet4c pxor< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet4bf plset< Packet4bf >(const bfloat16 &a)
Packet2f pset1frombits< Packet2f >(uint32_t from)
Packet8f Bf16ToF32(const Packet8bf &a)
Packet8s psub< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet4s pmax< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet2l pcmp_eq< Packet2l >(const Packet2l &a, const Packet2l &b)
float predux< Packet4f >(const Packet4f &a)
Packet4c pabsdiff< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet2ul pmax< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
int16_t pfirst< Packet4s >(const Packet4s &a)
Packet4s ploadu< Packet4s >(const int16_t *from)
Packet4f plset< Packet4f >(const float &a)
Packet8s ploadquad< Packet8s >(const short int *from)
unsigned short int predux< Packet8us >(const Packet8us &a)
uint8_t predux< Packet4uc >(const Packet4uc &a)
Packet4ui pload< Packet4ui >(const uint32_t *from)
Packet4bf pnegate< Packet4bf >(const Packet4bf &a)
Packet2cf pnegate(const Packet2cf &a)
double predux< Packet2d >(const Packet2d &a)
uint32_t predux_max< Packet2ui >(const Packet2ui &a)
bfloat16 predux< Packet4bf >(const Packet4bf &a)
Packet2f paddsub< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet2i pdiv< Packet2i >(const Packet2i &, const Packet2i &)
Packet4bf preverse< Packet4bf >(const Packet4bf &a)
Packet2ui ploaddup< Packet2ui >(const uint32_t *from)
Packet2l pcmp_lt< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet2i pcmp_lt< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet4f pand< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4us pgather< uint16_t, Packet4us >(const uint16_t *from, Index stride)
bfloat16 predux_mul< Packet4bf >(const Packet4bf &a)
Packet2i pabsdiff< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet8uc pandnot< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet4bf pmax< PropagateNaN, Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2ul pcmp_le< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet2ui pand< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
int64_t predux_mul< Packet2l >(const Packet2l &a)
Packet8s pand< Packet8s >(const Packet8s &a, const Packet8s &b)
unsigned short int predux_min< Packet8us >(const Packet8us &a)
Packet8s pset1< Packet8s >(const short int &from)
Packet16c plset< Packet16c >(const signed char &a)
Packet8c pcmp_eq< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4bf pcmp_lt< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2ui pmin< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
void pscatter< uint32_t, Packet2ui >(uint32_t *to, const Packet2ui &from, Index stride)
Packet16uc pmax< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
int predux_max< Packet4i >(const Packet4i &a)
Packet8c pcmp_le< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4bf pset1< Packet4bf >(const bfloat16 &from)
Packet8c pabsdiff< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4c ploadu< Packet4c >(const int8_t *from)
Packet4f pcmp_eq< Packet4f >(const Packet4f &a, const Packet4f &b)
int8_t predux_mul< Packet4c >(const Packet4c &a)
bfloat16 predux_max< Packet4bf >(const Packet4bf &a)
Packet2i pmax< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet4i plogical_shift_right(const Packet4i &a)
signed char predux< Packet16c >(const Packet16c &a)
Packet8us ploadquad< Packet8us >(const unsigned short int *from)
Packet4ui ploadu< Packet4ui >(const uint32_t *from)
Packet2f pcmp_le< Packet2f >(const Packet2f &a, const Packet2f &b)
signed char predux_mul< Packet16c >(const Packet16c &a)
Packet4f pcmp_le< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2d pand< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet16c ploadquad< Packet16c >(const int8_t *from)
Packet8uc ploadquad< Packet8uc >(const uint8_t *from)
Packet4us pxor< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4s pcmp_le< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4ui pmin< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
void pscatter< int16_t, Packet4s >(int16_t *to, const Packet4s &from, Index stride)
double predux_mul< Packet2d >(const Packet2d &a)
Packet4f pdiv< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4bf pload< Packet4bf >(const bfloat16 *from)
uint32_t predux_max< Packet4ui >(const Packet4ui &a)
Packet4bf psub< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2i ploaddup< Packet2i >(const int32_t *from)
Packet16c pcmp_le< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2ul pandnot< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet2ui pandnot< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet2ui padd< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet16uc pmin< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet2l pandnot< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet8uc pdiv< Packet8uc >(const Packet8uc &, const Packet8uc &)
int32_t predux< Packet2i >(const Packet2i &a)
void pstore< uint16_t >(uint16_t *to, const Packet4us &from)
Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
void pstoreu< uint64_t >(uint64_t *to, const Packet2ul &from)
int64_t pfirst< Packet2l >(const Packet2l &a)
Packet8c pmul< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet2l pxor< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet16c pmul< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2ui pmax< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet2l ploadu< Packet2l >(const int64_t *from)
Packet4ui pcmp_eq< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet2ul psub< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet2d ploaddup< Packet2d >(const double *from)
uint32_t predux_min< Packet4ui >(const Packet4ui &a)
Packet2i pgather< int32_t, Packet2i >(const int32_t *from, Index stride)
Packet4s pmin< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4i pmul< Packet4i >(const Packet4i &a, const Packet4i &b)
__vector signed char Packet16c
Packet2f pandnot< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4ui padd< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet2i pmin< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Packet4f paddsub< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet2i pset1< Packet2i >(const int32_t &from)
void pscatter< bfloat16, Packet4bf >(bfloat16 *to, const Packet4bf &from, Index stride)
uint64_t predux_max< Packet2ul >(const Packet2ul &a)
Packet4ui pmul< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
void pscatter< int8_t, Packet8c >(int8_t *to, const Packet8c &from, Index stride)
void pscatter< int32_t, Packet2i >(int32_t *to, const Packet2i &from, Index stride)
Packet4bf pmin< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet4c por< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet16c padd< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2d pgather< double, Packet2d >(const double *from, Index stride)
Packet4uc pmul< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet8us padd< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet2ui ploadu< Packet2ui >(const uint32_t *from)
Packet8s pmin< Packet8s >(const Packet8s &a, const Packet8s &b)
float predux_mul< Packet2f >(const Packet2f &a)
Packet4us pand< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet8us pdiv< Packet8us >(const Packet8us &, const Packet8us &)
void pstoreu< double >(double *to, const Packet4d &from)
Packet2ul pload< Packet2ul >(const uint64_t *from)
Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
void pscatter< int16_t, Packet8s >(int16_t *to, const Packet8s &from, Index stride)
Packet8uc pmin< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
void prefetch< uint16_t >(const uint16_t *addr)
Packet16c ploaddup< Packet16c >(const signed char *from)
Packet16uc pdiv< Packet16uc >(const Packet16uc &, const Packet16uc &)
int8_t predux_min< Packet4c >(const Packet4c &a)
__vector unsigned int Packet4ui
Packet16uc ploaddup< Packet16uc >(const unsigned char *from)
Packet8s pandnot< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet2i ploadu< Packet2i >(const int32_t *from)
Packet4c pcmp_le< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet4uc ploadquad< Packet4uc >(const uint8_t *from)
int32_t predux_min< Packet2i >(const Packet2i &a)
void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
uint64_t predux_min< Packet2ul >(const Packet2ul &a)
Packet8us pcmp_le< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet4uc pmin< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet2l pload< Packet2l >(const int64_t *from)
uint8_t pfirst< Packet4uc >(const Packet4uc &a)
void pscatter< uint64_t, Packet2ul >(uint64_t *to, const Packet2ul &from, Index stride)
Packet4uc pdiv< Packet4uc >(const Packet4uc &, const Packet4uc &)
Packet4ui pcmp_lt< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet4i ploadu< Packet4i >(const int *from)
signed char predux_max< Packet16c >(const Packet16c &a)
Packet2f padd< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet8c ploadu< Packet8c >(const int8_t *from)
Packet8uc ploadu< Packet8uc >(const uint8_t *from)
uint8_t predux_max< Packet8uc >(const Packet8uc &a)
float pfirst< Packet4f >(const Packet4f &a)
int8_t predux_min< Packet8c >(const Packet8c &a)
Packet2d pmax< PropagateNumbers, Packet2d >(const Packet2d &a, const Packet2d &b)
Packet4c pabs< Packet4c >(const Packet4c &a)
Packet pfrexp_generic(const Packet &a, Packet &exponent)
unsigned char predux< Packet16uc >(const Packet16uc &a)
Packet8uc pcmp_eq< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet4i ploadquad< Packet4i >(const int32_t *from)
int8_t pfirst< Packet4c >(const Packet4c &a)
uint16_t predux_min< Packet4us >(const Packet4us &a)
double pfirst< Packet2d >(const Packet2d &a)
Packet pldexp_generic(const Packet &a, const Packet &exponent)
Packet2l pgather< int64_t, Packet2l >(const int64_t *from, Index stride)
Packet4bf pfloor< Packet4bf >(const Packet4bf &a)
Packet8uc pabsdiff< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet8c ploadquad< Packet8c >(const int8_t *from)
Packet8us pcmp_eq< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet4i pxor< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet8s pxor< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet2ui pmul< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
void pstore< int16_t >(int16_t *to, const Packet4s &from)
void pstore< uint32_t >(uint32_t *to, const Packet8ui &from)
int16_t predux_min< Packet4s >(const Packet4s &a)
Packet2f por< Packet2f >(const Packet2f &a, const Packet2f &b)
float pfirst< Packet2f >(const Packet2f &a)
void pstoreu< bfloat16 >(bfloat16 *to, const Packet8bf &from)
Packet4c ploaddup< Packet4c >(const int8_t *from)
Packet8uc pmul< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
int8_t predux_max< Packet4c >(const Packet4c &a)
Packet16c pmin< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet4i pandnot< Packet4i >(const Packet4i &a, const Packet4i &b)
void pstoreu< uint8_t >(uint8_t *to, const Packet4uc &from)
Packet4bf pmin< PropagateNaN, Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2f pcmp_lt_or_nan< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4i pset1< Packet4i >(const int &from)
Packet2l pset1< Packet2l >(const int64_t &from)
Packet4bf pmax< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
void prefetch< uint32_t >(const uint32_t *addr)
int8_t pfirst< Packet8c >(const Packet8c &a)
uint8_t predux_mul< Packet4uc >(const Packet4uc &a)
uint32_t predux_mul< Packet2ui >(const Packet2ui &a)
Packet16uc pcmp_lt< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet8s pload< Packet8s >(const short int *from)
Packet4uc ploadu< Packet4uc >(const uint8_t *from)
Packet4s pgather< int16_t, Packet4s >(const int16_t *from, Index stride)
Packet16c pset1< Packet16c >(const signed char &from)
Packet4f padd< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4i pcmp_eq< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet2ui pcmp_eq< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet2ui plset< Packet2ui >(const uint32_t &a)
Packet2ul pxor< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet4uc pcmp_eq< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet4i pload< Packet4i >(const int *from)
Packet4f ploadu< Packet4f >(const float *from)
Packet4us por< Packet4us >(const Packet4us &a, const Packet4us &b)
float predux_mul< Packet4f >(const Packet4f &a)
Packet2d padd< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet2ul por< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet4f ploadquad< Packet4f >(const float *from)
short int pfirst< Packet8s >(const Packet8s &a)
Packet4f psqrt(const Packet4f &a)
unsigned char predux_min< Packet16uc >(const Packet16uc &a)
Packet8c padd< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet2ui por< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet2d pandnot< Packet2d >(const Packet2d &a, const Packet2d &b)
EIGEN_ALWAYS_INLINE void pscatter< float, Packet4f >(float *to, const Packet4f &from, Index stride)
Packet2f pmax< PropagateNaN, Packet2f >(const Packet2f &a, const Packet2f &b)
Packet8us plset< Packet8us >(const unsigned short int &a)
Packet4ui pdiv< Packet4ui >(const Packet4ui &, const Packet4ui &)
Packet4s pload< Packet4s >(const int16_t *from)
uint16_t predux_mul< Packet4us >(const Packet4us &a)
__vector short int Packet8s
Packet2d vec2d_unpackhi(const Packet2d &a, const Packet2d &b)
Packet4f print(const Packet4f &a)
Packet2f pand< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet2i pcmp_le< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet psub(const Packet &a, const Packet &b)
Packet4uc padd< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
void pstoreu< int64_t >(int64_t *to, const Packet2l &from)
void pscatter< int8_t, Packet16c >(int8_t *to, const Packet16c &from, Index stride)
Packet4i pgather< int32_t, Packet4i >(const int32_t *from, Index stride)
Packet4i ploaddup< Packet4i >(const int *from)
Packet4s pandnot< Packet4s >(const Packet4s &a, const Packet4s &b)
void prefetch< float >(const float *addr)
Packet4f vec4f_swizzle2(const Packet4f &a, const Packet4f &b, int p, int q, int r, int s)
Packet4c plset< Packet4c >(const int8_t &a)
void prefetch< double >(const double *addr)
Packet8us pset1< Packet8us >(const unsigned short int &from)
Packet2f psub< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4f pmul< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet8uc por< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
uint8_t predux< Packet8uc >(const Packet8uc &a)
Packet2d pset1< Packet2d >(const double &from)
Packet2l psub< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet4i pdiv< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet4f shuffle1(const Packet4f &m, int mask)
Packet2d paddsub< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet2ui pgather< uint32_t, Packet2ui >(const uint32_t *from, Index stride)
Packet4s padd< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4s pmul< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet8h pand(const Packet8h &a, const Packet8h &b)
uint16_t predux_max< Packet4us >(const Packet4us &a)
Packet4f pfrexp< Packet4f >(const Packet4f &a, Packet4f &exponent)
uint32_t predux< Packet4ui >(const Packet4ui &a)
Packet2d ploadu< Packet2d >(const double *from)
void pstore< int64_t >(int64_t *to, const Packet2l &from)
Packet8us pmul< Packet8us >(const Packet8us &a, const Packet8us &b)
short int predux_min< Packet8s >(const Packet8s &a)
Packet4uc pload< Packet4uc >(const uint8_t *from)
Packet4i plset< Packet4i >(const int &a)
Packet16uc pload< Packet16uc >(const unsigned char *from)
Packet4uc pand< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet2f pxor< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet16c ploadu< Packet16c >(const signed char *from)
Packet8c por< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet8uc pand< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
void pstoreu< float >(float *to, const Packet4f &from)
Packet2i pxor< Packet2i >(const Packet2i &a, const Packet2i &b)
void prefetch< int16_t >(const int16_t *addr)
unsigned char predux_max< Packet16uc >(const Packet16uc &a)
Packet2f pset1< Packet2f >(const float &from)
Packet16c pmax< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2f pfrexp< Packet2f >(const Packet2f &a, Packet2f &exponent)
int16_t predux< Packet4s >(const Packet4s &a)
int8_t predux_mul< Packet8c >(const Packet8c &a)
EIGEN_ALWAYS_INLINE Packet2f make_packet2f(float a, float b)
void prefetch< uint64_t >(const uint64_t *addr)
void prefetch< int32_t >(const int32_t *addr)
Packet2l pdiv< Packet2l >(const Packet2l &, const Packet2l &)
Packet8s pmul< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet4us pset1< Packet4us >(const uint16_t &from)
Packet4f pmax< PropagateNumbers, Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4c pcmp_eq< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet2d psub< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet2d pfloor< Packet2d >(const Packet2d &a)
void prefetch< uint8_t >(const uint8_t *addr)
Packet8s plset< Packet8s >(const short int &a)
Packet4us pdiv< Packet4us >(const Packet4us &, const Packet4us &)
void pstore< int32_t >(int32_t *to, const Packet4i &from)
EIGEN_ALWAYS_INLINE Packet4f pgather< float, Packet4f >(const float *from, Index stride)
Packet2d pldexp< Packet2d >(const Packet2d &a, const Packet2d &exponent)
Packet16uc por< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
uint8_t predux_max< Packet4uc >(const Packet4uc &a)
int64_t predux_min< Packet2l >(const Packet2l &a)
Packet8h pxor(const Packet8h &a, const Packet8h &b)
Packet2d pmin< PropagateNaN, Packet2d >(const Packet2d &a, const Packet2d &b)
Packet8us psub< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet2ul pmul< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
void pscatter< uint8_t, Packet4uc >(uint8_t *to, const Packet4uc &from, Index stride)
Packet4us pcmp_lt< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4us padd< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4uc ploaddup< Packet4uc >(const uint8_t *from)
Packet16c psub< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet2d pmin< PropagateNumbers, Packet2d >(const Packet2d &a, const Packet2d &b)
int predux_min< Packet4i >(const Packet4i &a)
Packet8us pmax< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet4i pcmp_lt< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet4i padd< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet4us pandnot< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet2i por< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet4f pabs< Packet4f >(const Packet4f &a)
Packet4i psub< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet8s pcmp_lt< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet4c padd< Packet4c >(const Packet4c &a, const Packet4c &b)
Packet4ui psub< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet16c pxor< Packet16c >(const Packet16c &a, const Packet16c &b)
int32_t pfirst< Packet2i >(const Packet2i &a)
Packet2d pxor< Packet2d >(const Packet2d &a, const Packet2d &b)
unsigned short int pfirst< Packet8us >(const Packet8us &a)
Packet4ui ploaddup< Packet4ui >(const uint32_t *from)
Packet8bf psignbit(const Packet8bf &a)
Packet8s pcmp_eq< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet4ui ploadquad< Packet4ui >(const uint32_t *from)
int predux_mul< Packet4i >(const Packet4i &a)
bfloat16 predux_min< Packet4bf >(const Packet4bf &a)
Packet16uc pxor< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet4s pcmp_lt< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4us pmin< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet2ui pxor< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
int pfirst< Packet4i >(const Packet4i &a)
Packet2l pmax< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet8uc pmax< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet2f pmin< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4s pset1< Packet4s >(const int16_t &from)
Packet2l padd< Packet2l >(const Packet2l &a, const Packet2l &b)
Packet4bf pgather< bfloat16, Packet4bf >(const bfloat16 *from, Index stride)
Packet4c pandnot< Packet4c >(const Packet4c &a, const Packet4c &b)
void pstore< uint64_t >(uint64_t *to, const Packet2ul &from)
Packet2ui pcmp_lt< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet4i pmax< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet2f pfloor< Packet2f >(const Packet2f &a)
Packet2d vec2d_unpacklo(const Packet2d &a, const Packet2d &b)
Packet16c pandnot< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet4bf print< Packet4bf >(const Packet4bf &a)
Packet4ui pgather< uint32_t, Packet4ui >(const uint32_t *from, Index stride)
Packet4i por< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet2cf pconj(const Packet2cf &a)
Packet2d por< Packet2d >(const Packet2d &a, const Packet2d &b)
Packet4us ploadu< Packet4us >(const uint16_t *from)
short int predux< Packet8s >(const Packet8s &a)
unsigned char pfirst< Packet16uc >(const Packet16uc &a)
Packet2ui psub< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
Packet2i pcmp_eq< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet4bf padd< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet4f pmax< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet16uc pcmp_le< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet4us pmul< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet8s pgather< int16_t, Packet8s >(const int16_t *from, Index stride)
Packet4i pmin< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet4i pand< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet2f pceil< Packet2f >(const Packet2f &a)
Packet8uc psub< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet2f ploadu< Packet2f >(const float *from)
Packet8us pxor< Packet8us >(const Packet8us &a, const Packet8us &b)
Packet2d pload< Packet2d >(const double *from)
Packet2i psub< Packet2i >(const Packet2i &a, const Packet2i &b)
Packet2i plset< Packet2i >(const int32_t &a)
Packet4f psub< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet4us pcmp_eq< Packet4us >(const Packet4us &a, const Packet4us &b)
Packet4i plogical_shift_left(const Packet4i &a)
void pstore< int8_t >(int8_t *to, const Packet4c &from)
void pscatter< int32_t, Packet4i >(int32_t *to, const Packet4i &from, Index stride)
Packet2cf preverse(const Packet2cf &a)
int8_t predux_max< Packet8c >(const Packet8c &a)
Packet4i parithmetic_shift_right(const Packet4i &a)
Packet4us pabsdiff< Packet4us >(const Packet4us &a, const Packet4us &b)
void pstoreu< uint16_t >(uint16_t *to, const Packet4us &from)
Packet4uc pcmp_le< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
void pstore< uint8_t >(uint8_t *to, const Packet4uc &from)
Packet8s pcmp_le< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet4f pload< Packet4f >(const float *from)
Packet4f pcmp_lt_or_nan< Packet4f >(const Packet4f &a, const Packet4f &b)
uint8_t predux_mul< Packet8uc >(const Packet8uc &a)
Packet4uc plset< Packet4uc >(const uint8_t &a)
Packet8h por(const Packet8h &a, const Packet8h &b)
void pscatter< uint8_t, Packet8uc >(uint8_t *to, const Packet8uc &from, Index stride)
Packet4f pset1< Packet4f >(const float &from)
Packet4i pcmp_lt(const Packet4i &a, const Packet4i &b)
Packet2f pmul< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4f ploaddup< Packet4f >(const float *from)
Packet16c por< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet4c pgather< int8_t, Packet4c >(const int8_t *from, Index stride)
Packet2f pload< Packet2f >(const float *from)
Packet2f ploaddup< Packet2f >(const float *from)
Packet4ui pset1< Packet4ui >(const uint32_t &from)
Packet2f pcmp_lt< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet8s pabsdiff< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet2i padd< Packet2i >(const Packet2i &a, const Packet2i &b)
unsigned char predux_mul< Packet16uc >(const Packet16uc &a)
Packet2ul padd< Packet2ul >(const Packet2ul &a, const Packet2ul &b)
Packet4c pdiv< Packet4c >(const Packet4c &, const Packet4c &)
uint8_t pfirst< Packet8uc >(const Packet8uc &a)
float predux< Packet2f >(const Packet2f &a)
Packet4f pmax< PropagateNaN, Packet4f >(const Packet4f &a, const Packet4f &b)
Packet8uc pset1< Packet8uc >(const uint8_t &from)
Packet4c predux_half_dowto4(const Packet8c &a)
Packet4f pfloor< Packet4f >(const Packet4f &a)
short int predux_max< Packet8s >(const Packet8s &a)
Packet16uc padd< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet4uc pxor< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
unsigned short int predux_max< Packet8us >(const Packet8us &a)
Packet2f pgather< float, Packet2f >(const float *from, Index stride)
Packet16c pcmp_eq< Packet16c >(const Packet16c &a, const Packet16c &b)
Packet8s por< Packet8s >(const Packet8s &a, const Packet8s &b)
Packet2l pcmp_le< Packet2l >(const Packet2l &a, const Packet2l &b)
void pstore< bfloat16 >(bfloat16 *to, const Packet8bf &from)
Packet16uc pmul< Packet16uc >(const Packet16uc &a, const Packet16uc &b)
Packet2f pdiv< Packet2f >(const Packet2f &a, const Packet2f &b)
Packet4bf pmul< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet4i pcmp_le< Packet4i >(const Packet4i &a, const Packet4i &b)
EIGEN_ALWAYS_INLINE Packet4f make_packet4f(float a, float b, float c, float d)
Packet16uc ploadquad< Packet16uc >(const uint8_t *from)
Packet4uc psub< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
eigen_packet_wrapper< uint32_t,5 > Packet4uc
Packet4i pabsdiff< Packet4i >(const Packet4i &a, const Packet4i &b)
Packet2f pcmp_eq< Packet2f >(const Packet2f &a, const Packet2f &b)
uint16_t predux< Packet4us >(const Packet4us &a)
Packet4s pdiv< Packet4s >(const Packet4s &, const Packet4s &)
Packet8c pcmp_lt< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4bf pmin< PropagateNumbers, Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet8c pmin< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4ui pand< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet8uc ploaddup< Packet8uc >(const uint8_t *from)
void pscatter< double, Packet2d >(double *to, const Packet2d &from, Index stride)
Packet8us pcmp_lt< Packet8us >(const Packet8us &a, const Packet8us &b)
unsigned short int predux_mul< Packet8us >(const Packet8us &a)
void pscatter< uint8_t, Packet16uc >(uint8_t *to, const Packet16uc &from, Index stride)
Packet4f pabsdiff< Packet4f >(const Packet4f &a, const Packet4f &b)
Packet8us ploadu< Packet8us >(const unsigned short int *from)
Packet4f vec4f_movelh(const Packet4f &a, const Packet4f &b)
Packet8us pload< Packet8us >(const unsigned short int *from)
signed char predux_min< Packet16c >(const Packet16c &a)
Packet2ui pcmp_le< Packet2ui >(const Packet2ui &a, const Packet2ui &b)
bool predux_any(const Packet4f &x)
Packet4bf pcmp_eq< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet4f vec4f_movehl(const Packet4f &a, const Packet4f &b)
Packet16c pgather< int8_t, Packet16c >(const int8_t *from, Index stride)
float predux_min< Packet2f >(const Packet2f &a)
Packet4c pload< Packet4c >(const int8_t *from)
Packet2ul pset1< Packet2ul >(const uint64_t &from)
Packet4ui por< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet4ui pandnot< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Packet8uc pcmp_lt< Packet8uc >(const Packet8uc &a, const Packet8uc &b)
Packet8us pmin< Packet8us >(const Packet8us &a, const Packet8us &b)
void pstore< double >(double *to, const Packet4d &from)
Packet4s por< Packet4s >(const Packet4s &a, const Packet4s &b)
Packet4f pcmp_le(const Packet4f &a, const Packet4f &b)
Packet4f pceil< Packet4f >(const Packet4f &a)
uint32_t predux_mul< Packet4ui >(const Packet4ui &a)
Packet4bf ploaddup< Packet4bf >(const bfloat16 *from)
Packet4f vec4f_swizzle1(const Packet4f &a, int p, int q, int r, int s)
Packet8c pset1< Packet8c >(const int8_t &from)
uint8_t predux_min< Packet8uc >(const Packet8uc &a)
Packet4us plset< Packet4us >(const uint16_t &a)
Packet8c ploaddup< Packet8c >(const int8_t *from)
Packet8c pxor< Packet8c >(const Packet8c &a, const Packet8c &b)
Packet4uc pandnot< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet4uc pabsdiff< Packet4uc >(const Packet4uc &a, const Packet4uc &b)
Packet4f prsqrt(const Packet4f &a)
Packet2ui pset1< Packet2ui >(const uint32_t &from)
Packet4bf pcmp_lt_or_nan< Packet4bf >(const Packet4bf &a, const Packet4bf &b)
Packet2d pmax< Packet2d >(const Packet2d &a, const Packet2d &b)
void pstoreu< int16_t >(int16_t *to, const Packet4s &from)
int64_t predux< Packet2l >(const Packet2l &a)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.