Loading Eigen/src/Core/ConcatOp.h +2 −2 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ struct evaluator<Concat<Direction, LhsType, RhsType>> : evaluator_base<Concat<Di template <int LoadMode, typename PacketType> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetBoundary(Index row, Index col) const { constexpr int packetSize = unpacket_traits<PacketType>::size; EIGEN_ALIGN_MAX Scalar tmp[packetSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<PacketType>::alignment) Scalar tmp[packetSize]; for (int i = 0; i < packetSize; ++i) tmp[i] = coeff(row + (Direction == Vertical ? i : 0), col + (Direction == Horizontal ? i : 0)); return pload<PacketType>(tmp); Loading @@ -279,7 +279,7 @@ struct evaluator<Concat<Direction, LhsType, RhsType>> : evaluator_base<Concat<Di template <int LoadMode, typename PacketType> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetBoundaryLinear(Index index) const { constexpr int packetSize = unpacket_traits<PacketType>::size; EIGEN_ALIGN_MAX Scalar tmp[packetSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<PacketType>::alignment) Scalar tmp[packetSize]; for (int i = 0; i < packetSize; ++i) tmp[i] = coeff(index + i); return pload<PacketType>(tmp); } Loading Eigen/src/Core/GenericPacketMath.h +7 −7 Original line number Diff line number Diff line Loading @@ -786,7 +786,7 @@ EIGEN_DEVICE_FUNC inline Packet pload_partial(const typename unpacket_traits<Pac const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet"); using Scalar = typename unpacket_traits<Packet>::type; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) { elements[i] = from[i - offset]; } Loading @@ -807,7 +807,7 @@ EIGEN_DEVICE_FUNC inline Packet ploadu_partial(const typename unpacket_traits<Pa const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet"); using Scalar = typename unpacket_traits<Packet>::type; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) { elements[i] = from[i - offset]; } Loading Loading @@ -1064,7 +1064,7 @@ template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstore_partial(Scalar* to, const Packet& from, const Index n, const Index offset = 0) { const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet"); EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) { to[i] = elements[i + offset]; Loading @@ -1082,7 +1082,7 @@ template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstoreu_partial(Scalar* to, const Packet& from, const Index n, const Index offset = 0) { const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet"); EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) { to[i] = elements[i + offset]; Loading @@ -1105,7 +1105,7 @@ EIGEN_DEVICE_FUNC inline Packet pgather(const Scalar* from, Index /*stride*/) { template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline Packet pgather_partial(const Scalar* from, Index stride, const Index n) { const Index packet_size = unpacket_traits<Packet>::size; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = 0; i < numext::mini(n, packet_size); i++) { elements[i] = from[i * stride]; } Loading @@ -1120,7 +1120,7 @@ EIGEN_DEVICE_FUNC inline void pscatter(Scalar* to, const Packet& from, Index /*s template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pscatter_partial(Scalar* to, const Packet& from, Index stride, const Index n) { const Index packet_size = unpacket_traits<Packet>::size; EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size); i++) { to[i * stride] = elements[i]; Loading Loading @@ -1481,7 +1481,7 @@ template <typename Packet, typename Op> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux_helper(const Packet& a, Op op) { using Scalar = typename unpacket_traits<Packet>::type; const size_t n = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[n]; pstoreu<Scalar>(elements, a); for (size_t k = n / 2; k > 0; k /= 2) { for (size_t i = 0; i < k; ++i) { Loading Eigen/src/Core/arch/AltiVec/TypeCasting.h +3 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4i>(const Packet4i& a) #ifdef EIGEN_VECTORIZE_VSX template <> inline Packet2l pcast<Packet2d, Packet2l>(const Packet2d& x) { EIGEN_ALIGN_MAX double dtmp[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2d>::alignment) double dtmp[2]; pstore(dtmp, x); EIGEN_ALIGN_MAX long long itmp[2] = {static_cast<long long>(dtmp[0]), static_cast<long long>(dtmp[1])}; return vec_xl(0, itmp); Loading @@ -142,7 +142,8 @@ template <> inline Packet2d pcast<Packet2l, Packet2d>(const Packet2l& x) { EIGEN_ALIGN_MAX long long itmp[2]; vec_xst(x, 0, itmp); EIGEN_ALIGN_MAX double dtmp[2] = {static_cast<double>(itmp[0]), static_cast<double>(itmp[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2d>::alignment) double dtmp[2] = {static_cast<double>(itmp[0]), static_cast<double>(itmp[1])}; return pload<Packet2d>(dtmp); } #endif Loading Eigen/src/Core/arch/Default/GenericPacketMathTrig.h +5 −5 Original line number Diff line number Diff line Loading @@ -149,9 +149,9 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS if (predux_any(pcmp_le(pset1<Packet>(huge_th), pabs(_x)))) { const int PacketSize = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Eigen::numext::int32_t y_int2[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) float vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) float x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Eigen::numext::int32_t y_int2[PacketSize]; pstoreu(vals, pabs(_x)); pstoreu(x_cpy, x); pstoreu(y_int2, y_int); Loading Loading @@ -394,8 +394,8 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS // for what is in practice a rare path), so these inputs fall back to the scalar libm. if (EIGEN_PREDICT_FALSE(predux_any(pcmp_le(pset1<Packet>(huge_th), x_abs)))) { const int PacketSize = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double sincos_vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) double sincos_vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) double x_cpy[PacketSize]; pstoreu(x_cpy, x); pstoreu(sincos_vals, sFinalRes); for (int k = 0; k < PacketSize; ++k) { Loading Eigen/src/Core/arch/NEON/TypeCasting.h +14 −10 Original line number Diff line number Diff line Loading @@ -1181,11 +1181,12 @@ EIGEN_STRONG_INLINE Packet4f pcast<Packet2l, Packet4f>(const Packet2l& a, const #if EIGEN_ARCH_ARM64 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_s64(a)), vcvt_f32_f64(vcvtq_f64_s64(b))); #else EIGEN_ALIGN_MAX int64_t lvals[4]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2l>::alignment) int64_t lvals[4]; pstore(lvals, a); pstore(lvals + 2, b); EIGEN_ALIGN_MAX float fvals[4] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1]), static_cast<float>(lvals[2]), static_cast<float>(lvals[3])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet4f>::alignment) float fvals[4] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1]), static_cast<float>(lvals[2]), static_cast<float>(lvals[3])}; return pload<Packet4f>(fvals); #endif } Loading @@ -1195,9 +1196,10 @@ EIGEN_STRONG_INLINE Packet2f pcast<Packet2l, Packet2f>(const Packet2l& a) { #if EIGEN_ARCH_ARM64 return vcvt_f32_f64(vcvtq_f64_s64(a)); #else EIGEN_ALIGN_MAX int64_t lvals[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2l>::alignment) int64_t lvals[2]; pstore(lvals, a); EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2f>::alignment) float fvals[2] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1])}; return pload<Packet2f>(fvals); #endif } Loading Loading @@ -1319,11 +1321,12 @@ EIGEN_STRONG_INLINE Packet4f pcast<Packet2ul, Packet4f>(const Packet2ul& a, cons #if EIGEN_ARCH_ARM64 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_u64(a)), vcvt_f32_f64(vcvtq_f64_u64(b))); #else EIGEN_ALIGN_MAX uint64_t uvals[4]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2ul>::alignment) uint64_t uvals[4]; pstore(uvals, a); pstore(uvals + 2, b); EIGEN_ALIGN_MAX float fvals[4] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1]), static_cast<float>(uvals[2]), static_cast<float>(uvals[3])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet4f>::alignment) float fvals[4] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1]), static_cast<float>(uvals[2]), static_cast<float>(uvals[3])}; return pload<Packet4f>(fvals); #endif } Loading @@ -1332,9 +1335,10 @@ EIGEN_STRONG_INLINE Packet2f pcast<Packet2ul, Packet2f>(const Packet2ul& a) { #if EIGEN_ARCH_ARM64 return vcvt_f32_f64(vcvtq_f64_u64(a)); #else EIGEN_ALIGN_MAX uint64_t uvals[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2ul>::alignment) uint64_t uvals[2]; pstore(uvals, a); EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2f>::alignment) float fvals[2] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1])}; return pload<Packet2f>(fvals); #endif } Loading Loading
Eigen/src/Core/ConcatOp.h +2 −2 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ struct evaluator<Concat<Direction, LhsType, RhsType>> : evaluator_base<Concat<Di template <int LoadMode, typename PacketType> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetBoundary(Index row, Index col) const { constexpr int packetSize = unpacket_traits<PacketType>::size; EIGEN_ALIGN_MAX Scalar tmp[packetSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<PacketType>::alignment) Scalar tmp[packetSize]; for (int i = 0; i < packetSize; ++i) tmp[i] = coeff(row + (Direction == Vertical ? i : 0), col + (Direction == Horizontal ? i : 0)); return pload<PacketType>(tmp); Loading @@ -279,7 +279,7 @@ struct evaluator<Concat<Direction, LhsType, RhsType>> : evaluator_base<Concat<Di template <int LoadMode, typename PacketType> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetBoundaryLinear(Index index) const { constexpr int packetSize = unpacket_traits<PacketType>::size; EIGEN_ALIGN_MAX Scalar tmp[packetSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<PacketType>::alignment) Scalar tmp[packetSize]; for (int i = 0; i < packetSize; ++i) tmp[i] = coeff(index + i); return pload<PacketType>(tmp); } Loading
Eigen/src/Core/GenericPacketMath.h +7 −7 Original line number Diff line number Diff line Loading @@ -786,7 +786,7 @@ EIGEN_DEVICE_FUNC inline Packet pload_partial(const typename unpacket_traits<Pac const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet"); using Scalar = typename unpacket_traits<Packet>::type; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) { elements[i] = from[i - offset]; } Loading @@ -807,7 +807,7 @@ EIGEN_DEVICE_FUNC inline Packet ploadu_partial(const typename unpacket_traits<Pa const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet"); using Scalar = typename unpacket_traits<Packet>::type; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) { elements[i] = from[i - offset]; } Loading Loading @@ -1064,7 +1064,7 @@ template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstore_partial(Scalar* to, const Packet& from, const Index n, const Index offset = 0) { const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet"); EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) { to[i] = elements[i + offset]; Loading @@ -1082,7 +1082,7 @@ template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstoreu_partial(Scalar* to, const Packet& from, const Index n, const Index offset = 0) { const Index packet_size = unpacket_traits<Packet>::size; eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet"); EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) { to[i] = elements[i + offset]; Loading @@ -1105,7 +1105,7 @@ EIGEN_DEVICE_FUNC inline Packet pgather(const Scalar* from, Index /*stride*/) { template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline Packet pgather_partial(const Scalar* from, Index stride, const Index n) { const Index packet_size = unpacket_traits<Packet>::size; EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size] = {Scalar(0)}; for (Index i = 0; i < numext::mini(n, packet_size); i++) { elements[i] = from[i * stride]; } Loading @@ -1120,7 +1120,7 @@ EIGEN_DEVICE_FUNC inline void pscatter(Scalar* to, const Packet& from, Index /*s template <typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pscatter_partial(Scalar* to, const Packet& from, Index stride, const Index n) { const Index packet_size = unpacket_traits<Packet>::size; EIGEN_ALIGN_MAX Scalar elements[packet_size]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[packet_size]; pstore<Scalar>(elements, from); for (Index i = 0; i < numext::mini(n, packet_size); i++) { to[i * stride] = elements[i]; Loading Loading @@ -1481,7 +1481,7 @@ template <typename Packet, typename Op> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux_helper(const Packet& a, Op op) { using Scalar = typename unpacket_traits<Packet>::type; const size_t n = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Scalar elements[n]; pstoreu<Scalar>(elements, a); for (size_t k = n / 2; k > 0; k /= 2) { for (size_t i = 0; i < k; ++i) { Loading
Eigen/src/Core/arch/AltiVec/TypeCasting.h +3 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f, Packet4i>(const Packet4i& a) #ifdef EIGEN_VECTORIZE_VSX template <> inline Packet2l pcast<Packet2d, Packet2l>(const Packet2d& x) { EIGEN_ALIGN_MAX double dtmp[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2d>::alignment) double dtmp[2]; pstore(dtmp, x); EIGEN_ALIGN_MAX long long itmp[2] = {static_cast<long long>(dtmp[0]), static_cast<long long>(dtmp[1])}; return vec_xl(0, itmp); Loading @@ -142,7 +142,8 @@ template <> inline Packet2d pcast<Packet2l, Packet2d>(const Packet2l& x) { EIGEN_ALIGN_MAX long long itmp[2]; vec_xst(x, 0, itmp); EIGEN_ALIGN_MAX double dtmp[2] = {static_cast<double>(itmp[0]), static_cast<double>(itmp[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2d>::alignment) double dtmp[2] = {static_cast<double>(itmp[0]), static_cast<double>(itmp[1])}; return pload<Packet2d>(dtmp); } #endif Loading
Eigen/src/Core/arch/Default/GenericPacketMathTrig.h +5 −5 Original line number Diff line number Diff line Loading @@ -149,9 +149,9 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS if (predux_any(pcmp_le(pset1<Packet>(huge_th), pabs(_x)))) { const int PacketSize = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Eigen::numext::int32_t y_int2[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) float vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) float x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) Eigen::numext::int32_t y_int2[PacketSize]; pstoreu(vals, pabs(_x)); pstoreu(x_cpy, x); pstoreu(y_int2, y_int); Loading Loading @@ -394,8 +394,8 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS // for what is in practice a rare path), so these inputs fall back to the scalar libm. if (EIGEN_PREDICT_FALSE(predux_any(pcmp_le(pset1<Packet>(huge_th), x_abs)))) { const int PacketSize = unpacket_traits<Packet>::size; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double sincos_vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double x_cpy[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) double sincos_vals[PacketSize]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet>::alignment) double x_cpy[PacketSize]; pstoreu(x_cpy, x); pstoreu(sincos_vals, sFinalRes); for (int k = 0; k < PacketSize; ++k) { Loading
Eigen/src/Core/arch/NEON/TypeCasting.h +14 −10 Original line number Diff line number Diff line Loading @@ -1181,11 +1181,12 @@ EIGEN_STRONG_INLINE Packet4f pcast<Packet2l, Packet4f>(const Packet2l& a, const #if EIGEN_ARCH_ARM64 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_s64(a)), vcvt_f32_f64(vcvtq_f64_s64(b))); #else EIGEN_ALIGN_MAX int64_t lvals[4]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2l>::alignment) int64_t lvals[4]; pstore(lvals, a); pstore(lvals + 2, b); EIGEN_ALIGN_MAX float fvals[4] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1]), static_cast<float>(lvals[2]), static_cast<float>(lvals[3])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet4f>::alignment) float fvals[4] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1]), static_cast<float>(lvals[2]), static_cast<float>(lvals[3])}; return pload<Packet4f>(fvals); #endif } Loading @@ -1195,9 +1196,10 @@ EIGEN_STRONG_INLINE Packet2f pcast<Packet2l, Packet2f>(const Packet2l& a) { #if EIGEN_ARCH_ARM64 return vcvt_f32_f64(vcvtq_f64_s64(a)); #else EIGEN_ALIGN_MAX int64_t lvals[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2l>::alignment) int64_t lvals[2]; pstore(lvals, a); EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2f>::alignment) float fvals[2] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1])}; return pload<Packet2f>(fvals); #endif } Loading Loading @@ -1319,11 +1321,12 @@ EIGEN_STRONG_INLINE Packet4f pcast<Packet2ul, Packet4f>(const Packet2ul& a, cons #if EIGEN_ARCH_ARM64 return vcombine_f32(vcvt_f32_f64(vcvtq_f64_u64(a)), vcvt_f32_f64(vcvtq_f64_u64(b))); #else EIGEN_ALIGN_MAX uint64_t uvals[4]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2ul>::alignment) uint64_t uvals[4]; pstore(uvals, a); pstore(uvals + 2, b); EIGEN_ALIGN_MAX float fvals[4] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1]), static_cast<float>(uvals[2]), static_cast<float>(uvals[3])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet4f>::alignment) float fvals[4] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1]), static_cast<float>(uvals[2]), static_cast<float>(uvals[3])}; return pload<Packet4f>(fvals); #endif } Loading @@ -1332,9 +1335,10 @@ EIGEN_STRONG_INLINE Packet2f pcast<Packet2ul, Packet2f>(const Packet2ul& a) { #if EIGEN_ARCH_ARM64 return vcvt_f32_f64(vcvtq_f64_u64(a)); #else EIGEN_ALIGN_MAX uint64_t uvals[2]; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2ul>::alignment) uint64_t uvals[2]; pstore(uvals, a); EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1])}; EIGEN_ALIGN_TO_BOUNDARY(unpacket_traits<Packet2f>::alignment) float fvals[2] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1])}; return pload<Packet2f>(fvals); #endif } Loading