diff --git a/Engine/Source/Runtime/Core/public/Math/Detail/IntVector3Decl.inl b/Engine/Source/Runtime/Core/public/Math/Detail/IntVector3Decl.inl
index 1e4dbd0..ae81615 100644
--- a/Engine/Source/Runtime/Core/public/Math/Detail/IntVector3Decl.inl
+++ b/Engine/Source/Runtime/Core/public/Math/Detail/IntVector3Decl.inl
@@ -2,8 +2,6 @@
 
 #include "Core/public/Math/Boilerplate.h"
 
-#include "../IntVector3.hpp"
-
 namespace Phanes::Core::Math::Detail
 {
     template<IntType T, bool S>
diff --git a/Engine/Source/Runtime/Core/public/Math/Include.h b/Engine/Source/Runtime/Core/public/Math/Include.h
index 3080630..460ac8c 100644
--- a/Engine/Source/Runtime/Core/public/Math/Include.h
+++ b/Engine/Source/Runtime/Core/public/Math/Include.h
@@ -4,4 +4,5 @@
 
 #include "Core/public/Math/Vector2.hpp" // <-- Includes Vector3/4 automatically
 #include "Core/public/Math/IntVector2.hpp"
+#include "Core/public/Math/IntVector3.hpp"
 #include "Core/public/Math/IntVector4.hpp"
\ No newline at end of file
diff --git a/Engine/Source/Runtime/Core/public/Math/IntVector3.hpp b/Engine/Source/Runtime/Core/public/Math/IntVector3.hpp
index d56696f..248b718 100644
--- a/Engine/Source/Runtime/Core/public/Math/IntVector3.hpp
+++ b/Engine/Source/Runtime/Core/public/Math/IntVector3.hpp
@@ -73,7 +73,7 @@ namespace Phanes::Core::Math {
 
         TIntVector3(const T* comp);
     
-        TIntVector3(const TIntVector2<T, A>& v1, const T s)
+        TIntVector3(const TIntVector2<T, A>& v1, const T s);
 
     };
 
@@ -732,3 +732,4 @@ namespace Phanes::Core::Math {
 
 #endif // !INTVECTOR3_H
 
+#include "Core/public/Math/IntVector3.inl"
\ No newline at end of file
diff --git a/Engine/Source/Runtime/Core/public/Math/IntVector3.inl b/Engine/Source/Runtime/Core/public/Math/IntVector3.inl
index fcc7093..26daf56 100644
--- a/Engine/Source/Runtime/Core/public/Math/IntVector3.inl
+++ b/Engine/Source/Runtime/Core/public/Math/IntVector3.inl
@@ -7,7 +7,6 @@
 
 #include "Core/public/Math/SIMD/PhanesSIMDTypes.h"
 
-#include "IntVector3.hpp"
 
 namespace Phanes::Core::Math
 {
@@ -20,7 +19,7 @@ namespace Phanes::Core::Math
     template<IntType T, bool A>
     TIntVector3<T, A>::TIntVector3(const T _x, const T _y, const T _z)
     {
-        Detail::construct_ivec3<T, SIMD::use_simd<T, 3, A>::value>::map(*this, _x, _y, _z, _w);
+        Detail::construct_ivec3<T, SIMD::use_simd<T, 3, A>::value>::map(*this, _x, _y, _z);
     }
 
     template<IntType T, bool A>
diff --git a/Engine/Source/Runtime/Core/public/Math/IntVector4.hpp b/Engine/Source/Runtime/Core/public/Math/IntVector4.hpp
index 60e74d3..037277b 100644
--- a/Engine/Source/Runtime/Core/public/Math/IntVector4.hpp
+++ b/Engine/Source/Runtime/Core/public/Math/IntVector4.hpp
@@ -591,7 +591,7 @@ namespace Phanes::Core::Math {
             (v1.x > 0) ? 1 : -1,
             (v1.y > 0) ? 1 : -1,
             (v1.z > 0) ? 1 : -1,
-            (v1.w > 0) ? 1 : -1,
+            (v1.w > 0) ? 1 : -1
         );
     }
 
diff --git a/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathFPU.hpp b/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathFPU.hpp
index c2794ea..853d748 100644
--- a/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathFPU.hpp
+++ b/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathFPU.hpp
@@ -495,4 +495,452 @@ namespace Phanes::Core::Math::Detail
     };
 
 
+    // =============== //
+    //   TIntVector4   //
+    // =============== //
+
+    template<>
+    struct construct_ivec4<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const TIntVector4<int, true>& v2)
+        {
+            v1.x = v2.x;
+            v1.y = v2.y;
+            v1.z = v2.z;
+            v1.w = v2.w;
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            v1.x = s;
+            v1.y = s;
+            v1.z = s;
+            v1.w = s;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int x, int y, int z, int w)
+        {
+            v1.x = x;
+            v1.y = y;
+            v1.y = z;
+            v1.y = w;
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const int* comp)
+        {
+            v1.x = comp[0];
+            v1.y = comp[1];
+            v1.z = comp[2];
+            v1.w = comp[3];
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector2<int, true>& v1, const Phanes::Core::Math::TIntVector2<int, true>& v2)
+        {
+            r.x = v1.x;
+            r.y = v1.y;
+            r.x = v2.x;
+            r.y = v2.y;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_add<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x + v2.x;
+            r.y = v1.y + v2.y;
+            r.z = v1.z + v2.z;
+            r.w = v1.w + v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x + s;
+            r.y = v1.y + s;
+            r.z = v1.z + s;
+            r.w = v1.w + s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_sub<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x - v2.x;
+            r.y = v1.y - v2.y;
+            r.z = v1.z - v2.z;
+            r.w = v1.w - v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x - s;
+            r.y = v1.y - s;
+            r.z = v1.z - s;
+            r.w = v1.w - s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_mul<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x * v2.x;
+            r.y = v1.y * v2.y;
+            r.z = v1.z * v2.z;
+            r.w = v1.w * v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x * s;
+            r.y = v1.y * s;
+            r.z = v1.z * s;
+            r.w = v1.w * s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_inc<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
+        {
+            r.x = v1.x + 1;
+            r.y = v1.y + 1;
+            r.z = v1.z + 1;
+            r.w = v1.w + 1;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_dec<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
+        {
+            r.x = v1.x - 1;
+            r.y = v1.y - 1;
+            r.z = v1.z - 1;
+            r.w = v1.w - 1;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_and<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x & v2.x;
+            r.y = v1.y & v2.y;
+            r.z = v1.z & v2.z;
+            r.w = v1.w & v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x & s;
+            r.y = v1.y & s;
+            r.z = v1.z & s;
+            r.w = v1.w & s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_or<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x | v2.x;
+            r.y = v1.y | v2.y;
+            r.z = v1.z | v2.z;
+            r.w = v1.w | v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x | s;
+            r.y = v1.y | s;
+            r.z = v1.z | s;
+            r.w = v1.w | s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_xor<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x ^ v2.x;
+            r.y = v1.y ^ v2.y;
+            r.z = v1.z ^ v2.z;
+            r.w = v1.w ^ v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x ^ s;
+            r.y = v1.y ^ s;
+            r.z = v1.z ^ s;
+            r.w = v1.w ^ s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_left_shift<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x << v2.x;
+            r.y = v1.y << v2.y;
+            r.z = v1.z << v2.z;
+            r.w = v1.w << v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x << s;
+            r.y = v1.y << s;
+            r.z = v1.z << s;
+            r.w = v1.w << s;
+        }
+    };
+
+    template<>
+    struct compute_ivec4_right_shift<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.x = v1.x >> v2.x;
+            r.y = v1.y >> v2.y;
+            r.z = v1.z >> v2.z;
+            r.w = v1.w >> v2.w;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.x = v1.x >> s;
+            r.y = v1.y >> s;
+            r.z = v1.z >> s;
+            r.w = v1.w >> s;
+        }
+    };
+
+
+    // =============== //
+    //   TIntVector3   //
+    // =============== //
+
+
+    template<>
+    struct construct_ivec3<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, const TIntVector3<int, true>& v2)
+        {
+            v1.x = v2.x;
+            v1.y = v2.y;
+            v1.z = v2.z;
+            v1.w = (T)0;
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, int s)
+        {
+            v1.x = s;
+            v1.y = s;
+            v1.z = s;
+            v1.w = (T)0;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, int x, int y, int z)
+        {
+            v1.x = x;
+            v1.y = y;
+            v1.y = z;
+            v1.w = (T)0;
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, const int* comp)
+        {
+            v1.x = comp[0];
+            v1.y = comp[1];
+            v1.z = comp[2];
+            v1.w = (T)0;
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& r, const Phanes::Core::Math::TIntVector2<int, true>& v1, const int s)
+        {
+            v1.x = v2.x;
+            v1.y = v2.y;
+            v1.z = s;
+            v1.w = (T)0;
+        }
+    };
+
+
+    template<> struct compute_ivec3_add<int, true> : public compute_ivec4_add<int, true> {};
+    template<> struct compute_ivec3_sub<int, true> : public compute_ivec4_sub<int, true> {};
+    template<> struct compute_ivec3_mul<int, true> : public compute_ivec4_mul<int, true> {};
+    template<> struct compute_ivec3_div<int, true> : public compute_ivec4_div<int, true> {};
+    template<> struct compute_ivec3_inc<int, true> : public compute_ivec4_inc<int, true> {};
+    template<> struct compute_ivec3_dec<int, true> : public compute_ivec4_dec<int, true> {};
+
+
+    template<> struct compute_ivec3_and<int, true> : public compute_ivec4_and<int, true> {};
+    template<> struct compute_ivec3_or<int, true> : public compute_ivec4_or<int, true> {};
+    template<> struct compute_ivec3_xor<int, true> : public compute_ivec4_xor<int, true> {};
+    template<> struct compute_ivec3_left_shift<int, true> : public compute_ivec4_left_shift<int, true> {};
+    template<> struct compute_ivec3_right_shift<int, true> : public compute_ivec4_right_shift<int, true> {};
+
+
+    // =============== //
+    //   TIntVector2   //
+    // =============== //
+
+    template<>
+    struct construct_ivec2<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            v1.comp = _mm_setr_epi64x(v2.x, v2.y);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, Phanes::Core::Types::int64 s)
+        {
+            v1.comp = _mm_set1_epi64x(s);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, Phanes::Core::Types::int64 x, Phanes::Core::Types::int64 y)
+        {
+            v1.comp = _mm_setr_epi64x(x, y);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Types::int64* comp)
+        {
+            v1.comp = _mm_loadu_epi64(comp);
+        }
+    };
+
+    template<>
+    struct compute_ivec2_add<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_add_epi64(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_add_epi64(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_sub<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_sub_epi64(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_sub_epi64(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_inc<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1)
+        {
+            r.comp = _mm_add_epi64(v1.comp, _mm_set1_epi64x(1));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_dec<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1)
+        {
+            r.comp = _mm_sub_epi64(v1.comp, _mm_set1_epi64x(1));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_and<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_and_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_and_si128(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_or<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_or_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_or_si128(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_xor<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_xor_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_xor_si128(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_left_shift<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_sll_epi64(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_sll_epi64(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec2_right_shift<Phanes::Core::Types::int64, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
+        {
+            r.comp = _mm_srl_epi64(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, T s)
+        {
+            r.comp = _mm_srl_epi64(v1.comp, _mm_set1_epi64x(s));
+        }
+    };
+
 }
\ No newline at end of file
diff --git a/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathSSE.hpp b/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathSSE.hpp
index 31ea41f..440f5dd 100644
--- a/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathSSE.hpp
+++ b/Engine/Source/Runtime/Core/public/Math/SIMD/PhanesVectorMathSSE.hpp
@@ -349,12 +349,230 @@ namespace Phanes::Core::Math::Detail
         }
     };
 
+    // =============== //
+    //   TIntVector4   //
+    // =============== //
+
+    template<>
+    struct construct_ivec4<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const TIntVector4<int, true>& v2)
+        {
+            v1.comp = _mm_setr_epi32(v2.x, v2.y, v2.z, v2.w);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            v1.comp = _mm_set1_epi32(s);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int x, int y, int z, int w)
+        {
+            v1.comp = _mm_setr_epi32(x, y, z, w);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const int* comp)
+        {
+            v1.comp = _mm_loadu_epi32(comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector2<int, true>& v1, const Phanes::Core::Math::TIntVector2<int, true>& v2)
+        {
+            r.comp = _mm_setr_epi32(v1.x, v1.y, v2.x, v2.y);
+        }
+    };
+
+    template<>
+    struct compute_ivec4_add<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_add_epi32(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_add_epi32(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_sub<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_sub_epi32(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_sub_epi32(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_mul<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_mul_epi32(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_mul_epi32(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_inc<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
+        {
+            r.comp = _mm_add_epi32(v1.comp, _mm_set1_epi32(1));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_dec<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
+        {
+            r.comp = _mm_sub_epi32(v1.comp, _mm_set1_epi32(1));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_and<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_and_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_and_si128(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_or<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_or_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_or_si128(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_xor<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_xor_si128(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_xor_si128(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_left_shift<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_sll_epi32(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_sll_epi32(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+    template<>
+    struct compute_ivec4_right_shift<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
+        {
+            r.comp = _mm_srl_epi32(v1.comp, v2.comp);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
+        {
+            r.comp = _mm_srl_epi32(v1.comp, _mm_set1_epi32(s));
+        }
+    };
+
+
+    // =============== //
+    //   TIntVector3   //
+    // =============== //
+
+
+    template<>
+    struct construct_ivec3<int, true>
+    {
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, const TIntVector3<int, true>& v2)
+        {
+            v1.comp = _mm_setr_epi32(v2.x, v2.y, v2.z, v2.w);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, int s)
+        {
+            v1.comp = _mm_set1_epi32(s);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, int x, int y, int z)
+        {
+            v1.comp = _mm_setr_epi32(x, y, z, 0);
+        }
+
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& v1, const int* comp)
+        {
+            v1.comp = _mm_setr_epi32(comp[0], comp[1], comp[2], 0);
+        }
+
+        static FORCEINLINE void map(Phanes::Core::Math::TIntVector3<int, true>& r, const Phanes::Core::Math::TIntVector2<int, true>& v1, const int s)
+        {
+            r.comp = _mm_setr_epi32(v1.x, v1.y, s, 0);
+        }
+    };
+
+
+    template<> struct compute_ivec3_add<int, true> : public compute_ivec4_add<int, true> {};
+    template<> struct compute_ivec3_sub<int, true> : public compute_ivec4_sub<int, true> {};
+    template<> struct compute_ivec3_mul<int, true> : public compute_ivec4_mul<int, true> {};
+    template<> struct compute_ivec3_div<int, true> : public compute_ivec4_div<int, true> {};
+    template<> struct compute_ivec3_inc<int, true> : public compute_ivec4_inc<int, true> {};
+    template<> struct compute_ivec3_dec<int, true> : public compute_ivec4_dec<int, true> {};
+
+
+    template<> struct compute_ivec3_and<int, true> :            public compute_ivec4_and<int, true> {};
+    template<> struct compute_ivec3_or<int, true> :             public compute_ivec4_or<int, true> {};
+    template<> struct compute_ivec3_xor<int, true> :            public compute_ivec4_xor<int, true> {};
+    template<> struct compute_ivec3_left_shift<int, true> :     public compute_ivec4_left_shift<int, true> {};
+    template<> struct compute_ivec3_right_shift<int, true> :    public compute_ivec4_right_shift<int, true> {};
+
+
     // =============== //
     //   TIntVector2   //
     // =============== //
 
     template<>
-    struct construct_ivec2<Phanes::Core::Types::int64, true> 
+    struct construct_ivec2<Phanes::Core::Types::int64, true>
     {
         static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const TIntVector2<Phanes::Core::Types::int64, true>& v2)
         {
@@ -380,7 +598,7 @@ namespace Phanes::Core::Math::Detail
     };
 
     template<>
-    struct compute_ivec2_add<Phanes::Core::Types::int64, true> 
+    struct compute_ivec2_add<Phanes::Core::Types::int64, true>
     {
         static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
         {
@@ -394,7 +612,7 @@ namespace Phanes::Core::Math::Detail
     };
 
     template<>
-    struct compute_ivec2_sub<Phanes::Core::Types::int64, true> 
+    struct compute_ivec2_sub<Phanes::Core::Types::int64, true>
     {
         static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v2)
         {
@@ -408,7 +626,7 @@ namespace Phanes::Core::Math::Detail
     };
 
     template<>
-    struct compute_ivec2_inc<Phanes::Core::Types::int64, true> 
+    struct compute_ivec2_inc<Phanes::Core::Types::int64, true>
     {
         static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1)
         {
@@ -417,7 +635,7 @@ namespace Phanes::Core::Math::Detail
     };
 
     template<>
-    struct compute_ivec2_dec<Phanes::Core::Types::int64, true> 
+    struct compute_ivec2_dec<Phanes::Core::Types::int64, true>
     {
         static FORCEINLINE void map(Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& r, const Phanes::Core::Math::TIntVector2<Phanes::Core::Types::int64, true>& v1)
         {
@@ -494,157 +712,4 @@ namespace Phanes::Core::Math::Detail
             r.comp = _mm_srl_epi64(v1.comp, _mm_set1_epi64x(s));
         }
     };
-
-    
-    // =============== //
-    //   TIntVector4   //
-    // =============== //
-
-    template<>
-    struct construct_ivec4<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const TIntVector4<int, true>& v2)
-        {
-            v1.comp = _mm_setr_epi32(v2.x, v2.y, v2.z, v2.w);
-        }
-
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int s)
-        {
-            v1.comp = _mm_set1_epi32(s);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, int x, int y, int z, int w)
-        {
-            v1.comp = _mm_setr_epi32(x, y, z, w);
-        }
-
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& v1, const int* comp)
-        {
-            v1.comp = _mm_loadu_epi32(comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector2<int, true>& v1, const Phanes::Core::Math::TIntVector2<int, true>& v2)
-        {
-            r.comp = _mm_setr_epi32(v1.x, v1.y, v2.x, v2.y);
-        }
-    };
-
-    template<>
-    struct compute_ivec4_add<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_add_epi32(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_add_epi32(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_sub<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_sub_epi32(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_sub_epi32(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_inc<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
-        {
-            r.comp = _mm_add_epi32(v1.comp, _mm_set1_epi32(1));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_dec<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1)
-        {
-            r.comp = _mm_sub_epi32(v1.comp, _mm_set1_epi32(1));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_and<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_and_si128(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_and_si128(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_or<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_or_si128(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_or_si128(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_xor<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_xor_si128(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_xor_si128(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_left_shift<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_sll_epi32(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_sll_epi32(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
-    template<>
-    struct compute_ivec4_right_shift<int, true>
-    {
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, const Phanes::Core::Math::TIntVector4<int, true>& v2)
-        {
-            r.comp = _mm_srl_epi32(v1.comp, v2.comp);
-        }
-
-        static FORCEINLINE void map(Phanes::Core::Math::TIntVector4<int, true>& r, const Phanes::Core::Math::TIntVector4<int, true>& v1, T s)
-        {
-            r.comp = _mm_srl_epi32(v1.comp, _mm_set1_epi32(s));
-        }
-    };
-
 }
\ No newline at end of file