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 plUInt32 mask = b ? 0xFFFFFFFF : 0;
13 __m128 tmp = _mm_load_ss((
float*)&mask);
14 m_v = _mm_shuffle_ps(tmp, tmp, PL_TO_SHUFFLE(plSwizzle::XXXX));
17PL_ALWAYS_INLINE plSimdVec4b::plSimdVec4b(
bool x,
bool y,
bool z,
bool w)
19 PL_CHECK_SIMD_ALIGNMENT(
this);
21 alignas(16) plUInt32 mask[4] = {x ? 0xFFFFFFFF : 0, y ? 0xFFFFFFFF : 0, z ? 0xFFFFFFFF : 0, w ? 0xFFFFFFFF : 0};
22 m_v = _mm_load_ps((
float*)mask);
31PL_ALWAYS_INLINE
bool plSimdVec4b::GetComponent()
const
33 return _mm_movemask_ps(_mm_shuffle_ps(m_v, m_v, PL_SHUFFLE(N, N, N, N))) != 0;
36PL_ALWAYS_INLINE
bool plSimdVec4b::x()
const
38 return GetComponent<0>();
41PL_ALWAYS_INLINE
bool plSimdVec4b::y()
const
43 return GetComponent<1>();
46PL_ALWAYS_INLINE
bool plSimdVec4b::z()
const
48 return GetComponent<2>();
51PL_ALWAYS_INLINE
bool plSimdVec4b::w()
const
53 return GetComponent<3>();
56template <plSwizzle::Enum s>
57PL_ALWAYS_INLINE
plSimdVec4b plSimdVec4b::Get()
const
59 return _mm_shuffle_ps(m_v, m_v, PL_TO_SHUFFLE(s));
64 return _mm_and_ps(m_v, rhs.m_v);
69 return _mm_or_ps(m_v, rhs.m_v);
72PL_ALWAYS_INLINE
plSimdVec4b plSimdVec4b::operator!()
const
74 __m128 allTrue = _mm_cmpeq_ps(_mm_setzero_ps(), _mm_setzero_ps());
75 return _mm_xor_ps(m_v, allTrue);
80 return !(*
this != rhs);
85 return _mm_xor_ps(m_v, rhs.m_v);
89PL_ALWAYS_INLINE
bool plSimdVec4b::AllSet()
const
91 const int mask = PL_BIT(N) - 1;
92 return (_mm_movemask_ps(m_v) & mask) == mask;
96PL_ALWAYS_INLINE
bool plSimdVec4b::AnySet()
const
98 const int mask = PL_BIT(N) - 1;
99 return (_mm_movemask_ps(m_v) & mask) != 0;
103PL_ALWAYS_INLINE
bool plSimdVec4b::NoneSet()
const
105 const int mask = PL_BIT(N) - 1;
106 return (_mm_movemask_ps(m_v) & mask) == 0;
112#if PL_SSE_LEVEL >= PL_SSE_41
113 return _mm_blendv_ps(vFalse.m_v, vTrue.m_v, vCmp.m_v);
115 return _mm_or_ps(_mm_andnot_ps(cmp.m_v, ifFalse.m_v), _mm_and_ps(cmp.m_v, ifTrue.m_v));
A 4-component vector class.
Definition Vec4.h:9