drop alignment requirement if CGLM_ALL_UNALIGNED defined

* bring alignment back for visual studio 2017
This commit is contained in:
Recep Aslantas
2018-05-08 16:26:33 +03:00
parent 5dbbd0826d
commit 835cec2ccb
2 changed files with 21 additions and 9 deletions

View File

@@ -52,7 +52,7 @@ glmm_norm(__m128 a) {
static inline static inline
__m128 __m128
glmm_load3(vec3 v) { glmm_load3(float v[3]) {
__m128i xy; __m128i xy;
__m128 z; __m128 z;
@@ -64,7 +64,7 @@ glmm_load3(vec3 v) {
static inline static inline
void void
glmm_store3(__m128 vx, vec3 v) { glmm_store3(__m128 vx, float v[3]) {
_mm_storel_pi((__m64 *)&v[0], vx); _mm_storel_pi((__m64 *)&v[0], vx);
_mm_store_ss(&v[2], _mm_shuffle1_ps(vx, 2, 2, 2, 2)); _mm_store_ss(&v[2], _mm_shuffle1_ps(vx, 2, 2, 2, 2));
} }

View File

@@ -9,18 +9,30 @@
#define cglm_types_h #define cglm_types_h
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if _MSC_VER < 1914 /* Visual Studio 2017 version 15.7 */
# define CGLM_ALL_UNALIGNED
/* do not use alignment for older visual studio versions */
# define CGLM_ALIGN(X) /* __declspec(align(X)) */ # define CGLM_ALIGN(X) /* __declspec(align(X)) */
#else #else
# define CGLM_ALIGN(X) __declspec(align(X))
#endif
#else
# define CGLM_ALIGN(X) __attribute((aligned(X))) # define CGLM_ALIGN(X) __attribute((aligned(X)))
#endif #endif
#ifndef CGLM_ALL_UNALIGNED
# define CGLM_ALIGN_IF(X) CGLM_ALIGN(X)
#else
# define CGLM_ALIGN_IF(X) /* no alignment */
#endif
typedef float vec2[2]; typedef float vec2[2];
typedef CGLM_ALIGN(8) float vec3[3]; typedef CGLM_ALIGN_IF(8) float vec3[3];
typedef int ivec3[3]; typedef int ivec3[3];
typedef CGLM_ALIGN(16) float vec4[4]; typedef CGLM_ALIGN_IF(16) float vec4[4];
typedef vec3 mat3[3]; typedef vec3 mat3[3];
typedef CGLM_ALIGN(16) vec4 mat4[4]; typedef CGLM_ALIGN_IF(16) vec4 mat4[4];
typedef vec4 versor; typedef vec4 versor;