Skip to content

Commit

Permalink
Default initialize double to 0
Browse files Browse the repository at this point in the history
Add /= operator to intN and uintN
Integer division is not entirely correct in SSE and needs revising
  • Loading branch information
redorav committed Feb 2, 2021
1 parent b71dffe commit e391137
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 26 deletions.
12 changes: 6 additions & 6 deletions include/hlsl++_vector_double.h
Expand Up @@ -578,7 +578,7 @@ namespace hlslpp

struct hlslpp_nodiscard double1
{
hlslpp_inline double1() {}
hlslpp_inline double1() : vec(_hlslpp_setzero_pd()) {}
explicit hlslpp_inline double1(n128d vec) : vec(vec) {}

template<typename T>
Expand All @@ -602,7 +602,7 @@ namespace hlslpp
{
// Constructors

hlslpp_inline double2() {}
hlslpp_inline double2() : vec(_hlslpp_setzero_pd()) {}
explicit hlslpp_inline double2(n128d vec) : vec(vec) {}
explicit hlslpp_inline double2(const double1& f) : vec(_hlslpp_perm_xx_pd(f.vec)) {}

Expand Down Expand Up @@ -631,10 +631,9 @@ namespace hlslpp
{
// Constructors

hlslpp_inline double3() {}

#if defined(HLSLPP_SIMD_REGISTER_FLOAT8)

hlslpp_inline double3() : vec(_hlslpp256_setzero_pd()) {}
explicit hlslpp_inline double3(n256d vec) : vec(vec) {}
explicit hlslpp_inline double3(const double1& f) : vec(_hlslpp256_set128_pd(_hlslpp_perm_xx_pd(f.vec), _hlslpp_perm_xx_pd(f.vec))) {}

Expand All @@ -646,6 +645,7 @@ namespace hlslpp

#else

hlslpp_inline double3() : vec0(_hlslpp_setzero_pd()), vec1(_hlslpp_setzero_pd()) {}
explicit hlslpp_inline double3(n128d vec0, n128d vec1) : vec0(vec0), vec1(vec1) {}
explicit hlslpp_inline double3(const double1& f) : vec0(_hlslpp_perm_xx_pd(f.vec)), vec1(_hlslpp_perm_xx_pd(f.vec)) {}

Expand Down Expand Up @@ -729,10 +729,9 @@ namespace hlslpp

struct hlslpp_nodiscard double4
{
hlslpp_inline double4() {}

#if defined(HLSLPP_SIMD_REGISTER_FLOAT8)

hlslpp_inline double4() : vec(_hlslpp256_setzero_pd()) {}
explicit hlslpp_inline double4(n256d vec) : vec(vec) {}
explicit hlslpp_inline double4(const double1& f) : vec(_hlslpp256_set128_pd(_hlslpp_perm_xx_pd(f.vec), _hlslpp_perm_xx_pd(f.vec))) {}

Expand All @@ -744,6 +743,7 @@ namespace hlslpp

#else

hlslpp_inline double4() : vec0(_hlslpp_setzero_pd()), vec1(_hlslpp_setzero_pd()) {}
explicit hlslpp_inline double4(n128d vec0, n128d vec1) : vec0(vec0), vec1(vec1) {}
explicit hlslpp_inline double4(const double1& f) : vec0(_hlslpp_perm_xx_pd(f.vec)), vec1(_hlslpp_perm_xx_pd(f.vec)) {}

Expand Down
25 changes: 15 additions & 10 deletions include/hlsl++_vector_int.h
Expand Up @@ -535,6 +535,21 @@ namespace hlslpp
hlslpp_inline int3& operator += (int3& i1, const int3& i2) { i1 = i1 + i2; return i1; }
hlslpp_inline int4& operator += (int4& i1, const int4& i2) { i1 = i1 + i2; return i1; }

hlslpp_inline int1& operator -= (int1& i1, const int1& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int2& operator -= (int2& i1, const int2& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int3& operator -= (int3& i1, const int3& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int4& operator -= (int4& i1, const int4& i2) { i1 = i1 - i2; return i1; }

hlslpp_inline int1& operator *= (int1& i1, const int1& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int2& operator *= (int2& i1, const int2& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int3& operator *= (int3& i1, const int3& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int4& operator *= (int4& i1, const int4& i2) { i1 = i1 * i2; return i1; }

hlslpp_inline int1& operator /= (int1& i1, const int1& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline int2& operator /= (int2& i1, const int2& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline int3& operator /= (int3& i1, const int3& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline int4& operator /= (int4& i1, const int4& i2) { i1 = i1 / i2; return i1; }

template<int X> hlslpp_inline iswizzle1<X>& operator += (iswizzle1<X>& s, const int1& i) { s = int1(s) + i; return s; }
template<int X> hlslpp_inline iswizzle1<X>& operator -= (iswizzle1<X>& s, const int1& i) { s = int1(s) - i; return s; }
template<int X> hlslpp_inline iswizzle1<X>& operator *= (iswizzle1<X>& s, const int1& i) { s = int1(s) * i; return s; }
Expand All @@ -555,16 +570,6 @@ namespace hlslpp
template<int X, int Y, int Z, int W> hlslpp_inline iswizzle4<X, Y, Z, W>& operator *= (iswizzle4<X, Y, Z, W>& s, const int4& i) { s = int4(s) * i; return s; }
template<int X, int Y, int Z, int W> hlslpp_inline iswizzle4<X, Y, Z, W>& operator /= (iswizzle4<X, Y, Z, W>& s, const int4& i) { s = int4(s) / i; return s; }

hlslpp_inline int1& operator -= (int1& i1, const int1& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int2& operator -= (int2& i1, const int2& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int3& operator -= (int3& i1, const int3& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline int4& operator -= (int4& i1, const int4& i2) { i1 = i1 - i2; return i1; }

hlslpp_inline int1& operator *= (int1& i1, const int1& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int2& operator *= (int2& i1, const int2& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int3& operator *= (int3& i1, const int3& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline int4& operator *= (int4& i1, const int4& i2) { i1 = i1 * i2; return i1; }

hlslpp_inline int1 operator == (const int1& i1, const int1& i2) { return int1(_hlslpp_cmpeq1_epi32(i1.vec, i2.vec)); }
hlslpp_inline int2 operator == (const int2& i1, const int2& i2) { return int2(_hlslpp_cmpeq1_epi32(i1.vec, i2.vec)); }
hlslpp_inline int3 operator == (const int3& i1, const int3& i2) { return int3(_hlslpp_cmpeq1_epi32(i1.vec, i2.vec)); }
Expand Down
25 changes: 15 additions & 10 deletions include/hlsl++_vector_uint.h
Expand Up @@ -540,6 +540,21 @@ namespace hlslpp
hlslpp_inline uint3& operator += (uint3& i1, const uint3& i2) { i1 = i1 + i2; return i1; }
hlslpp_inline uint4& operator += (uint4& i1, const uint4& i2) { i1 = i1 + i2; return i1; }

hlslpp_inline uint1& operator -= (uint1& i1, const uint1& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint2& operator -= (uint2& i1, const uint2& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint3& operator -= (uint3& i1, const uint3& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint4& operator -= (uint4& i1, const uint4& i2) { i1 = i1 - i2; return i1; }

hlslpp_inline uint1& operator *= (uint1& i1, const uint1& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint2& operator *= (uint2& i1, const uint2& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint3& operator *= (uint3& i1, const uint3& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint4& operator *= (uint4& i1, const uint4& i2) { i1 = i1 * i2; return i1; }

hlslpp_inline uint1& operator /= (uint1& i1, const uint1& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline uint2& operator /= (uint2& i1, const uint2& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline uint3& operator /= (uint3& i1, const uint3& i2) { i1 = i1 / i2; return i1; }
hlslpp_inline uint4& operator /= (uint4& i1, const uint4& i2) { i1 = i1 / i2; return i1; }

template<int X> hlslpp_inline uswizzle1<X>& operator += (uswizzle1<X>& s, const uint1& i) { s = uint1(s) + i; return s; }
template<int X> hlslpp_inline uswizzle1<X>& operator -= (uswizzle1<X>& s, const uint1& i) { s = uint1(s) - i; return s; }
template<int X> hlslpp_inline uswizzle1<X>& operator *= (uswizzle1<X>& s, const uint1& i) { s = uint1(s) * i; return s; }
Expand All @@ -560,16 +575,6 @@ namespace hlslpp
template<int X, int Y, int Z, int W> hlslpp_inline uswizzle4<X, Y, Z, W>& operator *= (uswizzle4<X, Y, Z, W>& s, const uint4& i) { s = uint4(s) * i; return s; }
template<int X, int Y, int Z, int W> hlslpp_inline uswizzle4<X, Y, Z, W>& operator /= (uswizzle4<X, Y, Z, W>& s, const uint4& i) { s = uint4(s) / i; return s; }

hlslpp_inline uint1& operator -= (uint1& i1, const uint1& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint2& operator -= (uint2& i1, const uint2& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint3& operator -= (uint3& i1, const uint3& i2) { i1 = i1 - i2; return i1; }
hlslpp_inline uint4& operator -= (uint4& i1, const uint4& i2) { i1 = i1 - i2; return i1; }

hlslpp_inline uint1& operator *= (uint1& i1, const uint1& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint2& operator *= (uint2& i1, const uint2& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint3& operator *= (uint3& i1, const uint3& i2) { i1 = i1 * i2; return i1; }
hlslpp_inline uint4& operator *= (uint4& i1, const uint4& i2) { i1 = i1 * i2; return i1; }

hlslpp_inline uint1 operator == (const uint1& i1, const uint1& i2) { return uint1(_hlslpp_cmpeq1_epu32(i1.vec, i2.vec)); }
hlslpp_inline uint2 operator == (const uint2& i1, const uint2& i2) { return uint2(_hlslpp_cmpeq1_epu32(i1.vec, i2.vec)); }
hlslpp_inline uint3 operator == (const uint3& i1, const uint3& i2) { return uint3(_hlslpp_cmpeq1_epu32(i1.vec, i2.vec)); }
Expand Down

0 comments on commit e391137

Please sign in to comment.