Ark Server API (ASA) - Wiki
Loading...
Searching...
No Matches
UnrealMathNeon.h File Reference
#include <type_traits>
#include <arm_neon.h>
#include "Math/Float16.h"
#include "Math/UnrealMathVectorConstants.h"
+ Include dependency graph for UnrealMathNeon.h:

Go to the source code of this file.

Classes

struct  VectorRegister4Double
 
struct  AlignedFloat4
 
struct  AlignedDouble4
 

Namespaces

namespace  VectorSinConstantsNEON
 

Macros

#define DECLARE_VECTOR_REGISTER(X, Y, Z, W)   MakeVectorRegister( X, Y, Z, W )
 
#define VectorZeroVectorRegister()   VectorZeroDouble()
 
#define VectorOneVectorRegister()   VectorOneDouble()
 
#define VectorSetComponent(Vec, ElementIndex, Scalar)   VectorSetComponentImpl<ElementIndex>(Vec, Scalar)
 
#define VectorStoreAlignedStreamed(Vec, Ptr)   VectorStoreAligned( Vec, Ptr )
 
#define VectorReplicate(Vec, ElementIndex)   VectorReplicateImpl<ElementIndex>(Vec)
 
#define VectorGetComponent(Vec, ElementIndex)   VectorGetComponentImpl<ElementIndex>(Vec)
 
#define VectorResetFloatRegisters()
 
#define VectorGetControlRegister()   0
 
#define VectorSetControlRegister(ControlStatus)
 
#define VECTOR_ROUND_TOWARD_ZERO   0
 
#define VectorIntAnd(A, B)   vandq_s32(A, B)
 
#define VectorIntOr(A, B)   vorrq_s32(A, B)
 
#define VectorIntXor(A, B)   veorq_s32(A, B)
 
#define VectorIntAndNot(A, B)   vandq_s32(vmvnq_s32(A), B)
 
#define VectorIntNot(A)   vmvnq_s32(A)
 
#define VectorIntCompareEQ(A, B)   vceqq_s32(A,B)
 
#define VectorIntCompareNEQ(A, B)   VectorIntNot(VectorIntCompareEQ(A,B))
 
#define VectorIntCompareGT(A, B)   vcgtq_s32(A,B)
 
#define VectorIntCompareLT(A, B)   vcltq_s32(A,B)
 
#define VectorIntCompareGE(A, B)   vcgeq_s32(A,B)
 
#define VectorIntCompareLE(A, B)   vcleq_s32(A,B)
 
#define VectorIntAdd(A, B)   vaddq_s32(A, B)
 
#define VectorIntSubtract(A, B)   vsubq_s32(A, B)
 
#define VectorIntMultiply(A, B)   vmulq_s32(A, B)
 
#define VectorIntNegate(A)   vnegq_s32(A)
 
#define VectorIntMin(A, B)   vminq_s32(A,B)
 
#define VectorIntMax(A, B)   vmaxq_s32(A,B)
 
#define VectorIntClamp(A, B, C)   VectorIntMin(VectorIntMax(A, B), C)
 
#define VectorIntAbs(A)   vabdq_s32(A, GlobalVectorConstants::IntZero)
 
#define VectorIntSign(A)   VectorIntSelect( VectorIntCompareGE(A, GlobalVectorConstants::IntZero), GlobalVectorConstants::IntOne, GlobalVectorConstants::IntMinusOne )
 
#define VectorIntToFloat(A)   vcvtq_f32_s32(A)
 
#define VectorIntStore(Vec, Ptr)   vst1q_s32( (int32*)(Ptr), Vec )
 
#define VectorIntLoad(Ptr)   vld1q_s32( (int32*)((void*)(Ptr)) )
 
#define VectorIntStoreAligned(Vec, Ptr)   vst1q_s32( (int32*)(Ptr), Vec )
 
#define VectorIntLoadAligned(Ptr)   vld1q_s32( (int32*)((void*)(Ptr)) )
 
#define VectorIntLoad1(Ptr)   vld1q_dup_s32((int32*)(Ptr))
 
#define VectorIntSet1(F)   vdupq_n_s32(F)
 
#define VectorSetZero()   vdupq_n_s32(0)
 
#define VectorSet1(F)   vdupq_n_f32(F)
 
#define VectorCastIntToFloat(Vec)   ((VectorRegister4f)vreinterpretq_f32_s32(Vec))
 
#define VectorCastFloatToInt(Vec)   ((VectorRegister4i)vreinterpretq_s32_f32(Vec))
 
#define VectorShiftLeftImm(Vec, ImmAmt)   vshlq_n_s32(Vec, ImmAmt)
 
#define VectorShiftRightImmArithmetic(Vec, ImmAmt)   vshrq_n_s32(Vec, ImmAmt)
 
#define VectorShiftRightImmLogical(Vec, ImmAmt)   vshrq_n_u32(Vec, ImmAmt)
 
#define VectorRound(Vec)   vrndnq_f32(Vec)
 

Typedefs

typedef float64x2_t GCC_ALIGN(16) VectorRegister2Double
 
typedef VectorRegister4Double VectorRegister
 
typedef AlignedDouble4 AlignedRegister4
 
typedef VectorRegister4Int VectorRegister4i
 
typedef VectorRegister4Float VectorRegister4f
 
typedef VectorRegister4Double VectorRegister4d
 
typedef VectorRegister2Double VectorRegister2d
 

Functions

FORCEINLINE constexpr VectorRegister4Int MakeVectorRegisterIntConstant (int32 X, int32 Y, int32 Z, int32 W)
 
FORCEINLINE constexpr VectorRegister4Float MakeVectorRegisterFloatConstant (float X, float Y, float Z, float W)
 
FORCEINLINE constexpr VectorRegister2Double MakeVectorRegister2DoubleConstant (double X, double Y)
 
VectorRegister4Float VectorLoadAligned (const float *Ptr)
 
VectorRegister4Double VectorLoadAligned (const double *Ptr)
 
void VectorStoreAligned (const VectorRegister4Float &Vec, float *Ptr)
 
void VectorStoreAligned (const VectorRegister4Double &Vec, double *Dst)
 
FORCEINLINE VectorRegister4Float MakeVectorRegister (uint32 X, uint32 Y, uint32 Z, uint32 W)
 
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloat (uint32 X, uint32 Y, uint32 Z, uint32 W)
 
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatMask (uint32 X, uint32 Y, uint32 Z, uint32 W)
 
FORCEINLINE VectorRegister4Float MakeVectorRegister (float X, float Y, float Z, float W)
 
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloat (float X, float Y, float Z, float W)
 
FORCEINLINE VectorRegister4Double MakeVectorRegister (double X, double Y, double Z, double W)
 
FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble (double X, double Y, double Z, double W)
 
FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble (const VectorRegister2Double &XY, const VectorRegister2Double &ZW)
 
FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble (uint64 X, uint64 Y, uint64 Z, uint64 W)
 
FORCEINLINE VectorRegister4Double MakeVectorRegisterDoubleMask (uint64 X, uint64 Y, uint64 Z, uint64 W)
 
FORCEINLINE VectorRegister2Double MakeVectorRegister2Double (double X, double Y)
 
FORCEINLINE VectorRegister2Double MakeVectorRegister2Double (uint64 X, uint64 Y)
 
FORCEINLINE VectorRegister4Int MakeVectorRegisterInt (int32 X, int32 Y, int32 Z, int32 W)
 
FORCEINLINE VectorRegister4Int MakeVectorRegisterInt64 (int64 X, int64 Y)
 
FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble (const VectorRegister4Float &From)
 
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorZeroFloat ()
 
FORCEINLINE VectorRegister4Double VectorZeroDouble ()
 
FORCEINLINE VectorRegister4Float VectorOneFloat ()
 
FORCEINLINE VectorRegister4Double VectorOneDouble ()
 
FORCEINLINE VectorRegister4Float VectorLoad (const float *Ptr)
 
FORCEINLINE VectorRegister4Double VectorLoad (const double *Ptr)
 
FORCEINLINE VectorRegister4Float VectorLoadFloat2 (const float *Ptr)
 
FORCEINLINE VectorRegister4Double VectorLoadFloat3 (const double *Ptr)
 
FORCEINLINE VectorRegister4Double VectorLoadFloat3_W1 (const double *Ptr)
 
template<int ElementIndex>
FORCEINLINE VectorRegister4Float VectorSetComponentImpl (const VectorRegister4Float &Vec, float Scalar)
 
template<int ElementIndex>
FORCEINLINE VectorRegister2Double VectorSetComponentImpl (const VectorRegister2Double &Vec, double Scalar)
 
template<int ElementIndex, typename std::enable_if<(ElementIndex > 1), bool >::type = true>
FORCEINLINE VectorRegister4Double VectorSetComponentImpl (const VectorRegister4Double &Vec, double Scalar)
 
FORCEINLINE VectorRegister4Float VectorLoadFloat1 (const float *Ptr)
 
FORCEINLINE VectorRegister4Double VectorLoadDouble1 (const double *Ptr)
 
FORCEINLINE VectorRegister4Float VectorLoadTwoPairsFloat (const float *Ptr1, const float *Ptr2)
 
FORCEINLINE VectorRegister4Double VectorLoadTwoPairsFloat (const double *Ptr1, const double *Ptr2)
 
FORCEINLINE VectorRegister4Float VectorSetFloat1 (float X)
 
FORCEINLINE VectorRegister4Double VectorSetFloat1 (double X)
 
FORCEINLINE void VectorStoreAligned (VectorRegister4Float Vec, FFloat16 *Ptr)
 
FORCEINLINE void VectorStore (const VectorRegister4Float &Vec, float *Ptr)
 
FORCEINLINE void VectorStore (const VectorRegister4Double &Vec, double *Ptr)
 
FORCEINLINE void VectorStoreFloat3 (const VectorRegister4Float &Vec, float *Ptr)
 
FORCEINLINE void VectorStoreFloat3 (const VectorRegister4Double &Vec, double *Ptr)
 
FORCEINLINE void VectorStoreFloat1 (VectorRegister4Float Vec, float *Ptr)
 
FORCEINLINE void VectorStoreFloat1 (const VectorRegister4Double &Vec, double *Ptr)
 
template<int ElementIndex>
FORCEINLINE VectorRegister4Float VectorReplicateImpl (const VectorRegister4Float &Vec)
 
template<int ElementIndex>
FORCEINLINE VectorRegister2Double VectorReplicateImpl (const VectorRegister2Double &Vec)
 
template<int ElementIndex, typename std::enable_if<(ElementIndex<=1), bool >::type = true>
FORCEINLINE VectorRegister4Double VectorReplicateImpl (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorAbs (VectorRegister4Float Vec)
 
FORCEINLINE VectorRegister4Double VectorAbs (VectorRegister4Double Vec)
 
FORCEINLINE VectorRegister4Float VectorNegate (VectorRegister4Float Vec)
 
FORCEINLINE VectorRegister4Double VectorNegate (VectorRegister4Double Vec)
 
FORCEINLINE VectorRegister4Float VectorAdd (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorAdd (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorSubtract (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorSubtract (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorMultiply (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister2Double VectorMultiply (VectorRegister2Double Vec1, VectorRegister2Double Vec2)
 
FORCEINLINE VectorRegister4Double VectorMultiply (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorDivide (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorDivide (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorMultiplyAdd (VectorRegister4Float Vec1, VectorRegister4Float Vec2, VectorRegister4Float Acc)
 
FORCEINLINE VectorRegister4Double VectorMultiplyAdd (VectorRegister4Double Vec1, VectorRegister4Double Vec2, VectorRegister4Double Acc)
 
FORCEINLINE VectorRegister4Float VectorNegateMultiplyAdd (VectorRegister4Float Vec1, VectorRegister4Float Vec2, VectorRegister4Float Sub)
 
FORCEINLINE VectorRegister4Double VectorNegateMultiplyAdd (VectorRegister4Double Vec1, VectorRegister4Double Vec2, VectorRegister4Double Sub)
 
FORCEINLINE VectorRegister4Float VectorDot3 (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorDot3 (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE float VectorDot3Scalar (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE double VectorDot3Scalar (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorDot4 (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorDot4 (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareEQ (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareEQ (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareNE (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareNE (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareGT (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareGT (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareGE (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareGE (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareLT (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareLT (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCompareLE (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCompareLE (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorSelect (const VectorRegister4Float &Mask, const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorSelect (const VectorRegister4Double &Mask, const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorBitwiseOr (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorBitwiseOr (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorBitwiseAnd (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorBitwiseAnd (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorBitwiseXor (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorBitwiseXor (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorSwizzle (VectorRegister4Float V, uint32 E0, uint32 E1, uint32 E2, uint32 E3)
 
FORCEINLINE VectorRegister4Double VectorSwizzle (VectorRegister4Double V, uint32 E0, uint32 E1, uint32 E2, uint32 E3)
 
FORCEINLINE VectorRegister4Float VectorShuffle (VectorRegister4Float V1, VectorRegister4Float V2, uint32 PermuteX, uint32 PermuteY, uint32 PermuteZ, uint32 PermuteW)
 
FORCEINLINE VectorRegister4Double VectorShuffle (VectorRegister4Double V1, VectorRegister4Double V2, uint32 PermuteX, uint32 PermuteY, uint32 PermuteZ, uint32 PermuteW)
 
FORCEINLINE uint32 VectorMaskBits (VectorRegister4Float VecMask)
 
FORCEINLINE uint32 VectorMaskBits (VectorRegister4Double VecMask)
 
FORCEINLINE VectorRegister4Float VectorCombineHigh (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCombineHigh (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorCombineLow (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCombineLow (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE void VectorDeinterleave (VectorRegister4Float &OutEvens, VectorRegister4Float &OutOdds, const VectorRegister4Float &Lo, const VectorRegister4Float &Hi)
 
FORCEINLINE void VectorDeinterleave (VectorRegister4Double &RESTRICT OutEvens, VectorRegister4Double &RESTRICT OutOdds, const VectorRegister4Double &Lo, const VectorRegister4Double &Hi)
 
FORCEINLINE VectorRegister4Float VectorCross (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCross (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 
FORCEINLINE VectorRegister4Float VectorPow (const VectorRegister4Float &Base, const VectorRegister4Float &Exponent)
 
FORCEINLINE VectorRegister4Double VectorPow (const VectorRegister4Double &Base, const VectorRegister4Double &Exponent)
 
FORCEINLINE VectorRegister4Float VectorReciprocalEstimate (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorReciprocalEstimate (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorReciprocal (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorReciprocal (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorSqrt (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorSqrt (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorReciprocalSqrtEstimate (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorReciprocalSqrtEstimate (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorReciprocalSqrt (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorReciprocalSqrt (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorReciprocalLen (const VectorRegister4Float &Vector)
 
FORCEINLINE VectorRegister4Double VectorReciprocalLen (const VectorRegister4Double &Vector)
 
FORCEINLINE VectorRegister4Float VectorReciprocalLenEstimate (const VectorRegister4Float &Vector)
 
FORCEINLINE VectorRegister4Double VectorReciprocalLenEstimate (const VectorRegister4Double &Vector)
 
FORCEINLINE VectorRegister4Float VectorSet_W0 (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorSet_W0 (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorSet_W1 (const VectorRegister4Float &Vec)
 
FORCEINLINE VectorRegister4Double VectorSet_W1 (const VectorRegister4Double &Vec)
 
template<uint32 ElementIndex>
FORCEINLINE float VectorGetComponentImpl (VectorRegister4Float Vec)
 
template<int ElementIndex>
FORCEINLINE double VectorGetComponentImpl (VectorRegister2Double Vec)
 
template<int ElementIndex, typename std::enable_if<(ElementIndex > 1), bool >::type = true>
FORCEINLINE double VectorGetComponentImpl (const VectorRegister4Double &Vec)
 
FORCEINLINE float VectorGetComponentDynamic (VectorRegister4Float Vec, uint32 ElementIndex)
 
FORCEINLINE double VectorGetComponentDynamic (VectorRegister4Double Vec, uint32 ElementIndex)
 
FORCEINLINE void VectorMatrixMultiply (FMatrix44f *Result, const FMatrix44f *Matrix1, const FMatrix44f *Matrix2)
 
FORCEINLINE void VectorMatrixMultiply (FMatrix44d *Result, const FMatrix44d *Matrix1, const FMatrix44d *Matrix2)
 
FORCEINLINE void VectorMatrixInverse (FMatrix44f *DstMatrix, const FMatrix44f *SrcMatrix)
 
FORCEINLINE void VectorMatrixInverse (FMatrix44d *DstMatrix, const FMatrix44d *SrcMatrix)
 
FORCEINLINE VectorRegister4Float VectorTransformVector (const VectorRegister4Float &VecP, const FMatrix44f *MatrixM)
 
FORCEINLINE VectorRegister4Float VectorTransformVector (const VectorRegister4Float &VecP, const FMatrix44d *MatrixM)
 
FORCEINLINE VectorRegister4Double VectorTransformVector (const VectorRegister4Double &VecP, const FMatrix44d *MatrixM)
 
FORCEINLINE VectorRegister4Float VectorMin (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorMin (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorMax (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE VectorRegister4Double VectorMax (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorMergeVecXYZ_VecW (const VectorRegister4Float &VecXYZ, const VectorRegister4Float &VecW)
 
FORCEINLINE VectorRegister4Double VectorMergeVecXYZ_VecW (const VectorRegister4Double &VecXYZ, const VectorRegister4Double &VecW)
 
FORCEINLINE VectorRegister4Float VectorLoadByte4 (const void *Ptr)
 
FORCEINLINE VectorRegister4Float VectorLoadSignedByte4 (const void *Ptr)
 
FORCEINLINE VectorRegister4Float VectorLoadByte4Reverse (const uint8 *Ptr)
 
FORCEINLINE void VectorStoreByte4 (VectorRegister4Float Vec, void *Ptr)
 
FORCEINLINE void VectorStoreSignedByte4 (VectorRegister4Float Vec, void *Ptr)
 
template<bool bAligned>
FORCEINLINE void VectorStoreHalf4 (VectorRegister4Float Vec, void *RESTRICT Ptr)
 
FORCEINLINE VectorRegister4Float VectorLoadURGB10A2N (void *Ptr)
 
FORCEINLINE void VectorStoreURGB10A2N (const VectorRegister4Float &Vec, void *Ptr)
 
FORCEINLINE int32 VectorAnyGreaterThan (VectorRegister4Float Vec1, VectorRegister4Float Vec2)
 
FORCEINLINE int32 VectorAnyGreaterThan (VectorRegister4Double Vec1, VectorRegister4Double Vec2)
 
FORCEINLINE VectorRegister4Float VectorQuaternionMultiply2 (const VectorRegister4Float &Quat1, const VectorRegister4Float &Quat2)
 
FORCEINLINE VectorRegister4Double VectorQuaternionMultiply2 (const VectorRegister4Double &Quat1, const VectorRegister4Double &Quat2)
 
FORCEINLINE void VectorQuaternionMultiply (VectorRegister4Float *RESTRICT Result, const VectorRegister4Float *RESTRICT Quat1, const VectorRegister4Float *RESTRICT Quat2)
 
FORCEINLINE void VectorQuaternionMultiply (VectorRegister4Double *RESTRICT Result, const VectorRegister4Double *RESTRICT Quat1, const VectorRegister4Double *RESTRICT Quat2)
 
FORCEINLINE void VectorSinCos (VectorRegister4Float *RESTRICT VSinAngles, VectorRegister4Float *RESTRICT VCosAngles, const VectorRegister4Float *RESTRICT VAngles)
 
bool VectorContainsNaNOrInfinite (const VectorRegister4Float &Vec)
 
bool VectorContainsNaNOrInfinite (const VectorRegister4Double &Vec)
 
FORCEINLINE VectorRegister4Float VectorExp (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorExp (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorExp2 (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorExp2 (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorLog (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorLog (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorLog2 (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorLog2 (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorTan (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorTan (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorASin (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorASin (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorACos (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorACos (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorATan (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorATan (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorATan2 (const VectorRegister4Float &X, const VectorRegister4Float &Y)
 
FORCEINLINE VectorRegister4Double VectorATan2 (const VectorRegister4Double &X, const VectorRegister4Double &Y)
 
FORCEINLINE VectorRegister4Float VectorCeil (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorCeil (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorFloor (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorFloor (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorTruncate (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorTruncate (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorMod (const VectorRegister4Float &X, const VectorRegister4Float &Y)
 
FORCEINLINE VectorRegister4Double VectorMod (const VectorRegister4Double &X, const VectorRegister4Double &Y)
 
FORCEINLINE VectorRegister4Float VectorSign (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorSign (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorStep (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorStep (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorSin (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorSin (const VectorRegister4Double &X)
 
FORCEINLINE VectorRegister4Float VectorCos (const VectorRegister4Float &X)
 
FORCEINLINE VectorRegister4Double VectorCos (const VectorRegister4Double &X)
 
FORCEINLINE void VectorSinCos (VectorRegister4Double *RESTRICT VSinAngles, VectorRegister4Double *RESTRICT VCosAngles, const VectorRegister4Double *RESTRICT VAngles)
 
FORCEINLINE VectorRegister4Float VectorLoadURGBA16N (const uint16 *E)
 
FORCEINLINE VectorRegister4Float VectorLoadSRGBA16N (const void *Ptr)
 
FORCEINLINE void VectorStoreURGBA16N (const VectorRegister4Float &Vec, uint16 *Out)
 
FORCEINLINE VectorRegister4Int VectorIntSelect (const VectorRegister4Int &Mask, const VectorRegister4Int &Vec1, const VectorRegister4Int &Vec2)
 
FORCEINLINE VectorRegister4Int VectorFloatToInt (const VectorRegister4Float &A)
 
FORCEINLINE VectorRegister4Int VectorFloatToInt (const VectorRegister4Double &A)
 
FORCEINLINE VectorRegister4Int VectorRoundToIntHalfToEven (const VectorRegister4Float &Vec)
 
VectorRegister4i VectorIntExpandLow16To32 (VectorRegister4i V)
 

Variables

static const float VectorSinConstantsNEON::p = 0.225f
 
static const float VectorSinConstantsNEON::a = 7.58946609f
 
static const float VectorSinConstantsNEON::b = 1.63384342f
 
static const VectorRegister4Float VectorSinConstantsNEON::A = MakeVectorRegisterConstant(a, a, a, a)
 
static const VectorRegister4Float VectorSinConstantsNEON::B = MakeVectorRegisterConstant(b, b, b, b)
 

Macro Definition Documentation

◆ DECLARE_VECTOR_REGISTER

#define DECLARE_VECTOR_REGISTER ( X,
Y,
Z,
W )   MakeVectorRegister( X, Y, Z, W )

Definition at line 132 of file UnrealMathNeon.h.

◆ VECTOR_ROUND_TOWARD_ZERO

#define VECTOR_ROUND_TOWARD_ZERO   0

Control status bit to round all floating point math results towards zero.

Definition at line 2418 of file UnrealMathNeon.h.

◆ VectorCastFloatToInt

#define VectorCastFloatToInt ( Vec)    ((VectorRegister4i)vreinterpretq_s32_f32(Vec))

Definition at line 3026 of file UnrealMathNeon.h.

◆ VectorCastIntToFloat

#define VectorCastIntToFloat ( Vec)    ((VectorRegister4f)vreinterpretq_f32_s32(Vec))

Definition at line 3025 of file UnrealMathNeon.h.

◆ VectorGetComponent

#define VectorGetComponent ( Vec,
ElementIndex )   VectorGetComponentImpl<ElementIndex>(Vec)

Definition at line 1812 of file UnrealMathNeon.h.

◆ VectorGetControlRegister

#define VectorGetControlRegister ( )    0

Returns the control register.

Returns
The uint32 control register

Definition at line 2406 of file UnrealMathNeon.h.

◆ VectorIntAbs

Definition at line 2964 of file UnrealMathNeon.h.

◆ VectorIntAdd

#define VectorIntAdd ( A,
B )   vaddq_s32(A, B)

Definition at line 2957 of file UnrealMathNeon.h.

◆ VectorIntAnd

#define VectorIntAnd ( A,
B )   vandq_s32(A, B)

= a & b

Definition at line 2932 of file UnrealMathNeon.h.

◆ VectorIntAndNot

#define VectorIntAndNot ( A,
B )   vandq_s32(vmvnq_s32(A), B)

= (~a) & b to match _mm_andnot_si128

Definition at line 2938 of file UnrealMathNeon.h.

◆ VectorIntClamp

#define VectorIntClamp ( A,
B,
C )   VectorIntMin(VectorIntMax(A, B), C)

Definition at line 2963 of file UnrealMathNeon.h.

◆ VectorIntCompareEQ

#define VectorIntCompareEQ ( A,
B )   vceqq_s32(A,B)

Definition at line 2943 of file UnrealMathNeon.h.

◆ VectorIntCompareGE

#define VectorIntCompareGE ( A,
B )   vcgeq_s32(A,B)

Definition at line 2947 of file UnrealMathNeon.h.

◆ VectorIntCompareGT

#define VectorIntCompareGT ( A,
B )   vcgtq_s32(A,B)

Definition at line 2945 of file UnrealMathNeon.h.

◆ VectorIntCompareLE

#define VectorIntCompareLE ( A,
B )   vcleq_s32(A,B)

Definition at line 2948 of file UnrealMathNeon.h.

◆ VectorIntCompareLT

#define VectorIntCompareLT ( A,
B )   vcltq_s32(A,B)

Definition at line 2946 of file UnrealMathNeon.h.

◆ VectorIntCompareNEQ

#define VectorIntCompareNEQ ( A,
B )   VectorIntNot(VectorIntCompareEQ(A,B))

Definition at line 2944 of file UnrealMathNeon.h.

◆ VectorIntLoad

#define VectorIntLoad ( Ptr)    vld1q_s32( (int32*)((void*)(Ptr)) )

Loads 4 int32s from unaligned memory.

Parameters
PtrUnaligned memory pointer to the 4 int32s
Returns
VectorRegister4Int(Ptr[0], Ptr[1], Ptr[2], Ptr[3])

Definition at line 2996 of file UnrealMathNeon.h.

◆ VectorIntLoad1

#define VectorIntLoad1 ( Ptr)    vld1q_dup_s32((int32*)(Ptr))

Loads 1 int32 from unaligned memory into all components of a vector register.

Parameters
PtrUnaligned memory pointer to the 4 int32s
Returns
VectorRegister4Int(*Ptr, *Ptr, *Ptr, *Ptr)

Definition at line 3020 of file UnrealMathNeon.h.

◆ VectorIntLoadAligned

#define VectorIntLoadAligned ( Ptr)    vld1q_s32( (int32*)((void*)(Ptr)) )

Loads 4 int32s from aligned memory.

Parameters
PtrAligned memory pointer to the 4 int32s
Returns
VectorRegister4Int(Ptr[0], Ptr[1], Ptr[2], Ptr[3])

Definition at line 3012 of file UnrealMathNeon.h.

◆ VectorIntMax

#define VectorIntMax ( A,
B )   vmaxq_s32(A,B)

Definition at line 2962 of file UnrealMathNeon.h.

◆ VectorIntMin

#define VectorIntMin ( A,
B )   vminq_s32(A,B)

Definition at line 2961 of file UnrealMathNeon.h.

◆ VectorIntMultiply

#define VectorIntMultiply ( A,
B )   vmulq_s32(A, B)

Definition at line 2959 of file UnrealMathNeon.h.

◆ VectorIntNegate

#define VectorIntNegate ( A)    vnegq_s32(A)

Definition at line 2960 of file UnrealMathNeon.h.

◆ VectorIntNot

#define VectorIntNot ( A)    vmvnq_s32(A)

= ~a

Definition at line 2940 of file UnrealMathNeon.h.

◆ VectorIntOr

#define VectorIntOr ( A,
B )   vorrq_s32(A, B)

= a | b

Definition at line 2934 of file UnrealMathNeon.h.

◆ VectorIntSet1

#define VectorIntSet1 ( F)    vdupq_n_s32(F)

Definition at line 3022 of file UnrealMathNeon.h.

◆ VectorIntSign

◆ VectorIntStore

#define VectorIntStore ( Vec,
Ptr )   vst1q_s32( (int32*)(Ptr), Vec )

Stores a vector to memory (aligned or unaligned).

Parameters
VecVector to store
PtrMemory pointer

Definition at line 2988 of file UnrealMathNeon.h.

◆ VectorIntStoreAligned

#define VectorIntStoreAligned ( Vec,
Ptr )   vst1q_s32( (int32*)(Ptr), Vec )

Stores a vector to memory (aligned).

Parameters
VecVector to store
PtrAligned Memory pointer

Definition at line 3004 of file UnrealMathNeon.h.

◆ VectorIntSubtract

#define VectorIntSubtract ( A,
B )   vsubq_s32(A, B)

Definition at line 2958 of file UnrealMathNeon.h.

◆ VectorIntToFloat

#define VectorIntToFloat ( A)    vcvtq_f32_s32(A)

Definition at line 2968 of file UnrealMathNeon.h.

◆ VectorIntXor

#define VectorIntXor ( A,
B )   veorq_s32(A, B)

= a ^ b

Definition at line 2936 of file UnrealMathNeon.h.

◆ VectorOneVectorRegister

#define VectorOneVectorRegister ( )    VectorOneDouble()

Definition at line 163 of file UnrealMathNeon.h.

◆ VectorReplicate

#define VectorReplicate ( Vec,
ElementIndex )   VectorReplicateImpl<ElementIndex>(Vec)

Definition at line 761 of file UnrealMathNeon.h.

◆ VectorResetFloatRegisters

#define VectorResetFloatRegisters ( )

Resets the floating point registers so that they can be used again. Some intrinsics use these for MMX purposes (e.g. VectorLoadByte4 and VectorStoreByte4).

Definition at line 2399 of file UnrealMathNeon.h.

◆ VectorRound

#define VectorRound ( Vec)    vrndnq_f32(Vec)

Definition at line 3030 of file UnrealMathNeon.h.

◆ VectorSet1

#define VectorSet1 ( F)    vdupq_n_f32(F)

Definition at line 3024 of file UnrealMathNeon.h.

◆ VectorSetComponent

#define VectorSetComponent ( Vec,
ElementIndex,
Scalar )   VectorSetComponentImpl<ElementIndex>(Vec, Scalar)

Definition at line 552 of file UnrealMathNeon.h.

◆ VectorSetControlRegister

#define VectorSetControlRegister ( ControlStatus)

Sets the control register.

Parameters
ControlStatusThe uint32 control status value to set

Definition at line 2413 of file UnrealMathNeon.h.

◆ VectorSetZero

#define VectorSetZero ( )    vdupq_n_s32(0)

Definition at line 3023 of file UnrealMathNeon.h.

◆ VectorShiftLeftImm

#define VectorShiftLeftImm ( Vec,
ImmAmt )   vshlq_n_s32(Vec, ImmAmt)

Definition at line 3027 of file UnrealMathNeon.h.

◆ VectorShiftRightImmArithmetic

#define VectorShiftRightImmArithmetic ( Vec,
ImmAmt )   vshrq_n_s32(Vec, ImmAmt)

Definition at line 3028 of file UnrealMathNeon.h.

◆ VectorShiftRightImmLogical

#define VectorShiftRightImmLogical ( Vec,
ImmAmt )   vshrq_n_u32(Vec, ImmAmt)

Definition at line 3029 of file UnrealMathNeon.h.

◆ VectorStoreAlignedStreamed

#define VectorStoreAlignedStreamed ( Vec,
Ptr )   VectorStoreAligned( Vec, Ptr )

Same as VectorStoreAligned for Neon.

Parameters
VecVector to store
PtrAligned memory pointer

Definition at line 664 of file UnrealMathNeon.h.

◆ VectorZeroVectorRegister

#define VectorZeroVectorRegister ( )    VectorZeroDouble()

Definition at line 162 of file UnrealMathNeon.h.

Typedef Documentation

◆ AlignedRegister4

◆ GCC_ALIGN

16-byte vector register type

Definition at line 111 of file UnrealMathNeon.h.

◆ VectorRegister

◆ VectorRegister2d

◆ VectorRegister4d

◆ VectorRegister4f

◆ VectorRegister4i

Function Documentation

◆ MakeVectorRegister() [1/3]

FORCEINLINE VectorRegister4Double MakeVectorRegister ( double X,
double Y,
double Z,
double W )

Returns a vector based on 4 doubles.

Parameters
X1st double component
Y2nd double component
Z3rd double component
W4th double component
Returns
Vector of the 4 doubles

Definition at line 288 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MakeVectorRegister() [2/3]

FORCEINLINE VectorRegister4Float MakeVectorRegister ( float X,
float Y,
float Z,
float W )

Returns a vector based on 4 floats.

Parameters
X1st float component
Y2nd float component
Z3rd float component
W4th float component
Returns
Vector of the 4 floats

Definition at line 261 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ MakeVectorRegister() [3/3]

FORCEINLINE VectorRegister4Float MakeVectorRegister ( uint32 X,
uint32 Y,
uint32 Z,
uint32 W )

Returns a bitwise equivalent vector based on 4 uint32s.

Parameters
X1st uint32 component
Y2nd uint32 component
Z3rd uint32 component
W4th uint32 component
Returns
Bitwise equivalent vector with 4 floats

Definition at line 227 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ MakeVectorRegister2Double() [1/2]

FORCEINLINE VectorRegister2Double MakeVectorRegister2Double ( double X,
double Y )

Definition at line 332 of file UnrealMathNeon.h.

◆ MakeVectorRegister2Double() [2/2]

FORCEINLINE VectorRegister2Double MakeVectorRegister2Double ( uint64 X,
uint64 Y )

Definition at line 344 of file UnrealMathNeon.h.

◆ MakeVectorRegister2DoubleConstant()

FORCEINLINE constexpr VectorRegister2Double MakeVectorRegister2DoubleConstant ( double X,
double Y )
constexpr

Definition at line 125 of file UnrealMathNeon.h.

◆ MakeVectorRegisterDouble() [1/4]

Definition at line 307 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ MakeVectorRegisterDouble() [2/4]

FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble ( const VectorRegister4Float & From)

Definition at line 391 of file UnrealMathNeon.h.

◆ MakeVectorRegisterDouble() [3/4]

FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble ( double X,
double Y,
double Z,
double W )

Definition at line 302 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MakeVectorRegisterDouble() [4/4]

FORCEINLINE VectorRegister4Double MakeVectorRegisterDouble ( uint64 X,
uint64 Y,
uint64 Z,
uint64 W )

Definition at line 312 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MakeVectorRegisterDoubleMask()

FORCEINLINE VectorRegister4Double MakeVectorRegisterDoubleMask ( uint64 X,
uint64 Y,
uint64 Z,
uint64 W )

Definition at line 327 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ MakeVectorRegisterFloat() [1/2]

FORCEINLINE VectorRegister4Float MakeVectorRegisterFloat ( float X,
float Y,
float Z,
float W )

Definition at line 274 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ MakeVectorRegisterFloat() [2/2]

FORCEINLINE VectorRegister4Float MakeVectorRegisterFloat ( uint32 X,
uint32 Y,
uint32 Z,
uint32 W )

Definition at line 240 of file UnrealMathNeon.h.

◆ MakeVectorRegisterFloatConstant()

FORCEINLINE constexpr VectorRegister4Float MakeVectorRegisterFloatConstant ( float X,
float Y,
float Z,
float W )
constexpr

Definition at line 120 of file UnrealMathNeon.h.

◆ MakeVectorRegisterFloatFromDouble()

FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble ( const VectorRegister4Double & Vec)

Definition at line 397 of file UnrealMathNeon.h.

◆ MakeVectorRegisterFloatMask()

FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatMask ( uint32 X,
uint32 Y,
uint32 Z,
uint32 W )

Definition at line 246 of file UnrealMathNeon.h.

◆ MakeVectorRegisterInt()

FORCEINLINE VectorRegister4Int MakeVectorRegisterInt ( int32 X,
int32 Y,
int32 Z,
int32 W )

Returns a vector based on 4 int32.

Parameters
X1st int32 component
Y2nd int32 component
Z3rd int32 component
W4th int32 component
Returns
Vector of the 4 int32

Definition at line 365 of file UnrealMathNeon.h.

◆ MakeVectorRegisterInt64()

FORCEINLINE VectorRegister4Int MakeVectorRegisterInt64 ( int64 X,
int64 Y )

Definition at line 378 of file UnrealMathNeon.h.

◆ MakeVectorRegisterIntConstant()

FORCEINLINE constexpr VectorRegister4Int MakeVectorRegisterIntConstant ( int32 X,
int32 Y,
int32 Z,
int32 W )
constexpr

Definition at line 115 of file UnrealMathNeon.h.

◆ VectorAbs() [1/2]

Definition at line 775 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorAbs() [2/2]

Returns the absolute value (component-wise).

Parameters
VecSource vector
Returns
VectorRegister4Float( abs(Vec.x), abs(Vec.y), abs(Vec.z), abs(Vec.w) )

Definition at line 770 of file UnrealMathNeon.h.

◆ VectorACos() [1/2]

Definition at line 2666 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorACos() [2/2]

Definition at line 2660 of file UnrealMathNeon.h.

◆ VectorAdd() [1/2]

◆ VectorAdd() [2/2]

Adds two vectors (component-wise) and returns the result.

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x+Vec2.x, Vec1.y+Vec2.y, Vec1.z+Vec2.z, Vec1.w+Vec2.w )

Definition at line 809 of file UnrealMathNeon.h.

◆ VectorAnyGreaterThan() [1/2]

FORCEINLINE int32 VectorAnyGreaterThan ( VectorRegister4Double Vec1,
VectorRegister4Double Vec2 )

Definition at line 2383 of file UnrealMathNeon.h.

◆ VectorAnyGreaterThan() [2/2]

FORCEINLINE int32 VectorAnyGreaterThan ( VectorRegister4Float Vec1,
VectorRegister4Float Vec2 )

Returns non-zero if any element in Vec1 is greater than the corresponding element in Vec2, otherwise 0.

Parameters
Vec11st source vector
Vec22nd source vector
Returns
Non-zero integer if (Vec1.x > Vec2.x) || (Vec1.y > Vec2.y) || (Vec1.z > Vec2.z) || (Vec1.w > Vec2.w)

Definition at line 2373 of file UnrealMathNeon.h.

◆ VectorASin() [1/2]

Definition at line 2653 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorASin() [2/2]

Definition at line 2647 of file UnrealMathNeon.h.

◆ VectorATan() [1/2]

Definition at line 2679 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorATan() [2/2]

Definition at line 2673 of file UnrealMathNeon.h.

◆ VectorATan2() [1/2]

Definition at line 2697 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorATan2() [2/2]

◆ VectorBitwiseAnd() [1/2]

Definition at line 1188 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorBitwiseAnd() [2/2]

Combines two vectors using bitwise AND (treating each vector as a 128 bit field)

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( for each bit i: Vec1[i] & Vec2[i] )

Definition at line 1183 of file UnrealMathNeon.h.

◆ VectorBitwiseOr() [1/2]

Definition at line 1168 of file UnrealMathNeon.h.

◆ VectorBitwiseOr() [2/2]

Combines two vectors using bitwise OR (treating each vector as a 128 bit field)

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( for each bit i: Vec1[i] | Vec2[i] )

Definition at line 1163 of file UnrealMathNeon.h.

◆ VectorBitwiseXor() [1/2]

Definition at line 1208 of file UnrealMathNeon.h.

◆ VectorBitwiseXor() [2/2]

Combines two vectors using bitwise XOR (treating each vector as a 128 bit field)

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( for each bit i: Vec1[i] ^ Vec2[i] )

Definition at line 1203 of file UnrealMathNeon.h.

◆ VectorCeil() [1/2]

Definition at line 2713 of file UnrealMathNeon.h.

◆ VectorCeil() [2/2]

Definition at line 2708 of file UnrealMathNeon.h.

◆ VectorCombineHigh() [1/2]

Definition at line 1481 of file UnrealMathNeon.h.

◆ VectorCombineHigh() [2/2]

Creates a vector by combining two high components from each vector

Parameters
Vec1Source vector1
Vec2Source vector2
Returns
The combined vector

Definition at line 1476 of file UnrealMathNeon.h.

◆ VectorCombineLow() [1/2]

Definition at line 1501 of file UnrealMathNeon.h.

◆ VectorCombineLow() [2/2]

Creates a vector by combining two low components from each vector

Parameters
Vec1Source vector1
Vec2Source vector2
Returns
The combined vector

Definition at line 1496 of file UnrealMathNeon.h.

◆ VectorCompareEQ() [1/2]

Definition at line 1020 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorCompareEQ() [2/2]

Creates a four-part mask based on component-wise == compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x == Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1015 of file UnrealMathNeon.h.

◆ VectorCompareGE() [1/2]

Definition at line 1085 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorCompareGE() [2/2]

Creates a four-part mask based on component-wise >= compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x >= Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1080 of file UnrealMathNeon.h.

◆ VectorCompareGT() [1/2]

Definition at line 1064 of file UnrealMathNeon.h.

◆ VectorCompareGT() [2/2]

Creates a four-part mask based on component-wise > compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x > Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1059 of file UnrealMathNeon.h.

◆ VectorCompareLE() [1/2]

Definition at line 1125 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorCompareLE() [2/2]

Creates a four-part mask based on component-wise <= compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x <= Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1120 of file UnrealMathNeon.h.

◆ VectorCompareLT() [1/2]

Definition at line 1105 of file UnrealMathNeon.h.

◆ VectorCompareLT() [2/2]

Creates a four-part mask based on component-wise < compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x < Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1100 of file UnrealMathNeon.h.

◆ VectorCompareNE() [1/2]

Definition at line 1043 of file UnrealMathNeon.h.

◆ VectorCompareNE() [2/2]

Creates a four-part mask based on component-wise != compares of the input vectors

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x != Vec2.x ? 0xFFFFFFFF : 0, same for yzw )

Definition at line 1038 of file UnrealMathNeon.h.

◆ VectorContainsNaNOrInfinite() [1/2]

bool VectorContainsNaNOrInfinite ( const VectorRegister4Double & Vec)
inline

Definition at line 2555 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorContainsNaNOrInfinite() [2/2]

bool VectorContainsNaNOrInfinite ( const VectorRegister4Float & Vec)
inline

Definition at line 2532 of file UnrealMathNeon.h.

◆ VectorCos() [1/2]

Definition at line 2849 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorCos() [2/2]

Definition at line 2844 of file UnrealMathNeon.h.

◆ VectorCross() [1/2]

Definition at line 1546 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorCross() [2/2]

Calculates the cross product of two vectors (XYZ components). W of the input should be 0, and will remain 0.

Parameters
Vec11st vector
Vec22nd vector
Returns
cross(Vec1.xyz, Vec2.xyz). W of the input should be 0, and will remain 0.

Definition at line 1538 of file UnrealMathNeon.h.

◆ VectorDeinterleave() [1/2]

Definition at line 1525 of file UnrealMathNeon.h.

◆ VectorDeinterleave() [2/2]

Deinterleaves the components of the two given vectors such that the even components are in one vector and the odds in another.

Parameters
Lo[Even0, Odd0, Even1, Odd1]
Hi[Even2, Odd2, Even3, Odd3]
OutEvens[Even0, Even1, Even2, Even3]
OutOdds[Odd0, Odd1, Odd2, Odd3]

Definition at line 1518 of file UnrealMathNeon.h.

◆ VectorDivide() [1/2]

Definition at line 882 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorDivide() [2/2]

Divides two vectors (component-wise) and returns the result.

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x/Vec2.x, Vec1.y/Vec2.y, Vec1.z/Vec2.z, Vec1.w/Vec2.w )

Definition at line 877 of file UnrealMathNeon.h.

◆ VectorDot3() [1/2]

◆ VectorDot3() [2/2]

Calculates the dot3 product of two vectors and returns a vector with the result in all 4 components. Only really efficient on Xbox 360.

Parameters
Vec11st vector
Vec22nd vector
Returns
d = dot3(Vec1.xyz, Vec2.xyz), VectorRegister4Float( d, d, d, d )

Definition at line 942 of file UnrealMathNeon.h.

◆ VectorDot3Scalar() [1/2]

Definition at line 968 of file UnrealMathNeon.h.

◆ VectorDot3Scalar() [2/2]

FORCEINLINE float VectorDot3Scalar ( const VectorRegister4Float & Vec1,
const VectorRegister4Float & Vec2 )

Definition at line 963 of file UnrealMathNeon.h.

◆ VectorDot4() [1/2]

Definition at line 995 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorDot4() [2/2]

Calculates the dot4 product of two vectors and returns a vector with the result in all 4 components. Only really efficient on Xbox 360.

Parameters
Vec11st vector
Vec22nd vector
Returns
d = dot4(Vec1.xyzw, Vec2.xyzw), VectorRegister4Float( d, d, d, d )

Definition at line 987 of file UnrealMathNeon.h.

◆ VectorExp() [1/2]

Definition at line 2588 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorExp() [2/2]

Definition at line 2582 of file UnrealMathNeon.h.

◆ VectorExp2() [1/2]

Definition at line 2601 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorExp2() [2/2]

Definition at line 2595 of file UnrealMathNeon.h.

◆ VectorFloatToInt() [1/2]

Definition at line 2975 of file UnrealMathNeon.h.

◆ VectorFloatToInt() [2/2]

Definition at line 2970 of file UnrealMathNeon.h.

◆ VectorFloor() [1/2]

Definition at line 2726 of file UnrealMathNeon.h.

◆ VectorFloor() [2/2]

Definition at line 2721 of file UnrealMathNeon.h.

◆ VectorGetComponentDynamic() [1/2]

FORCEINLINE double VectorGetComponentDynamic ( VectorRegister4Double Vec,
uint32 ElementIndex )

Definition at line 1820 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorGetComponentDynamic() [2/2]

FORCEINLINE float VectorGetComponentDynamic ( VectorRegister4Float Vec,
uint32 ElementIndex )

Definition at line 1814 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorGetComponentImpl() [1/3]

template<int ElementIndex, typename std::enable_if<(ElementIndex > 1), bool >::type = true>
FORCEINLINE double VectorGetComponentImpl ( const VectorRegister4Double & Vec)

Definition at line 1801 of file UnrealMathNeon.h.

◆ VectorGetComponentImpl() [2/3]

template<int ElementIndex>
FORCEINLINE double VectorGetComponentImpl ( VectorRegister2Double Vec)

Definition at line 1795 of file UnrealMathNeon.h.

◆ VectorGetComponentImpl() [3/3]

template<uint32 ElementIndex>
FORCEINLINE float VectorGetComponentImpl ( VectorRegister4Float Vec)

Returns a component from a vector.

Parameters
VecVector register
ComponentIndexWhich component to get, X=0, Y=1, Z=2, W=3
Returns
The component as a float

Definition at line 1789 of file UnrealMathNeon.h.

◆ VectorIntExpandLow16To32()

VectorRegister4i VectorIntExpandLow16To32 ( VectorRegister4i V)
inline

Definition at line 3037 of file UnrealMathNeon.h.

◆ VectorIntSelect()

Definition at line 2951 of file UnrealMathNeon.h.

◆ VectorLoad() [1/2]

Definition at line 470 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorLoad() [2/2]

Loads 4 floats from unaligned memory.

Parameters
PtrUnaligned memory pointer to the 4 floats
Returns
VectorRegister4Float(Ptr[0], Ptr[1], Ptr[2], Ptr[3])

Definition at line 465 of file UnrealMathNeon.h.

◆ VectorLoadAligned() [1/2]

VectorRegister4Double VectorLoadAligned ( const double * Ptr)

Definition at line 566 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorLoadAligned() [2/2]

VectorRegister4Float VectorLoadAligned ( const float * Ptr)

Loads 4 floats from aligned memory.

Parameters
PtrAligned memory pointer to the 4 floats
Returns
VectorRegister4Float(Ptr[0], Ptr[1], Ptr[2], Ptr[3])

Definition at line 561 of file UnrealMathNeon.h.

◆ VectorLoadByte4()

FORCEINLINE VectorRegister4Float VectorLoadByte4 ( const void * Ptr)

Loads 4 uint8s from unaligned memory and converts them into 4 floats. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar floats after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the 4 uint8s.
Returns
VectorRegister4Float( float(Ptr[0]), float(Ptr[1]), float(Ptr[2]), float(Ptr[3]) )

Definition at line 2227 of file UnrealMathNeon.h.

◆ VectorLoadByte4Reverse()

FORCEINLINE VectorRegister4Float VectorLoadByte4Reverse ( const uint8 * Ptr)

Loads 4 uint8s from unaligned memory and converts them into 4 floats in reversed order. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar floats after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the 4 uint8s.
Returns
VectorRegister4Float( float(Ptr[3]), float(Ptr[2]), float(Ptr[1]), float(Ptr[0]) )

Definition at line 2255 of file UnrealMathNeon.h.

◆ VectorLoadDouble1()

FORCEINLINE VectorRegister4Double VectorLoadDouble1 ( const double * Ptr)

Definition at line 582 of file UnrealMathNeon.h.

◆ VectorLoadFloat1()

FORCEINLINE VectorRegister4Float VectorLoadFloat1 ( const float * Ptr)

Loads 1 float from unaligned memory and replicates it to all 4 elements.

Parameters
PtrUnaligned memory pointer to the float
Returns
VectorRegister4Float(Ptr[0], Ptr[0], Ptr[0], Ptr[0])

Definition at line 577 of file UnrealMathNeon.h.

◆ VectorLoadFloat2()

FORCEINLINE VectorRegister4Float VectorLoadFloat2 ( const float * Ptr)

Loads 2 floats from unaligned memory into X and Y and duplicates them in Z and W.

Parameters
PtrUnaligned memory pointer to the floats
Returns
VectorRegister4Float(Ptr[0], Ptr[1], Ptr[0], Ptr[1])

Definition at line 483 of file UnrealMathNeon.h.

◆ VectorLoadFloat3()

FORCEINLINE VectorRegister4Double VectorLoadFloat3 ( const double * Ptr)

Loads 3 floats from unaligned memory and leaves W undefined.

Parameters
PtrUnaligned memory pointer to the 3 floats
Returns
VectorRegister4Float(Ptr[0], Ptr[1], Ptr[2], 0.0f)

Definition at line 494 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorLoadFloat3_W1()

FORCEINLINE VectorRegister4Double VectorLoadFloat3_W1 ( const double * Ptr)

Loads 3 FLOATs from unaligned memory and sets W=1.

Parameters
PtrUnaligned memory pointer to the 3 FLOATs
Returns
VectorRegister4Float(Ptr[0], Ptr[1], Ptr[2], 1.0f)

Definition at line 514 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorLoadSignedByte4()

FORCEINLINE VectorRegister4Float VectorLoadSignedByte4 ( const void * Ptr)

Loads 4 int8s from unaligned memory and converts them into 4 floats. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar floats after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the 4 uint8s.
Returns
VectorRegister4Float( float(Ptr[0]), float(Ptr[1]), float(Ptr[2]), float(Ptr[3]) )

Definition at line 2241 of file UnrealMathNeon.h.

◆ VectorLoadSRGBA16N()

FORCEINLINE VectorRegister4Float VectorLoadSRGBA16N ( const void * Ptr)

Loads packed signed RGBA16(4 bytes) from unaligned memory and converts them into 4 FLOATs. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar FLOATs after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the RGBA16(8 bytes).
Returns
VectorRegister4Float with 4 FLOATs loaded from Ptr.

Definition at line 2890 of file UnrealMathNeon.h.

◆ VectorLoadTwoPairsFloat() [1/2]

FORCEINLINE VectorRegister4Double VectorLoadTwoPairsFloat ( const double * Ptr1,
const double * Ptr2 )

Definition at line 605 of file UnrealMathNeon.h.

◆ VectorLoadTwoPairsFloat() [2/2]

FORCEINLINE VectorRegister4Float VectorLoadTwoPairsFloat ( const float * Ptr1,
const float * Ptr2 )

Loads 4 unaligned floats - 2 from the first pointer, 2 from the second, and packs them in to 1 vector.

Parameters
Ptr1Unaligned memory pointer to the first 2 floats
Ptr2Unaligned memory pointer to the second 2 floats
Returns
VectorRegister4Float(Ptr1[0], Ptr1[1], Ptr2[0], Ptr2[1])

Definition at line 598 of file UnrealMathNeon.h.

◆ VectorLoadURGB10A2N()

FORCEINLINE VectorRegister4Float VectorLoadURGB10A2N ( void * Ptr)

Loads packed RGB10A2(4 bytes) from unaligned memory and converts them into 4 FLOATs. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar FLOATs after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the RGB10A2(4 bytes).
Returns
VectorRegister4Float with 4 FLOATs loaded from Ptr.

Definition at line 2329 of file UnrealMathNeon.h.

◆ VectorLoadURGBA16N()

FORCEINLINE VectorRegister4Float VectorLoadURGBA16N ( const uint16 * E)

Loads packed RGBA16(4 bytes) from unaligned memory and converts them into 4 FLOATs. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar FLOATs after you've used this intrinsic!

Parameters
PtrUnaligned memory pointer to the RGBA16(8 bytes).
Returns
VectorRegister4Float with 4 FLOATs loaded from Ptr.

Definition at line 2872 of file UnrealMathNeon.h.

◆ VectorLog() [1/2]

Definition at line 2614 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorLog() [2/2]

Definition at line 2608 of file UnrealMathNeon.h.

◆ VectorLog2() [1/2]

Definition at line 2627 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorLog2() [2/2]

Definition at line 2621 of file UnrealMathNeon.h.

◆ VectorMaskBits() [1/2]

FORCEINLINE uint32 VectorMaskBits ( VectorRegister4Double VecMask)

Definition at line 1459 of file UnrealMathNeon.h.

◆ VectorMaskBits() [2/2]

FORCEINLINE uint32 VectorMaskBits ( VectorRegister4Float VecMask)

Returns an integer bit-mask (0x00 - 0x0f) based on the sign-bit for each component in a vector.

Parameters
VecMaskVector
Returns
Bit 0 = sign(VecMask.x), Bit 1 = sign(VecMask.y), Bit 2 = sign(VecMask.z), Bit 3 = sign(VecMask.w)

Definition at line 1451 of file UnrealMathNeon.h.

◆ VectorMatrixInverse() [1/2]

FORCEINLINE void VectorMatrixInverse ( FMatrix44d * DstMatrix,
const FMatrix44d * SrcMatrix )

Definition at line 2016 of file UnrealMathNeon.h.

◆ VectorMatrixInverse() [2/2]

FORCEINLINE void VectorMatrixInverse ( FMatrix44f * DstMatrix,
const FMatrix44f * SrcMatrix )

Calculate the inverse of an FMatrix.

Parameters
DstMatrixFMatrix pointer to where the result should be stored
SrcMatrixFMatrix pointer to the Matrix to be inversed

Definition at line 1932 of file UnrealMathNeon.h.

◆ VectorMatrixMultiply() [1/2]

FORCEINLINE void VectorMatrixMultiply ( FMatrix44d * Result,
const FMatrix44d * Matrix1,
const FMatrix44d * Matrix2 )

Definition at line 1866 of file UnrealMathNeon.h.

◆ VectorMatrixMultiply() [2/2]

FORCEINLINE void VectorMatrixMultiply ( FMatrix44f * Result,
const FMatrix44f * Matrix1,
const FMatrix44f * Matrix2 )

Multiplies two 4x4 matrices.

Parameters
ResultPointer to where the result should be stored
Matrix1Pointer to the first matrix
Matrix2Pointer to the second matrix

Definition at line 1833 of file UnrealMathNeon.h.

◆ VectorMax() [1/2]

◆ VectorMax() [2/2]

Returns the maximum values of two vectors (component-wise).

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( max(Vec1.x,Vec2.x), max(Vec1.y,Vec2.y), max(Vec1.z,Vec2.z), max(Vec1.w,Vec2.w) )

Definition at line 2187 of file UnrealMathNeon.h.

◆ VectorMergeVecXYZ_VecW() [1/2]

Definition at line 2212 of file UnrealMathNeon.h.

◆ VectorMergeVecXYZ_VecW() [2/2]

Merges the XYZ components of one vector with the W component of another vector and returns the result.

Parameters
VecXYZSource vector for XYZ_
VecWSource register for ___W (note: the fourth component is used, not the first)
Returns
VectorRegister4Float(VecXYZ.x, VecXYZ.y, VecXYZ.z, VecW.w)

Definition at line 2207 of file UnrealMathNeon.h.

◆ VectorMin() [1/2]

◆ VectorMin() [2/2]

Returns the minimum values of two vectors (component-wise).

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( min(Vec1.x,Vec2.x), min(Vec1.y,Vec2.y), min(Vec1.z,Vec2.z), min(Vec1.w,Vec2.w) )

Definition at line 2167 of file UnrealMathNeon.h.

◆ VectorMod() [1/2]

Definition at line 2764 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorMod() [2/2]

Definition at line 2747 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorMultiply() [1/3]

Definition at line 856 of file UnrealMathNeon.h.

◆ VectorMultiply() [2/3]

Definition at line 861 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorMultiply() [3/3]

Multiplies two vectors (component-wise) and returns the result.

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x*Vec2.x, Vec1.y*Vec2.y, Vec1.z*Vec2.z, Vec1.w*Vec2.w )

Definition at line 851 of file UnrealMathNeon.h.

◆ VectorMultiplyAdd() [1/2]

Definition at line 904 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorMultiplyAdd() [2/2]

Multiplies two vectors (component-wise), adds in the third vector and returns the result.

Parameters
Vec11st vector
Vec22nd vector
Acc3rd vector
Returns
VectorRegister4Float( Vec1.x*Vec2.x + Acc.x, Vec1.y*Vec2.y + Acc.y, Vec1.z*Vec2.z + Acc.z, Vec1.w*Vec2.w + Acc.w )

Definition at line 899 of file UnrealMathNeon.h.

◆ VectorNegate() [1/2]

Definition at line 794 of file UnrealMathNeon.h.

◆ VectorNegate() [2/2]

Returns the negated value (component-wise).

Parameters
VecSource vector
Returns
VectorRegister4Float( -Vec.x, -Vec.y, -Vec.z, -Vec.w )

Definition at line 789 of file UnrealMathNeon.h.

◆ VectorNegateMultiplyAdd() [1/2]

Definition at line 925 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorNegateMultiplyAdd() [2/2]

Multiplies two vectors (component-wise) and subtracts the result from the third vector.

Parameters
Vec11st vector
Vec22nd vector
Sub3rd vector
Returns
VectorRegister4Float( Sub.x - Vec1.x*Vec2.x, Sub.y - Vec1.y*Vec2.y, Sub.z - Vec1.z*Vec2.z, Sub.w - Vec1.w*Vec2.w )

Definition at line 920 of file UnrealMathNeon.h.

◆ VectorOneDouble()

FORCEINLINE VectorRegister4Double VectorOneDouble ( void )

Definition at line 451 of file UnrealMathNeon.h.

◆ VectorOneFloat()

Returns a vector with all ones.

Returns
VectorRegister4Float(1.0f, 1.0f, 1.0f, 1.0f)

Definition at line 446 of file UnrealMathNeon.h.

◆ VectorPow() [1/2]

Definition at line 1573 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorPow() [2/2]

Calculates x raised to the power of y (component-wise).

Parameters
BaseBase vector
ExponentExponent vector
Returns
VectorRegister4Float( Base.x^Exponent.x, Base.y^Exponent.y, Base.z^Exponent.z, Base.w^Exponent.w )

Definition at line 1561 of file UnrealMathNeon.h.

◆ VectorQuaternionMultiply() [1/2]

Definition at line 2466 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorQuaternionMultiply() [2/2]

Multiplies two quaternions; the order matters.

When composing quaternions: VectorQuaternionMultiply(C, A, B) will yield a quaternion C = A * B that logically first applies B then A to any subsequent transformation (right first, then left).

Parameters
ResultPointer to where the result Quat1 * Quat2 should be stored
Quat1Pointer to the first quaternion (must not be the destination)
Quat2Pointer to the second quaternion (must not be the destination)

Definition at line 2461 of file UnrealMathNeon.h.

◆ VectorQuaternionMultiply2() [1/2]

Definition at line 2441 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorQuaternionMultiply2() [2/2]

FORCEINLINE VectorRegister4Float VectorQuaternionMultiply2 ( const VectorRegister4Float & Quat1,
const VectorRegister4Float & Quat2 )

Multiplies two quaternions; the order matters.

Order matters when composing quaternions: C = VectorQuaternionMultiply2(A, B) will yield a quaternion C = A * B that logically first applies B then A to any subsequent transformation (right first, then left).

Parameters
Quat1Pointer to the first quaternion
Quat2Pointer to the second quaternion
Returns
Quat1 * Quat2

Definition at line 2431 of file UnrealMathNeon.h.

◆ VectorReciprocal() [1/2]

Definition at line 1631 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorReciprocal() [2/2]

Computes the reciprocal of a vector (component-wise) and returns the result.

Parameters
Vec1st vector
Returns
VectorRegister4Float( 1.0f / Vec.x, 1.0f / Vec.y, 1.0f / Vec.z, 1.0f / Vec.w )

Definition at line 1612 of file UnrealMathNeon.h.

◆ VectorReciprocalEstimate() [1/2]

FORCEINLINE VectorRegister4Double VectorReciprocalEstimate ( const VectorRegister4Double & Vec)

Definition at line 1597 of file UnrealMathNeon.h.

◆ VectorReciprocalEstimate() [2/2]

FORCEINLINE VectorRegister4Float VectorReciprocalEstimate ( const VectorRegister4Float & Vec)

Computes an estimate of the reciprocal of a vector (component-wise) and returns the result.

Parameters
Vec1st vector
Returns
VectorRegister4Float( (Estimate) 1.0f / Vec.x, (Estimate) 1.0f / Vec.y, (Estimate) 1.0f / Vec.z, (Estimate) 1.0f / Vec.w )

Definition at line 1592 of file UnrealMathNeon.h.

◆ VectorReciprocalLen() [1/2]

Definition at line 1724 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorReciprocalLen() [2/2]

Return Reciprocal Length of the vector

Parameters
VectorVector
Returns
VectorRegister4Float(rlen, rlen, rlen, rlen) when rlen = 1/sqrt(dot4(V))

Definition at line 1719 of file UnrealMathNeon.h.

◆ VectorReciprocalLenEstimate() [1/2]

FORCEINLINE VectorRegister4Double VectorReciprocalLenEstimate ( const VectorRegister4Double & Vector)

Definition at line 1740 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorReciprocalLenEstimate() [2/2]

FORCEINLINE VectorRegister4Float VectorReciprocalLenEstimate ( const VectorRegister4Float & Vector)

Return Reciprocal Length of the vector (estimate)

Parameters
VectorVector
Returns
VectorRegister4Float(rlen, rlen, rlen, rlen) when rlen = 1/sqrt(dot4(V)) (estimate)

Definition at line 1735 of file UnrealMathNeon.h.

◆ VectorReciprocalSqrt() [1/2]

Definition at line 1694 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorReciprocalSqrt() [2/2]

Return the reciprocal of the square root of each component

Parameters
VectorVector
Returns
VectorRegister4Float(1/sqrt(Vec.X), 1/sqrt(Vec.Y), 1/sqrt(Vec.Z), 1/sqrt(Vec.W))

Definition at line 1681 of file UnrealMathNeon.h.

◆ VectorReciprocalSqrtEstimate() [1/2]

FORCEINLINE VectorRegister4Double VectorReciprocalSqrtEstimate ( const VectorRegister4Double & Vec)

Definition at line 1667 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorReciprocalSqrtEstimate() [2/2]

FORCEINLINE VectorRegister4Float VectorReciprocalSqrtEstimate ( const VectorRegister4Float & Vec)

Returns an estimate of 1/sqrt(c) for each component of the vector

Parameters
VectorVector
Returns
VectorRegister4Float(1/sqrt(t), 1/sqrt(t), 1/sqrt(t), 1/sqrt(t))

Definition at line 1662 of file UnrealMathNeon.h.

◆ VectorReplicateImpl() [1/3]

template<int ElementIndex>
FORCEINLINE VectorRegister2Double VectorReplicateImpl ( const VectorRegister2Double & Vec)

Definition at line 738 of file UnrealMathNeon.h.

◆ VectorReplicateImpl() [2/3]

template<int ElementIndex, typename std::enable_if<(ElementIndex<=1), bool >::type = true>
FORCEINLINE VectorRegister4Double VectorReplicateImpl ( const VectorRegister4Double & Vec)

Definition at line 744 of file UnrealMathNeon.h.

◆ VectorReplicateImpl() [3/3]

template<int ElementIndex>
FORCEINLINE VectorRegister4Float VectorReplicateImpl ( const VectorRegister4Float & Vec)

Replicates one element into all four elements and returns the new vector. Must be a #define for ELementIndex to be a constant integer

Parameters
VecSource vector
ElementIndexIndex (0-3) of the element to replicate
Returns
VectorRegister4Float( Vec[ElementIndex], Vec[ElementIndex], Vec[ElementIndex], Vec[ElementIndex] )

Definition at line 732 of file UnrealMathNeon.h.

◆ VectorRoundToIntHalfToEven()

FORCEINLINE VectorRegister4Int VectorRoundToIntHalfToEven ( const VectorRegister4Float & Vec)

Definition at line 3032 of file UnrealMathNeon.h.

◆ VectorSelect() [1/2]

Definition at line 1148 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorSelect() [2/2]

Does a bitwise vector selection based on a mask (e.g., created from VectorCompareXX)

Parameters
MaskMask (when 1: use the corresponding bit from Vec1 otherwise from Vec2)
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( for each bit i: Mask[i] ? Vec1[i] : Vec2[i] )

Definition at line 1143 of file UnrealMathNeon.h.

◆ VectorSet_W0() [1/2]

Definition at line 1757 of file UnrealMathNeon.h.

◆ VectorSet_W0() [2/2]

Loads XYZ and sets W=0

Parameters
VectorVectorRegister4Float
Returns
VectorRegister4Float(X, Y, Z, 0.0f)

Definition at line 1752 of file UnrealMathNeon.h.

◆ VectorSet_W1() [1/2]

Definition at line 1774 of file UnrealMathNeon.h.

◆ VectorSet_W1() [2/2]

Loads XYZ and sets W=1.

Parameters
VectorVectorRegister4Float
Returns
VectorRegister4Float(X, Y, Z, 1.0f)

Definition at line 1769 of file UnrealMathNeon.h.

◆ VectorSetComponentImpl() [1/3]

template<int ElementIndex>
FORCEINLINE VectorRegister2Double VectorSetComponentImpl ( const VectorRegister2Double & Vec,
double Scalar )

Definition at line 529 of file UnrealMathNeon.h.

◆ VectorSetComponentImpl() [2/3]

template<int ElementIndex, typename std::enable_if<(ElementIndex > 1), bool >::type = true>
FORCEINLINE VectorRegister4Double VectorSetComponentImpl ( const VectorRegister4Double & Vec,
double Scalar )

Definition at line 535 of file UnrealMathNeon.h.

◆ VectorSetComponentImpl() [3/3]

template<int ElementIndex>
FORCEINLINE VectorRegister4Float VectorSetComponentImpl ( const VectorRegister4Float & Vec,
float Scalar )

Sets a single component of a vector. Must be a define since ElementIndex needs to be a constant integer

Definition at line 523 of file UnrealMathNeon.h.

◆ VectorSetFloat1() [1/2]

Definition at line 624 of file UnrealMathNeon.h.

◆ VectorSetFloat1() [2/2]

FORCEINLINE VectorRegister4Float VectorSetFloat1 ( float X)

Propagates passed in float to all registers.

Parameters
Xfloat component
Returns
VectorRegister4Float(X, X, X, X)

Definition at line 619 of file UnrealMathNeon.h.

◆ VectorShuffle() [1/2]

FORCEINLINE VectorRegister4Double VectorShuffle ( VectorRegister4Double V1,
VectorRegister4Double V2,
uint32 PermuteX,
uint32 PermuteY,
uint32 PermuteZ,
uint32 PermuteW )

Definition at line 1385 of file UnrealMathNeon.h.

◆ VectorShuffle() [2/2]

FORCEINLINE VectorRegister4Float VectorShuffle ( VectorRegister4Float V1,
VectorRegister4Float V2,
uint32 PermuteX,
uint32 PermuteY,
uint32 PermuteZ,
uint32 PermuteW )

Creates a vector through selecting two components from each vector via a shuffle mask.

Parameters
Vec1Source vector1
Vec2Source vector2
XIndex for which component of Vector1 to use for X (literal 0-3)
YIndex for which component of Vector1 to use for Y (literal 0-3)
ZIndex for which component of Vector2 to use for Z (literal 0-3)
WIndex for which component of Vector2 to use for W (literal 0-3)
Returns
The swizzled vector

Definition at line 1346 of file UnrealMathNeon.h.

◆ VectorSign() [1/2]

Definition at line 2787 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorSign() [2/2]

Definition at line 2781 of file UnrealMathNeon.h.

◆ VectorSin() [1/2]

Definition at line 2834 of file UnrealMathNeon.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VectorSin() [2/2]

Definition at line 2814 of file UnrealMathNeon.h.

◆ VectorSinCos() [1/2]

Definition at line 2859 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorSinCos() [2/2]

Computes the sine and cosine of each component of a Vector.

Parameters
VSinAnglesVectorRegister4Float Pointer to where the Sin result should be stored
VCosAnglesVectorRegister4Float Pointer to where the Cos result should be stored
VAnglesVectorRegister4Float Pointer to the input angles

Definition at line 2478 of file UnrealMathNeon.h.

◆ VectorSqrt() [1/2]

Definition at line 1648 of file UnrealMathNeon.h.

◆ VectorSqrt() [2/2]

Return the square root of each component

Parameters
VectorVector
Returns
VectorRegister4Float(sqrt(Vec.X), sqrt(Vec.Y), sqrt(Vec.Z), sqrt(Vec.W))

Definition at line 1643 of file UnrealMathNeon.h.

◆ VectorStep() [1/2]

Definition at line 2799 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorStep() [2/2]

Definition at line 2793 of file UnrealMathNeon.h.

◆ VectorStore() [1/2]

FORCEINLINE void VectorStore ( const VectorRegister4Double & Vec,
double * Ptr )

Definition at line 677 of file UnrealMathNeon.h.

◆ VectorStore() [2/2]

FORCEINLINE void VectorStore ( const VectorRegister4Float & Vec,
float * Ptr )

Stores a vector to memory (aligned or unaligned).

Parameters
VecVector to store
PtrMemory pointer

Definition at line 672 of file UnrealMathNeon.h.

◆ VectorStoreAligned() [1/3]

void VectorStoreAligned ( const VectorRegister4Double & Vec,
double * Dst )

Definition at line 643 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorStoreAligned() [2/3]

void VectorStoreAligned ( const VectorRegister4Float & Vec,
float * Ptr )

Stores a vector to aligned memory.

Parameters
VecVector to store
PtrAligned memory pointer

Definition at line 638 of file UnrealMathNeon.h.

◆ VectorStoreAligned() [3/3]

FORCEINLINE void VectorStoreAligned ( VectorRegister4Float Vec,
FFloat16 * Ptr )

Definition at line 649 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorStoreByte4()

FORCEINLINE void VectorStoreByte4 ( VectorRegister4Float Vec,
void * Ptr )

Converts the 4 floats in the vector to 4 uint8s, clamped to [0,255], and stores to unaligned memory. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar floats after you've used this intrinsic!

Parameters
VecVector containing 4 floats
PtrUnaligned memory pointer to store the 4 uint8s.

Definition at line 2269 of file UnrealMathNeon.h.

◆ VectorStoreFloat1() [1/2]

FORCEINLINE void VectorStoreFloat1 ( const VectorRegister4Double & Vec,
double * Ptr )

Definition at line 718 of file UnrealMathNeon.h.

◆ VectorStoreFloat1() [2/2]

FORCEINLINE void VectorStoreFloat1 ( VectorRegister4Float Vec,
float * Ptr )

Stores the X component of a vector to unaligned memory.

Parameters
VecVector to store X
PtrUnaligned memory pointer

Definition at line 713 of file UnrealMathNeon.h.

◆ VectorStoreFloat3() [1/2]

FORCEINLINE void VectorStoreFloat3 ( const VectorRegister4Double & Vec,
double * Ptr )

Stores the XYZ components of a double vector pair to unaligned memory.

Parameters
VecVector to store XYZ
PtrUnaligned memory pointer

Definition at line 700 of file UnrealMathNeon.h.

◆ VectorStoreFloat3() [2/2]

FORCEINLINE void VectorStoreFloat3 ( const VectorRegister4Float & Vec,
float * Ptr )

Stores the XYZ components of a vector to unaligned memory.

Parameters
VecVector to store XYZ
PtrUnaligned memory pointer

Definition at line 688 of file UnrealMathNeon.h.

◆ VectorStoreHalf4()

template<bool bAligned>
FORCEINLINE void VectorStoreHalf4 ( VectorRegister4Float Vec,
void *RESTRICT Ptr )

Converts the 4 floats in the vector to 4 fp16 and stores based off bool to [un]aligned memory.

Parameters
VecVector containing 4 floats
PtrMemory pointer to store the 4 fp16's.

Definition at line 2303 of file UnrealMathNeon.h.

◆ VectorStoreSignedByte4()

FORCEINLINE void VectorStoreSignedByte4 ( VectorRegister4Float Vec,
void * Ptr )

Converts the 4 floats in the vector to 4 int8s, clamped to [-127, 127], and stores to unaligned memory. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar floats after you've used this intrinsic!

Parameters
VecVector containing 4 floats
PtrUnaligned memory pointer to store the 4 uint8s.

Definition at line 2286 of file UnrealMathNeon.h.

◆ VectorStoreURGB10A2N()

FORCEINLINE void VectorStoreURGB10A2N ( const VectorRegister4Float & Vec,
void * Ptr )

Converts the 4 FLOATs in the vector RGB10A2, clamped to [0, 1023] and [0, 3], and stores to unaligned memory. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar FLOATs after you've used this intrinsic!

Parameters
VecVector containing 4 FLOATs
PtrUnaligned memory pointer to store the packed RGB10A2(4 bytes).

Definition at line 2349 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorStoreURGBA16N()

FORCEINLINE void VectorStoreURGBA16N ( const VectorRegister4Float & Vec,
uint16 * Out )

Converts the 4 FLOATs in the vector RGBA16, clamped to [0, 65535], and stores to unaligned memory. IMPORTANT: You need to call VectorResetFloatRegisters() before using scalar FLOATs after you've used this intrinsic!

Parameters
VecVector containing 4 FLOATs
PtrUnaligned memory pointer to store the packed RGBA16(8 bytes).

Definition at line 2910 of file UnrealMathNeon.h.

◆ VectorSubtract() [1/2]

Definition at line 835 of file UnrealMathNeon.h.

◆ VectorSubtract() [2/2]

Subtracts a vector from another (component-wise) and returns the result.

Parameters
Vec11st vector
Vec22nd vector
Returns
VectorRegister4Float( Vec1.x-Vec2.x, Vec1.y-Vec2.y, Vec1.z-Vec2.z, Vec1.w-Vec2.w )

Definition at line 830 of file UnrealMathNeon.h.

◆ VectorSwizzle() [1/2]

Definition at line 1259 of file UnrealMathNeon.h.

◆ VectorSwizzle() [2/2]

Swizzles the 4 components of a vector and returns the result.

Parameters
VecSource vector
XIndex for which component to use for X (literal 0-3)
YIndex for which component to use for Y (literal 0-3)
ZIndex for which component to use for Z (literal 0-3)
WIndex for which component to use for W (literal 0-3)
Returns
The swizzled vector

Definition at line 1228 of file UnrealMathNeon.h.

◆ VectorTan() [1/2]

Definition at line 2640 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorTan() [2/2]

Definition at line 2634 of file UnrealMathNeon.h.

◆ VectorTransformVector() [1/3]

FORCEINLINE VectorRegister4Double VectorTransformVector ( const VectorRegister4Double & VecP,
const FMatrix44d * MatrixM )

Definition at line 2140 of file UnrealMathNeon.h.

◆ VectorTransformVector() [2/3]

FORCEINLINE VectorRegister4Float VectorTransformVector ( const VectorRegister4Float & VecP,
const FMatrix44d * MatrixM )

Definition at line 2120 of file UnrealMathNeon.h.

◆ VectorTransformVector() [3/3]

FORCEINLINE VectorRegister4Float VectorTransformVector ( const VectorRegister4Float & VecP,
const FMatrix44f * MatrixM )

Calculate Homogeneous transform.

Parameters
VecPVectorRegister4Float
MatrixMFMatrix pointer to the Matrix to apply transform
Returns
VectorRegister4Float = VecP*MatrixM

Definition at line 2107 of file UnrealMathNeon.h.

◆ VectorTruncate() [1/2]

Definition at line 2739 of file UnrealMathNeon.h.

+ Here is the caller graph for this function:

◆ VectorTruncate() [2/2]

Definition at line 2734 of file UnrealMathNeon.h.

◆ VectorZeroDouble()

FORCEINLINE VectorRegister4Double VectorZeroDouble ( void )

Definition at line 434 of file UnrealMathNeon.h.

+ Here is the call graph for this function:

◆ VectorZeroFloat()

FORCEINLINE VectorRegister4Float VectorZeroFloat ( void )

Returns a vector with all zeros.

Returns
VectorRegister4Float(0.0f, 0.0f, 0.0f, 0.0f)

Definition at line 429 of file UnrealMathNeon.h.