TheTest & test_mask() { Data<R> dataA, dataB, dataC, dataD(1), dataE(2); dataA[1] *= (LaneType)-1; dataC *= (LaneType)-1; R a = dataA, b = dataB, c = dataC, d = dataD, e = dataE; int m = v_signmask(a); EXPECT_EQ(2, m); EXPECT_EQ(false, v_check_all(a)); EXPECT_EQ(false, v_check_all(b)); EXPECT_EQ(true, v_check_all(c)); EXPECT_EQ(true, v_check_any(a)); EXPECT_EQ(false, v_check_any(b)); EXPECT_EQ(true, v_check_any(c)); typedef V_TypeTraits<LaneType> Traits; typedef typename Traits::int_type int_type; R f = v_select(b, d, e); Data<R> resF = f; for (int i = 0; i < R::nlanes; ++i) { int_type m2 = Traits::reinterpret_int(dataB[i]); EXPECT_EQ((Traits::reinterpret_int(dataD[i]) & m2) | (Traits::reinterpret_int(dataE[i]) & ~m2), Traits::reinterpret_int(resF[i])); } return *this; }
inline bool v_check_any(const v_float32x4& a) { return v_check_all(v_reinterpret_as_u32(a)); }
inline bool v_check_any(const v_int16x8& a) { return v_check_all(v_reinterpret_as_u16(a)); }
inline bool v_check_any(const v_int8x16& a) { return v_check_all(v_reinterpret_as_u8(a)); }
inline bool v_check_all(const v_float64x2& a) { return v_check_all(v_reinterpret_as_s64(a)); }
inline bool v_check_all(const v_uint32x4& a) { return v_check_all(v_reinterpret_as_s32(a)); }
inline bool v_check_all(const v_uint8x16& a) { return v_check_all(v_reinterpret_as_s8(a)); }