Fix SIMD<mask64> ctor and Unpack

This commit is contained in:
Matthias Hochsteger 2020-12-15 15:31:17 +01:00
parent dbe894fea3
commit 9c0dbec8c9

View File

@ -76,7 +76,7 @@ namespace ngcore
SIMD<mask64,N2> hi; SIMD<mask64,N2> hi;
public: public:
SIMD (int i) : lo(i), hi(i-N1) { ; } SIMD (size_t i) : lo(i), hi(i>N1 ? i-N1 : 0) { ; }
SIMD (SIMD<mask64,N1> lo_, SIMD<mask64,N2> hi_) : lo(lo_), hi(hi_) { ; } SIMD (SIMD<mask64,N1> lo_, SIMD<mask64,N2> hi_) : lo(lo_), hi(hi_) { ; }
SIMD<mask64,N1> Lo() const { return lo; } SIMD<mask64,N1> Lo() const { return lo; }
SIMD<mask64,N2> Hi() const { return hi; } SIMD<mask64,N2> Hi() const { return hi; }
@ -664,6 +664,11 @@ namespace ngcore
{ {
return std::make_tuple(SIMD<double,N>{a.Data()}, SIMD<double,N>{b.Data()} ); return std::make_tuple(SIMD<double,N>{a.Data()}, SIMD<double,N>{b.Data()} );
} }
else if constexpr(N==2)
{
return std::make_tuple(SIMD<double,N>{ a.Lo(), b.Lo() },
SIMD<double,N>{ a.Hi(), b.Hi() });
}
else else
{ {
auto [a1,b1] = Unpack(a.Lo(), b.Lo()); auto [a1,b1] = Unpack(a.Lo(), b.Lo());