Lines 84-90
Link Here
|
84 |
}; |
84 |
}; |
85 |
}; |
85 |
}; |
86 |
|
86 |
|
87 |
#if EIGEN_GNUC_AT_MOST(4,4) |
87 |
#if EIGEN_GNUC_AT_MOST(4,4) && !__llvm__ |
88 |
// workaround gcc 4.2, 4.3 and 4.4 compilatin issue |
88 |
// workaround gcc 4.2, 4.3 and 4.4 compilatin issue |
89 |
EIGEN_STRONG_INLINE float32x4_t vld1q_f32(const float* x) { return ::vld1q_f32((const float32_t*)x); } |
89 |
EIGEN_STRONG_INLINE float32x4_t vld1q_f32(const float* x) { return ::vld1q_f32((const float32_t*)x); } |
90 |
EIGEN_STRONG_INLINE float32x2_t vld1_f32 (const float* x) { return ::vld1_f32 ((const float32_t*)x); } |
90 |
EIGEN_STRONG_INLINE float32x2_t vld1_f32 (const float* x) { return ::vld1_f32 ((const float32_t*)x); } |
Lines 100-111
Link Here
|
100 |
|
100 |
|
101 |
template<> EIGEN_STRONG_INLINE Packet4f plset<float>(const float& a) |
101 |
template<> EIGEN_STRONG_INLINE Packet4f plset<float>(const float& a) |
102 |
{ |
102 |
{ |
103 |
Packet4f countdown = { 0, 1, 2, 3 }; |
103 |
Packet4f countdown = |
|
|
104 |
#if __llvm__ && !__clang__ |
105 |
{{ 0, 1, 2, 3 }}; |
106 |
#else |
107 |
{ 0, 1, 2, 3 }; |
108 |
#endif |
104 |
return vaddq_f32(pset1<Packet4f>(a), countdown); |
109 |
return vaddq_f32(pset1<Packet4f>(a), countdown); |
105 |
} |
110 |
} |
106 |
template<> EIGEN_STRONG_INLINE Packet4i plset<int>(const int& a) |
111 |
template<> EIGEN_STRONG_INLINE Packet4i plset<int>(const int& a) |
107 |
{ |
112 |
{ |
108 |
Packet4i countdown = { 0, 1, 2, 3 }; |
113 |
Packet4i countdown = |
|
|
114 |
#if __llvm__ && !__clang__ |
115 |
{{ 0, 1, 2, 3 }}; |
116 |
#else |
117 |
{ 0, 1, 2, 3 }; |
118 |
#endif |
109 |
return vaddq_s32(pset1<Packet4i>(a), countdown); |
119 |
return vaddq_s32(pset1<Packet4i>(a), countdown); |
110 |
} |
120 |
} |
111 |
|
121 |
|
Lines 395-419
Link Here
|
395 |
return s[0]; |
405 |
return s[0]; |
396 |
} |
406 |
} |
397 |
|
407 |
|
398 |
template<int Offset> |
408 |
#define PALIGN_NEON(Offset,Type,Command) \ |
399 |
struct palign_impl<Offset,Packet4f> |
409 |
template<>\ |
400 |
{ |
410 |
struct palign_impl<Offset,Type>\ |
401 |
EIGEN_STRONG_INLINE static void run(Packet4f& first, const Packet4f& second) |
411 |
{\ |
402 |
{ |
412 |
EIGEN_STRONG_INLINE static void run(Type& first, const Type& second)\ |
403 |
if (Offset!=0) |
413 |
{\ |
404 |
first = vextq_f32(first, second, Offset); |
414 |
if (Offset!=0)\ |
405 |
} |
415 |
first = Command(first, second, Offset);\ |
406 |
}; |
416 |
}\ |
|
|
417 |
};\ |
407 |
|
418 |
|
408 |
template<int Offset> |
419 |
PALIGN_NEON(0,Packet4f,vextq_f32) |
409 |
struct palign_impl<Offset,Packet4i> |
420 |
PALIGN_NEON(1,Packet4f,vextq_f32) |
410 |
{ |
421 |
PALIGN_NEON(2,Packet4f,vextq_f32) |
411 |
EIGEN_STRONG_INLINE static void run(Packet4i& first, const Packet4i& second) |
422 |
PALIGN_NEON(3,Packet4f,vextq_f32) |
412 |
{ |
423 |
PALIGN_NEON(0,Packet4i,vextq_s32) |
413 |
if (Offset!=0) |
424 |
PALIGN_NEON(1,Packet4i,vextq_s32) |
414 |
first = vextq_s32(first, second, Offset); |
425 |
PALIGN_NEON(2,Packet4i,vextq_s32) |
415 |
} |
426 |
PALIGN_NEON(3,Packet4i,vextq_s32) |
416 |
}; |
|
|
417 |
|
427 |
|
418 |
} // end namespace internal |
428 |
} // end namespace internal |
419 |
|
429 |
|