18 #if defined(FORCE_NON_SIMD)
51 { *
this = (c &
val) | ((!c) & *
this); }
57 {
return ~(*
this ==
v); }
63 {
return ~(*
this <
v); }
65 {
return ~(*
this >
v); }
104 {
return *
this ==
v8uu(0); }
109 {
return *
this ^
v8uu(0xFFFFFFFF); }
133 float e,
float f,
float g,
float h)
149 { *
this = (val &
c) | (*
this & ~c); }
220 {
return *
this ^
v8uu(0xFFFFFFFF); }
260 template <
int A,
int B,
int C,
int D>
263 return VM_SHUFFLE_AVX<A,B,C,D>(
vector);
327 return (b & a) | andn(a, c);
333 return (b & a) | andn(a, c);
358 return vmax(vmin(a, c), b);
364 return vmax(vmin(a,
v8uf(c)),
v8uf(b));
368 allbits(
const v8uu &a)
370 return vm_allbits_avx(a.
vector);
374 anybits(
const v8uu &a)
386 madd(
const v8uf &v,
float f,
float a)
400 return madd(v, f, -s);
406 return madd(v, f, -s);
413 return madd(a, w1, b*w);
418 float rw,
float gw,
float bw)
453 return res[0] + res[1] + res[2];
460 return res[0] + res[1] + res[2] + res[3];
466 return SYSsqrt(
dot3(a, a));
478 return v8uf(a[1]*b[2] - a[2]*b[1],
479 a[2]*b[0] - a[0]*b[2],
480 a[0]*b[1] - a[1]*b[0], 0,
482 a[5]*b[6] - a[6]*b[5],
483 a[6]*b[4] - a[4]*b[6],
484 a[4]*b[5] - a[5]*b[4], 0);
494 #define VM_ALIGN_AVX(ptr, ASIZE, STYPE) \
495 ((((1<<ASIZE)-(intptr_t)ptr)&((1<<ASIZE)-1))/sizeof(STYPE))
SYS_FORCE_INLINE v8uu operator=(const v8uu &v)
SYS_FORCE_INLINE v8uf(const v8sf &v)
SYS_FORCE_INLINE void operator^=(const v8uu &r)
SYS_FORCE_INLINE v8uf operator-=(const v8uf &r)
SYS_FORCE_INLINE v8uf operator*(const v8uf &r) const
SYS_API double cos(double x)
SYS_FORCE_INLINE void condAssign(const v8uu &val, const v8uu &c)
SYS_FORCE_INLINE v8uu floor() const
SYS_FORCE_INLINE v8uf operator|(const v8uf &r) const
SYS_FORCE_INLINE v8uf clamp(float low, float high) const
SYS_FORCE_INLINE v8uu operator=(int32 v)
SYS_FORCE_INLINE v8uu operator*=(const v8uu &r)
SYS_FORCE_INLINE void operator&=(const v8uu &r)
SYS_FORCE_INLINE void setComp(int idx, int32 v)
#define VM_SHIFTRIGHT_AVX(A, C)
SYS_FORCE_INLINE v8uu operator*(const v8uu &r) const
SYS_FORCE_INLINE v8uu operator&&(const v8uu &r) const
SYS_FORCE_INLINE v8uu operator==(const v8uu &v) const
SYS_FORCE_INLINE void operator|=(const v8uu &r)
SYS_FORCE_INLINE v8uf operator&(const v8uu &r) const
SYS_FORCE_INLINE void store(int32 v[8]) const
SYS_FORCE_INLINE v8uu operator+=(const v8uu &r)
SYS_FORCE_INLINE v8uu operator-=(const v8uu &r)
SYS_FORCE_INLINE v8uf operator*=(const v8uf &r)
virtual bool lerp(GA_AttributeOperand &d, GA_AttributeOperand &a, GA_AttributeOperand &b, GA_AttributeOperand &t) const
d = SYSlerp(a, b, t);
SYS_FORCE_INLINE v8uf abs() const
SYS_FORCE_INLINE v8uu operator|(const v8uu &r) const
vfloat4 sqrt(const vfloat4 &a)
SYS_FORCE_INLINE v8uf operator=(const v8uf &v)
SYS_FORCE_INLINE v8uf operator^(const v8uf &r) const
SYS_FORCE_INLINE v8uu(const int32 v[8])
SYS_FORCE_INLINE v8uf clamp(const v8uf &low, const v8uf &high) const
OIIO_HOSTDEVICE void sincos(float x, float *sine, float *cosine)
SYS_FORCE_INLINE v8uf operator~() const
SYS_FORCE_INLINE v8uf operator/(const v8uf &r) const
SYS_FORCE_INLINE v8uf operator||(const v8uf &r) const
GLboolean GLboolean GLboolean GLboolean a
GLuint GLsizei GLsizei * length
SYS_FORCE_INLINE v8uf operator-(float r) const
SYS_FORCE_INLINE v8uu operator<=(const v8uf &v) const
OIIO_FORCEINLINE OIIO_HOSTDEVICE float msub(float a, float b, float c)
Fused multiply and subtract: (a*b - c)
**But if you need a result
SYS_FORCE_INLINE v8uf operator=(float v)
#define VM_CMPLT_AVX(A, B)
SYS_FORCE_INLINE v8uu operator<(const v8uu &v) const
SYS_FORCE_INLINE v8uu operator==(const v8uf &v) const
SYS_FORCE_INLINE v8uu operator*=(int32 r)
SYS_FORCE_INLINE v8uu operator>=(const v8uf &v) const
float dot3(const vfloat4 &a, const vfloat4 &b)
Return the float 3-component dot (inner) product of a and b.
SYS_FORCE_INLINE v8uf operator+(const v8uf &r) const
SYS_FORCE_INLINE v8uf operator-(const v8uf &r) const
SYS_FORCE_INLINE v8uu operator!=(const v8uf &v) const
SYS_FORCE_INLINE v8uu(int32 a, int32 b, int32 c, int32 d, int32 e, int32 f, int32 g, int32 h)
SYS_FORCE_INLINE v8uf operator|(const v8uu &r) const
#define VM_SHIFTLEFT_AVX(A, C)
SYS_FORCE_INLINE v8uu operator^(const v8uu &r) const
SYS_FORCE_INLINE v8uf(float a, float b, float c, float d, float e, float f, float g, float h)
SYS_FORCE_INLINE v8uf swizzle() const
SYS_FORCE_INLINE v8uf operator^(const v8uu &r) const
SYS_FORCE_INLINE v8uf operator-() const
SYS_FORCE_INLINE v8uu toSignedInt() const
SYS_FORCE_INLINE v8uu operator~() const
SYS_FORCE_INLINE v8uu operator-(const v8uu &r) const
SYS_FORCE_INLINE v8uu toUnsignedInt() const
This is a lie, it is a signed int.
SYS_FORCE_INLINE v8uu operator+(int32 r) const
SYS_FORCE_INLINE v8uf operator/=(const v8uf &r)
SYS_FORCE_INLINE v8uu operator=(v8si v)
SYS_FORCE_INLINE v8uf(const v8uf &v)
#define VM_CMPEQ_AVX(A, B)
SYS_FORCE_INLINE void store(float v[8]) const
SYS_FORCE_INLINE v8uu operator-(int32 r) const
SYS_FORCE_INLINE v8uu operator+=(int32 r)
OIIO_FORCEINLINE OIIO_HOSTDEVICE float madd(float a, float b, float c)
Fused multiply and add: (a*b + c)
SYS_FORCE_INLINE v8uu operator>(const v8uf &v) const
SYS_FORCE_INLINE v8uu operator>>(int32 c) const
SYS_FORCE_INLINE v8uu operator!=(const v8uu &v) const
SYS_FORCE_INLINE v8uu operator!() const
SYS_FORCE_INLINE v8uf operator/(float r) const
SYS_FORCE_INLINE v8uu operator||(const v8uu &r) const
SYS_FORCE_INLINE v8uf operator-=(float r)
SYS_FORCE_INLINE v8uf operator+=(const v8uf &r)
#define VM_CMPNE_AVX(A, B)
SYS_FORCE_INLINE v8uu operator&(const v8uu &r) const
SYS_FORCE_INLINE v8uu operator>=(const v8uu &v) const
GLboolean GLboolean GLboolean b
SYS_FORCE_INLINE v8uf recip() const
SYS_FORCE_INLINE v8uf(const float v[8])
SYS_FORCE_INLINE void setComp(int idx, float v)
SYS_FORCE_INLINE v8uu splitFloat()
SYS_FORCE_INLINE v8uu operator>(const v8uu &v) const
SYS_API double tan(double x)
GLfloat GLfloat GLfloat GLfloat h
SYS_FORCE_INLINE v8uf operator&(const v8uf &r) const
#define VM_CMPLE_AVX(A, B)
SYS_FORCE_INLINE v8uf operator&&(const v8uu &r) const
SYS_FORCE_INLINE v8uu operator<(const v8uf &v) const
SYS_FORCE_INLINE v8uu(const v8uu &v)
SYS_FORCE_INLINE int32 operator[](int idx) const
SYS_FORCE_INLINE v8uu(const v8si &v)
SYS_FORCE_INLINE v8uf operator/=(float r)
SYS_FORCE_INLINE v8uf operator+(float r) const
#define VM_CMPGT_AVX(A, B)
SYS_FORCE_INLINE v8uf operator!() const
SYS_FORCE_INLINE v8uf operator=(v8sf v)
SYS_FORCE_INLINE v8uu operator<<(int32 c) const
SYS_FORCE_INLINE v8uf operator&&(const v8uf &r) const
SYS_FORCE_INLINE v8uu operator*(int32 r) const
SYS_FORCE_INLINE v8uf operator*(float r) const
SYS_FORCE_INLINE v8uu operator-=(int32 r)
SYS_FORCE_INLINE v8uu isFinite() const
SYS_FORCE_INLINE v8uu(int32 v)
GLubyte GLubyte GLubyte GLubyte w
SYS_FORCE_INLINE float operator[](int idx) const
SYS_FORCE_INLINE v8uf(float v)
SYS_FORCE_INLINE void condAssign(const v8uf &val, const v8uu &c)
SYS_FORCE_INLINE v8uf toFloat() const
SYS_FORCE_INLINE v8uf operator||(const v8uu &r) const
SYS_FORCE_INLINE v8uu operator<=(const v8uu &v) const
SYS_FORCE_INLINE v8uu operator+(const v8uu &r) const
SIM_DerVector3 cross(const SIM_DerVector3 &lhs, const SIM_DerVector3 &rhs)
#define VM_CMPGE_AVX(A, B)
SYS_API double sin(double x)
constexpr T normalize(UT_FixedVector< T, D > &a) noexcept
SYS_FORCE_INLINE v8uf operator+=(float r)
SYS_FORCE_INLINE v8uf operator*=(float r)