mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 03:39:01 +08:00
bug #1240: Remove any assumption on NEON vector types.
This commit is contained in:
parent
bd21243821
commit
0028049380
@ -275,7 +275,8 @@ ptranspose(PacketBlock<Packet2cf,2>& kernel) {
|
|||||||
//---------- double ----------
|
//---------- double ----------
|
||||||
#if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
|
#if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
|
||||||
|
|
||||||
static uint64x2_t p2ul_CONJ_XOR = EIGEN_INIT_NEON_PACKET2(0x0, 0x8000000000000000);
|
const uint64_t p2ul_conj_XOR_DATA[] = { 0x0, 0x8000000000000000 };
|
||||||
|
static uint64x2_t p2ul_CONJ_XOR = vld1q_u64( p2ul_conj_XOR_DATA );
|
||||||
|
|
||||||
struct Packet1cd
|
struct Packet1cd
|
||||||
{
|
{
|
||||||
|
@ -49,14 +49,6 @@ typedef uint32x4_t Packet4ui;
|
|||||||
#define _EIGEN_DECLARE_CONST_Packet4i(NAME,X) \
|
#define _EIGEN_DECLARE_CONST_Packet4i(NAME,X) \
|
||||||
const Packet4i p4i_##NAME = pset1<Packet4i>(X)
|
const Packet4i p4i_##NAME = pset1<Packet4i>(X)
|
||||||
|
|
||||||
#if EIGEN_COMP_LLVM && !EIGEN_COMP_CLANG
|
|
||||||
//Special treatment for Apple's llvm-gcc, its NEON packet types are unions
|
|
||||||
#define EIGEN_INIT_NEON_PACKET2D(X, Y) {{X, Y}}
|
|
||||||
#else
|
|
||||||
//Default initializer for packets
|
|
||||||
#define EIGEN_INIT_NEON_PACKET2D(X, Y) {X, Y}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// arm64 does have the pld instruction. If available, let's trust the __builtin_prefetch built-in function
|
// arm64 does have the pld instruction. If available, let's trust the __builtin_prefetch built-in function
|
||||||
// which available on LLVM and GCC (at least)
|
// which available on LLVM and GCC (at least)
|
||||||
#if EIGEN_HAS_BUILTIN(__builtin_prefetch) || EIGEN_COMP_GNUC
|
#if EIGEN_HAS_BUILTIN(__builtin_prefetch) || EIGEN_COMP_GNUC
|
||||||
@ -584,7 +576,8 @@ template<> EIGEN_STRONG_INLINE Packet2d pset1<Packet2d>(const double& from) { r
|
|||||||
|
|
||||||
template<> EIGEN_STRONG_INLINE Packet2d plset<Packet2d>(const double& a)
|
template<> EIGEN_STRONG_INLINE Packet2d plset<Packet2d>(const double& a)
|
||||||
{
|
{
|
||||||
Packet2d countdown = EIGEN_INIT_NEON_PACKET2D(0, 1);
|
const double countdown_raw[] = {0.0,1.0};
|
||||||
|
const Packet2d countdown = vld1q_f64(countdown_raw);
|
||||||
return vaddq_f64(pset1<Packet2d>(a), countdown);
|
return vaddq_f64(pset1<Packet2d>(a), countdown);
|
||||||
}
|
}
|
||||||
template<> EIGEN_STRONG_INLINE Packet2d padd<Packet2d>(const Packet2d& a, const Packet2d& b) { return vaddq_f64(a,b); }
|
template<> EIGEN_STRONG_INLINE Packet2d padd<Packet2d>(const Packet2d& a, const Packet2d& b) { return vaddq_f64(a,b); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user