mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 19:59:05 +08:00
fix AltiVec ploaddup
This commit is contained in:
parent
28d17c5390
commit
bb9a465c5a
@ -295,15 +295,17 @@ template<> EIGEN_STRONG_INLINE Packet4i ploadu<Packet4i>(const int* from)
|
|||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet4f ploaddup<Packet4f>(const float* from)
|
template<> EIGEN_STRONG_INLINE Packet4f ploaddup<Packet4f>(const float* from)
|
||||||
{
|
{
|
||||||
Packet16uc tmp;
|
Packet4f p;
|
||||||
tmp = vec_ld(0, (unsigned char *)from); // most significant quadword
|
if((ptrdiff_t(&from) % 16) == 0) p = pload<Packet4f>(from);
|
||||||
return (Packet4f) vec_perm(tmp, tmp, p16uc_DUPLICATE);
|
else p = ploadu<Packet4f>(from);
|
||||||
|
return vec_perm(p, p, p16uc_DUPLICATE);
|
||||||
}
|
}
|
||||||
template<> EIGEN_STRONG_INLINE Packet4i ploaddup<Packet4i>(const int* from)
|
template<> EIGEN_STRONG_INLINE Packet4i ploaddup<Packet4i>(const int* from)
|
||||||
{
|
{
|
||||||
Packet16uc tmp;
|
Packet4i p;
|
||||||
tmp = vec_ld(0, (unsigned char *)from); // most significant quadword
|
if((ptrdiff_t(&from) % 16) == 0) p = pload<Packet4i>(from);
|
||||||
return (Packet4i) vec_perm(tmp, tmp, p16uc_DUPLICATE);
|
else p = ploadu<Packet4i>(from);
|
||||||
|
return vec_perm(p, p, p16uc_DUPLICATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet4f& from) { EIGEN_DEBUG_ALIGNED_STORE vec_st(from, 0, to); }
|
template<> EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet4f& from) { EIGEN_DEBUG_ALIGNED_STORE vec_st(from, 0, to); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user