mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +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)
|
||||
{
|
||||
Packet16uc tmp;
|
||||
tmp = vec_ld(0, (unsigned char *)from); // most significant quadword
|
||||
return (Packet4f) vec_perm(tmp, tmp, p16uc_DUPLICATE);
|
||||
Packet4f p;
|
||||
if((ptrdiff_t(&from) % 16) == 0) p = pload<Packet4f>(from);
|
||||
else p = ploadu<Packet4f>(from);
|
||||
return vec_perm(p, p, p16uc_DUPLICATE);
|
||||
}
|
||||
template<> EIGEN_STRONG_INLINE Packet4i ploaddup<Packet4i>(const int* from)
|
||||
{
|
||||
Packet16uc tmp;
|
||||
tmp = vec_ld(0, (unsigned char *)from); // most significant quadword
|
||||
return (Packet4i) vec_perm(tmp, tmp, p16uc_DUPLICATE);
|
||||
Packet4i p;
|
||||
if((ptrdiff_t(&from) % 16) == 0) p = pload<Packet4i>(from);
|
||||
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); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user