3PL_ALWAYS_INLINE plSimdVec4b::plSimdVec4b()
5 PL_CHECK_SIMD_ALIGNMENT(
this);
8PL_ALWAYS_INLINE plSimdVec4b::plSimdVec4b(
bool b)
10 PL_CHECK_SIMD_ALIGNMENT(
this);
12 m_v = vmovq_n_u32(b ? 0xFFFFFFFF : 0);
15PL_ALWAYS_INLINE plSimdVec4b::plSimdVec4b(
bool x,
bool y,
bool z,
bool w)
17 PL_CHECK_SIMD_ALIGNMENT(
this);
19 alignas(16) plUInt32 mask[4] = {x ? 0xFFFFFFFF : 0, y ? 0xFFFFFFFF : 0, z ? 0xFFFFFFFF : 0, w ? 0xFFFFFFFF : 0};
20 m_v = vld1q_u32(mask);
29PL_ALWAYS_INLINE
bool plSimdVec4b::GetComponent()
const
31 return vgetq_lane_u32(m_v, N) & 1;
34PL_ALWAYS_INLINE
bool plSimdVec4b::x()
const
36 return GetComponent<0>();
39PL_ALWAYS_INLINE
bool plSimdVec4b::y()
const
41 return GetComponent<1>();
44PL_ALWAYS_INLINE
bool plSimdVec4b::z()
const
46 return GetComponent<2>();
49PL_ALWAYS_INLINE
bool plSimdVec4b::w()
const
51 return GetComponent<3>();
54template <plSwizzle::Enum s>
55PL_ALWAYS_INLINE
plSimdVec4b plSimdVec4b::Get()
const
57 return __builtin_shufflevector(m_v, m_v, PL_TO_SHUFFLE(s));
62 return vandq_u32(m_v, rhs.m_v);
67 return vorrq_u32(m_v, rhs.m_v);
70PL_ALWAYS_INLINE
plSimdVec4b plSimdVec4b::operator!()
const
72 return vmvnq_u32(m_v);
77 return vceqq_u32(m_v, rhs.m_v);
82 return veorq_u32(m_v, rhs.m_v);
86PL_ALWAYS_INLINE
bool plSimdVec4b::AllSet()
const
88 const int mask = PL_BIT(N) - 1;
89 return (plInternal::NeonMoveMask(m_v) & mask) == mask;
93PL_ALWAYS_INLINE
bool plSimdVec4b::AnySet()
const
95 const int mask = PL_BIT(N) - 1;
96 return (plInternal::NeonMoveMask(m_v) & mask) != 0;
100PL_ALWAYS_INLINE
bool plSimdVec4b::NoneSet()
const
102 const int mask = PL_BIT(N) - 1;
103 return (plInternal::NeonMoveMask(m_v) & mask) == 0;
109 return vbslq_u32(vCmp.m_v, vTrue.m_v, vFalse.m_v);
A 4-component vector class.
Definition Vec4.h:9