diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index eea84732..e84648bd 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -713,11 +713,7 @@ #if GLM_HAS_CONSTEXPR # define GLM_CONSTEXPR constexpr -//# if GLM_ARCH == GLM_ARCH_PURE -# define GLM_CONSTEXPR_CTOR constexpr -//# else -//# define GLM_CONSTEXPR_CTOR -//# endif +# define GLM_CONSTEXPR_CTOR constexpr # define GLM_RELAXED_CONSTEXPR constexpr #elif GLM_HAS_CONSTEXPR_PARTIAL # define GLM_CONSTEXPR constexpr @@ -729,6 +725,12 @@ # define GLM_RELAXED_CONSTEXPR const #endif +#if GLM_ARCH == GLM_ARCH_PURE +# define GLM_CONSTEXPR_SIMD GLM_CONSTEXPR_CTOR +#else +# define GLM_CONSTEXPR_SIMD +#endif + #ifdef GLM_FORCE_EXPLICIT_CTOR # define GLM_EXPLICIT explicit #else diff --git a/glm/detail/type_vec4.hpp b/glm/detail/type_vec4.hpp index 71c1efe2..12eedd83 100644 --- a/glm/detail/type_vec4.hpp +++ b/glm/detail/type_vec4.hpp @@ -86,22 +86,22 @@ namespace glm // -- Implicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec4 const& v) GLM_DEFAULT; + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4() GLM_DEFAULT_CTOR; + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(tvec4 const& v) GLM_DEFAULT; template - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec4 const& v); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(tvec4 const& v); // -- Explicit basic constructors -- - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec4(ctor); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec4(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(T a, T b, T c, T d); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(ctor); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(T scalar); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(T a, T b, T c, T d); // -- Conversion scalar constructors -- /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) template - GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(A a, B b, C c, D d); + GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(A a, B b, C c, D d); template GLM_FUNC_DECL GLM_CONSTEXPR_CTOR tvec4(tvec1 const& a, tvec1 const& b, tvec1 const& c, tvec1 const& d); diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 213b1bb4..6b4532ad 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -156,7 +156,7 @@ namespace detail # if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT) template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4() + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4() # ifndef GLM_FORCE_NO_CTOR_INIT : x(0), y(0), z(0), w(0) # endif @@ -165,30 +165,30 @@ namespace detail # if !GLM_HAS_DEFAULTED_FUNCTIONS template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(tvec4 const & v) + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(tvec4 const & v) : x(v.x), y(v.y), z(v.z), w(v.w) {} # endif//!GLM_HAS_DEFAULTED_FUNCTIONS template template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(tvec4 const & v) + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(tvec4 const & v) : x(v.x), y(v.y), z(v.z), w(v.w) {} // -- Explicit basic constructors -- template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(ctor) + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(ctor) {} template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(T scalar) + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(T scalar) : x(scalar), y(scalar), z(scalar), w(scalar) {} template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(T a, T b, T c, T d) + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(T a, T b, T c, T d) : x(a), y(b), z(c), w(d) {} @@ -196,7 +196,7 @@ namespace detail template template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(A a, B b, C c, D d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(A a, B b, C c, D d) : x(static_cast(a)), y(static_cast(b)), z(static_cast(c)), diff --git a/glm/detail/type_vec4_simd.inl b/glm/detail/type_vec4_simd.inl index cdddd63b..90652fd9 100644 --- a/glm/detail/type_vec4_simd.inl +++ b/glm/detail/type_vec4_simd.inl @@ -341,21 +341,21 @@ namespace detail # if !GLM_HAS_DEFAULTED_FUNCTIONS template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4() + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4() # ifndef GLM_FORCE_NO_CTOR_INIT : data(_mm_setzero_ps()) # endif {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4() + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4() # ifndef GLM_FORCE_NO_CTOR_INIT : data(_mm_setzero_ps()) # endif {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4() + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4() # ifndef GLM_FORCE_NO_CTOR_INIT : data(_mm_setzero_ps()) # endif @@ -363,117 +363,117 @@ namespace detail # endif//!GLM_HAS_DEFAULTED_FUNCTIONS template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float s) : data(_mm_set1_ps(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float s) : data(_mm_set1_ps(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float s) : data(_mm_set1_ps(s)) {} # if GLM_ARCH & GLM_ARCH_AVX_BIT template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(double s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(double s) : data(_mm256_set1_pd(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(double s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(double s) : data(_mm256_set1_pd(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(double s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(double s) : data(_mm256_set1_pd(s)) {} # endif template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 s) : data(_mm_set1_epi32(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 s) : data(_mm_set1_epi32(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 s) : data(_mm_set1_epi32(s)) {} # if GLM_ARCH & GLM_ARCH_AVX2_BIT template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int64 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int64 s) : data(_mm256_set1_epi64x(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int64 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int64 s) : data(_mm256_set1_epi64x(s)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int64 s) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int64 s) : data(_mm256_set1_epi64x(s)) {} # endif template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float a, float b, float c, float d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float a, float b, float c, float d) : data(_mm_set_ps(d, c, b, a)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float a, float b, float c, float d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float a, float b, float c, float d) : data(_mm_set_ps(d, c, b, a)) {} template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(float a, float b, float c, float d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(float a, float b, float c, float d) : data(_mm_set_ps(d, c, b, a)) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_set_epi32(d, c, b, a)) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_set_epi32(d, c, b, a)) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_set_epi32(d, c, b, a)) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) {} template <> template <> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : + GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4::tvec4(int32 a, int32 b, int32 c, int32 d) : data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a))) {} }//namespace glm