34 template <
typename Scalar>
62 template <
typename Type>
74 using MaskType =
typename SIMDInternal::MaskTypeFor<ElementType>::type;
80 using PrimitiveType =
typename SIMDInternal::PrimitiveType<ElementType>::type;
100 struct ElementAccess;
140 return {CmplxOps::load (a)};
147 CmplxOps::store (value, a);
153 inline ElementType JUCE_VECTOR_CALLTYPE
get (
size_t idx)
const noexcept
155 jassert (idx < SIMDNumElements);
156 return CmplxOps::get (value, idx);
161 inline void JUCE_VECTOR_CALLTYPE
set (
size_t idx,
ElementType v) noexcept
163 jassert (idx < SIMDNumElements);
164 value = CmplxOps::set (value, idx, v);
177 inline ElementAccess JUCE_VECTOR_CALLTYPE
operator[] (
size_t idx) noexcept
179 jassert (idx < SIMDNumElements);
180 return ElementAccess (*
this, idx);
271 inline bool JUCE_VECTOR_CALLTYPE
operator== (
SIMDRegister other)
const noexcept {
return NativeOps::allEqual (value, other.value); }
280 inline bool JUCE_VECTOR_CALLTYPE
operator!= (Type s)
const noexcept {
return ! (*
this == s); }
324 return { CmplxOps::muladd (a.value, b.value, c.value) };
347 uintptr_t bitmask = SIMDRegisterSize - 1;
348 return (reinterpret_cast<uintptr_t> (ptr) & bitmask) == 0;
358 return snapPointerToAlignment (ptr, SIMDRegisterSize);
394 u.in = CmplxSIMDOps<MaskType>::expand (a);
403 #include "juce_SIMDRegister_Impl.h" static constexpr size_t size() noexcept
SIMDRegister JUCE_VECTOR_CALLTYPE operator &(vMaskType v) const noexcept
static bool isSIMDAligned(const ElementType *ptr) noexcept
static vMaskType JUCE_VECTOR_CALLTYPE greaterThanOrEqual(SIMDRegister a, SIMDRegister b) noexcept
typename SIMDInternal::MaskTypeFor< ElementType >::type MaskType
static SIMDRegister JUCE_VECTOR_CALLTYPE abs(SIMDRegister a) noexcept
static vMaskType JUCE_VECTOR_CALLTYPE lessThan(SIMDRegister a, SIMDRegister b) noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator &=(vMaskType v) noexcept
typename SIMDInternal::PrimitiveType< ElementType >::type PrimitiveType
bool JUCE_VECTOR_CALLTYPE operator!=(SIMDRegister other) const noexcept
ElementType sum() const noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE min(SIMDRegister a, SIMDRegister b) noexcept
typename vMaskType::vSIMDType vMaskSIMDType
SIMDRegister &JUCE_VECTOR_CALLTYPE operator-=(SIMDRegister v) noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE truncate(SIMDRegister a) noexcept
SIMDRegister JUCE_VECTOR_CALLTYPE operator|(vMaskType v) const noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE multiplyAdd(SIMDRegister a, const SIMDRegister b, SIMDRegister c) noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator*=(SIMDRegister v) noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE expand(ElementType s) noexcept
~SIMDRegister() noexcept=default
static vMaskType JUCE_VECTOR_CALLTYPE notEqual(SIMDRegister a, SIMDRegister b) noexcept
SIMDRegister() noexcept=default
static SIMDRegister JUCE_VECTOR_CALLTYPE fromNative(vSIMDType a) noexcept
static vMaskType JUCE_VECTOR_CALLTYPE greaterThan(SIMDRegister a, SIMDRegister b) noexcept
SIMDRegister JUCE_VECTOR_CALLTYPE operator*(SIMDRegister v) const noexcept
void JUCE_VECTOR_CALLTYPE copyToRawArray(ElementType *a) const noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator^=(vMaskType v) noexcept
bool JUCE_VECTOR_CALLTYPE operator==(SIMDRegister other) const noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE fromRawArray(const ElementType *a) noexcept
static constexpr size_t SIMDNumElements
SIMDRegister JUCE_VECTOR_CALLTYPE operator-(SIMDRegister v) const noexcept
static vMaskType JUCE_VECTOR_CALLTYPE equal(SIMDRegister a, SIMDRegister b) noexcept
static ElementType * getNextSIMDAlignedPtr(ElementType *ptr) noexcept
static constexpr size_t SIMDRegisterSize
SIMDRegister(Type s) noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator|=(vMaskType v) noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator=(ElementType s) noexcept
static vMaskType JUCE_VECTOR_CALLTYPE lessThanOrEqual(SIMDRegister a, SIMDRegister b) noexcept
ElementType JUCE_VECTOR_CALLTYPE operator[](size_t idx) const noexcept
SIMDNativeOps< PrimitiveType > NativeOps
typename NativeOps::vSIMDType vSIMDType
SIMDRegister JUCE_VECTOR_CALLTYPE operator~() const noexcept
CmplxSIMDOps< ElementType > CmplxOps
SIMDRegister JUCE_VECTOR_CALLTYPE operator+(SIMDRegister v) const noexcept
SIMDRegister JUCE_VECTOR_CALLTYPE operator^(vMaskType v) const noexcept
SIMDRegister &JUCE_VECTOR_CALLTYPE operator+=(SIMDRegister v) noexcept
static SIMDRegister JUCE_VECTOR_CALLTYPE max(SIMDRegister a, SIMDRegister b) noexcept