From ca0b7a9929c9b8ce28513613340ebde5a5f60177 Mon Sep 17 00:00:00 2001 From: Aaron Date: Tue, 13 Sep 2016 00:36:43 -0700 Subject: [PATCH 1/6] Merged graft commit --- glm/detail/type_vec.hpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 23e463e7..af8ed14a 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -9,15 +9,6 @@ namespace glm{ namespace detail { - template struct aligned {}; - template<> GLM_ALIGNED_STRUCT(1) aligned<1>{}; - template<> GLM_ALIGNED_STRUCT(2) aligned<2>{}; - template<> GLM_ALIGNED_STRUCT(4) aligned<4>{}; - template<> GLM_ALIGNED_STRUCT(8) aligned<8>{}; - template<> GLM_ALIGNED_STRUCT(16) aligned<16>{}; - template<> GLM_ALIGNED_STRUCT(32) aligned<32>{}; - template<> GLM_ALIGNED_STRUCT(64) aligned<64>{}; - template struct storage { @@ -26,15 +17,22 @@ namespace detail } type; }; - template - struct storage - { - struct type : aligned - { - uint8 data[size]; + #define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ + template \ + struct storage { \ + GLM_ALIGNED_STRUCT(x) type { \ + uint8_t data[x]; \ + }; \ }; - }; + GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) + # if GLM_ARCH & GLM_ARCH_SSE2_BIT template <> struct storage From 6a30bbbe51d2b85a58e5fffd34655bc7631120c5 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 22:01:30 +0200 Subject: [PATCH 2/6] Fixed GCC build broken by #548 PR --- glm/detail/type_vec.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index af8ed14a..7849db63 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -21,7 +21,7 @@ namespace detail template \ struct storage { \ GLM_ALIGNED_STRUCT(x) type { \ - uint8_t data[x]; \ + uint8 data[x]; \ }; \ }; From 24532ecbf17f456c5850c35419f783e11b971c71 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 22:33:59 +0200 Subject: [PATCH 3/6] Added aligned storage tests #548 --- test/core/CMakeLists.txt | 1 + test/core/core_type_aligned.cpp | 104 ++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 test/core/core_type_aligned.cpp diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt index f83823d6..c2349c49 100644 --- a/test/core/CMakeLists.txt +++ b/test/core/CMakeLists.txt @@ -1,3 +1,4 @@ +glmCreateTestGTC(core_type_aligned) glmCreateTestGTC(core_type_cast) glmCreateTestGTC(core_type_ctor) glmCreateTestGTC(core_type_float) diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp new file mode 100644 index 00000000..45f59688 --- /dev/null +++ b/test/core/core_type_aligned.cpp @@ -0,0 +1,104 @@ +#include +/* +#define GLM_ALIGNED(x) __declspec(align(x)) +#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) + +#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ +template \ +struct storage { \ + GLM_ALIGNED_STRUCT(x) type { \ + uint8_t data[x]; \ + }; \ +}; + +template +struct storage { + typedef struct type { + uint8_t data[size]; + } type; +}; + +GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) +*/ +int main() { + size_t size1_aligned = sizeof(glm::detail::storage::type); + size_t size2_aligned = sizeof(glm::detail::storage::type); + size_t size4_aligned = sizeof(glm::detail::storage::type); + size_t size8_aligned = sizeof(glm::detail::storage::type); + size_t size16_aligned = sizeof(glm::detail::storage::type); + size_t size32_aligned = sizeof(glm::detail::storage::type); + size_t size64_aligned = sizeof(glm::detail::storage::type); + size_t size128_aligned = sizeof(glm::detail::storage::type); + + size_t size1_unaligned = sizeof(glm::detail::storage::type); + size_t size2_unaligned = sizeof(glm::detail::storage::type); + size_t size4_unaligned = sizeof(glm::detail::storage::type); + size_t size8_unaligned = sizeof(glm::detail::storage::type); + size_t size16_unaligned = sizeof(glm::detail::storage::type); + size_t size32_unaligned = sizeof(glm::detail::storage::type); + size_t size64_unaligned = sizeof(glm::detail::storage::type); + size_t size128_unaligned = sizeof(glm::detail::storage::type); + + size_t align1_aligned = alignof(glm::detail::storage::type); + size_t align2_aligned = alignof(glm::detail::storage::type); + size_t align4_aligned = alignof(glm::detail::storage::type); + size_t align8_aligned = alignof(glm::detail::storage::type); + size_t align16_aligned = alignof(glm::detail::storage::type); + size_t align32_aligned = alignof(glm::detail::storage::type); + size_t align64_aligned = alignof(glm::detail::storage::type); + size_t align128_aligned = alignof(glm::detail::storage::type); + + size_t align1_unaligned = alignof(glm::detail::storage::type); + size_t align2_unaligned = alignof(glm::detail::storage::type); + size_t align4_unaligned = alignof(glm::detail::storage::type); + size_t align8_unaligned = alignof(glm::detail::storage::type); + size_t align16_unaligned = alignof(glm::detail::storage::type); + size_t align32_unaligned = alignof(glm::detail::storage::type); + size_t align64_unaligned = alignof(glm::detail::storage::type); + size_t align128_unaligned = alignof(glm::detail::storage::type); + + // RESULTS + // size1_aligned 1 + // size2_aligned 2 + // size4_aligned 4 + // size8_aligned 8 + // size16_aligned 16 + // size32_aligned 32 + // size64_aligned 64 + // size128_aligned 128 + // + // size1_unaligned 1 + // size2_unaligned 2 + // size4_unaligned 4 + // size8_unaligned 8 + // size16_unaligned 16 + // size32_unaligned 32 + // size64_unaligned 64 + // size128_unaligned 128 + // + // align1_aligned 1 + // align2_aligned 2 + // align4_aligned 4 + // align8_aligned 8 + // align16_aligned 16 + // align32_aligned 32 + // align64_aligned 64 + // align128_aligned 1 + // + // align1_unaligned 1 + // align2_unaligned 1 + // align4_unaligned 1 + // align8_unaligned 1 + // align16_unaligned 1 + // align32_unaligned 1 + // align64_unaligned 1 + // align128_unaligned 1 + + return 0; +} From d8e30c5fdeaa3df762435384c1b88da63759d401 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 23:18:52 +0200 Subject: [PATCH 4/6] Improved core_type_aligned test --- test/core/core_type_aligned.cpp | 196 +++++++++++++++----------------- 1 file changed, 94 insertions(+), 102 deletions(-) diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp index 45f59688..be15e9d8 100644 --- a/test/core/core_type_aligned.cpp +++ b/test/core/core_type_aligned.cpp @@ -1,104 +1,96 @@ #include -/* -#define GLM_ALIGNED(x) __declspec(align(x)) -#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) - -#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ -template \ -struct storage { \ - GLM_ALIGNED_STRUCT(x) type { \ - uint8_t data[x]; \ - }; \ -}; - -template -struct storage { - typedef struct type { - uint8_t data[size]; - } type; -}; - -GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) -*/ -int main() { - size_t size1_aligned = sizeof(glm::detail::storage::type); - size_t size2_aligned = sizeof(glm::detail::storage::type); - size_t size4_aligned = sizeof(glm::detail::storage::type); - size_t size8_aligned = sizeof(glm::detail::storage::type); - size_t size16_aligned = sizeof(glm::detail::storage::type); - size_t size32_aligned = sizeof(glm::detail::storage::type); - size_t size64_aligned = sizeof(glm::detail::storage::type); - size_t size128_aligned = sizeof(glm::detail::storage::type); - - size_t size1_unaligned = sizeof(glm::detail::storage::type); - size_t size2_unaligned = sizeof(glm::detail::storage::type); - size_t size4_unaligned = sizeof(glm::detail::storage::type); - size_t size8_unaligned = sizeof(glm::detail::storage::type); - size_t size16_unaligned = sizeof(glm::detail::storage::type); - size_t size32_unaligned = sizeof(glm::detail::storage::type); - size_t size64_unaligned = sizeof(glm::detail::storage::type); - size_t size128_unaligned = sizeof(glm::detail::storage::type); - - size_t align1_aligned = alignof(glm::detail::storage::type); - size_t align2_aligned = alignof(glm::detail::storage::type); - size_t align4_aligned = alignof(glm::detail::storage::type); - size_t align8_aligned = alignof(glm::detail::storage::type); - size_t align16_aligned = alignof(glm::detail::storage::type); - size_t align32_aligned = alignof(glm::detail::storage::type); - size_t align64_aligned = alignof(glm::detail::storage::type); - size_t align128_aligned = alignof(glm::detail::storage::type); - - size_t align1_unaligned = alignof(glm::detail::storage::type); - size_t align2_unaligned = alignof(glm::detail::storage::type); - size_t align4_unaligned = alignof(glm::detail::storage::type); - size_t align8_unaligned = alignof(glm::detail::storage::type); - size_t align16_unaligned = alignof(glm::detail::storage::type); - size_t align32_unaligned = alignof(glm::detail::storage::type); - size_t align64_unaligned = alignof(glm::detail::storage::type); - size_t align128_unaligned = alignof(glm::detail::storage::type); - - // RESULTS - // size1_aligned 1 - // size2_aligned 2 - // size4_aligned 4 - // size8_aligned 8 - // size16_aligned 16 - // size32_aligned 32 - // size64_aligned 64 - // size128_aligned 128 - // - // size1_unaligned 1 - // size2_unaligned 2 - // size4_unaligned 4 - // size8_unaligned 8 - // size16_unaligned 16 - // size32_unaligned 32 - // size64_unaligned 64 - // size128_unaligned 128 - // - // align1_aligned 1 - // align2_aligned 2 - // align4_aligned 4 - // align8_aligned 8 - // align16_aligned 16 - // align32_aligned 32 - // align64_aligned 64 - // align128_aligned 1 - // - // align1_unaligned 1 - // align2_unaligned 1 - // align4_unaligned 1 - // align8_unaligned 1 - // align16_unaligned 1 - // align32_unaligned 1 - // align64_unaligned 1 - // align128_unaligned 1 - - return 0; + +int test_aligned() +{ + int Error = 0; + + size_t size1_aligned = sizeof(glm::detail::storage::type); + Error += size1_aligned == 1 ? 0 : 1; + size_t align1_aligned = alignof(glm::detail::storage::type); + Error += align1_aligned == 1 ? 0 : 1; + + size_t size2_aligned = sizeof(glm::detail::storage::type); + Error += size2_aligned == 2 ? 0 : 1; + size_t align2_aligned = alignof(glm::detail::storage::type); + Error += align2_aligned == 2 ? 0 : 1; + + size_t size4_aligned = sizeof(glm::detail::storage::type); + Error += size4_aligned == 4 ? 0 : 1; + size_t align4_aligned = alignof(glm::detail::storage::type); + Error += align4_aligned == 4 ? 0 : 1; + + size_t size8_aligned = sizeof(glm::detail::storage::type); + Error += size8_aligned == 8 ? 0 : 1; + size_t align8_aligned = alignof(glm::detail::storage::type); + Error += align8_aligned == 8 ? 0 : 1; + + size_t size16_aligned = sizeof(glm::detail::storage::type); + Error += size16_aligned == 16 ? 0 : 1; + size_t align16_aligned = alignof(glm::detail::storage::type); + Error += align16_aligned == 16 ? 0 : 1; + + size_t size32_aligned = sizeof(glm::detail::storage::type); + Error += size32_aligned == 32 ? 0 : 1; + size_t align32_aligned = alignof(glm::detail::storage::type); + Error += align32_aligned == 32 ? 0 : 1; + + size_t size64_aligned = sizeof(glm::detail::storage::type); + Error += size64_aligned == 64 ? 0 : 1; + size_t align64_aligned = alignof(glm::detail::storage::type); + Error += align64_aligned == 64 ? 0 : 1; + + return Error; +} + +int test_unaligned() +{ + int Error = 0; + + size_t size1_unaligned = sizeof(glm::detail::storage::type); + Error += size1_unaligned == 1 ? 0 : 1; + size_t align1_unaligned = alignof(glm::detail::storage::type); + Error += align1_unaligned == 1 ? 0 : 1; + + size_t size2_unaligned = sizeof(glm::detail::storage::type); + Error += size2_unaligned == 2 ? 0 : 1; + size_t align2_unaligned = alignof(glm::detail::storage::type); + Error += align2_unaligned == 1 ? 0 : 1; + + size_t size4_unaligned = sizeof(glm::detail::storage::type); + Error += size4_unaligned == 4 ? 0 : 1; + size_t align4_unaligned = alignof(glm::detail::storage::type); + Error += align4_unaligned == 1 ? 0 : 1; + + size_t size8_unaligned = sizeof(glm::detail::storage::type); + Error += size8_unaligned == 8 ? 0 : 1; + size_t align8_unaligned = alignof(glm::detail::storage::type); + Error += align8_unaligned == 1 ? 0 : 1; + + size_t size16_unaligned = sizeof(glm::detail::storage::type); + Error += size16_unaligned == 16 ? 0 : 1; + size_t align16_unaligned = alignof(glm::detail::storage::type); + Error += align16_unaligned == 1 ? 0 : 1; + + size_t size32_unaligned = sizeof(glm::detail::storage::type); + Error += size32_unaligned == 32 ? 0 : 1; + size_t align32_unaligned = alignof(glm::detail::storage::type); + Error += align32_unaligned == 1 ? 0 : 1; + + size_t size64_unaligned = sizeof(glm::detail::storage::type); + Error += size64_unaligned == 64 ? 0 : 1; + size_t align64_unaligned = alignof(glm::detail::storage::type); + Error += align64_unaligned == 1 ? 0 : 1; + + return Error; +} + + +int main() +{ + int Error = 0; + + Error += test_aligned(); + Error += test_unaligned(); + + return Error; } From 8c960dc647c54919b9f6f289d97f24f5761371a2 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 23:38:43 +0200 Subject: [PATCH 5/6] Alignof is a C++11 feature --- glm/detail/setup.hpp | 13 ++++++ test/core/core_type_aligned.cpp | 70 ++++++++++++++++----------------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 4b0259b6..49ca9beb 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -424,6 +424,19 @@ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) #endif +// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf +#if GLM_COMPILER & GLM_COMPILER_CLANG +# define GLM_HAS_ALIGNOF __has_feature(c_alignof) +#elif GLM_LANG & GLM_LANG_CXX11_FLAG +# define GLM_HAS_ALIGNOF 1 +#else +# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ + ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ + ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ + ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)) || \ + ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70)))) +#endif + // #if GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_ASSIGNABLE 1 diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp index be15e9d8..babf82a9 100644 --- a/test/core/core_type_aligned.cpp +++ b/test/core/core_type_aligned.cpp @@ -6,39 +6,38 @@ int test_aligned() size_t size1_aligned = sizeof(glm::detail::storage::type); Error += size1_aligned == 1 ? 0 : 1; - size_t align1_aligned = alignof(glm::detail::storage::type); - Error += align1_aligned == 1 ? 0 : 1; - size_t size2_aligned = sizeof(glm::detail::storage::type); Error += size2_aligned == 2 ? 0 : 1; - size_t align2_aligned = alignof(glm::detail::storage::type); - Error += align2_aligned == 2 ? 0 : 1; - size_t size4_aligned = sizeof(glm::detail::storage::type); Error += size4_aligned == 4 ? 0 : 1; - size_t align4_aligned = alignof(glm::detail::storage::type); - Error += align4_aligned == 4 ? 0 : 1; - size_t size8_aligned = sizeof(glm::detail::storage::type); Error += size8_aligned == 8 ? 0 : 1; - size_t align8_aligned = alignof(glm::detail::storage::type); - Error += align8_aligned == 8 ? 0 : 1; - size_t size16_aligned = sizeof(glm::detail::storage::type); Error += size16_aligned == 16 ? 0 : 1; - size_t align16_aligned = alignof(glm::detail::storage::type); - Error += align16_aligned == 16 ? 0 : 1; - size_t size32_aligned = sizeof(glm::detail::storage::type); Error += size32_aligned == 32 ? 0 : 1; - size_t align32_aligned = alignof(glm::detail::storage::type); - Error += align32_aligned == 32 ? 0 : 1; - size_t size64_aligned = sizeof(glm::detail::storage::type); Error += size64_aligned == 64 ? 0 : 1; + +# if GLM_HAS_ALIGNOF + + size_t align1_aligned = alignof(glm::detail::storage::type); + Error += align1_aligned == 1 ? 0 : 1; + size_t align2_aligned = alignof(glm::detail::storage::type); + Error += align2_aligned == 2 ? 0 : 1; + size_t align4_aligned = alignof(glm::detail::storage::type); + Error += align4_aligned == 4 ? 0 : 1; + size_t align8_aligned = alignof(glm::detail::storage::type); + Error += align8_aligned == 8 ? 0 : 1; + size_t align16_aligned = alignof(glm::detail::storage::type); + Error += align16_aligned == 16 ? 0 : 1; + size_t align32_aligned = alignof(glm::detail::storage::type); + Error += align32_aligned == 32 ? 0 : 1; size_t align64_aligned = alignof(glm::detail::storage::type); Error += align64_aligned == 64 ? 0 : 1; +# endif //GLM_HAS_ALIGNOF + return Error; } @@ -48,39 +47,38 @@ int test_unaligned() size_t size1_unaligned = sizeof(glm::detail::storage::type); Error += size1_unaligned == 1 ? 0 : 1; - size_t align1_unaligned = alignof(glm::detail::storage::type); - Error += align1_unaligned == 1 ? 0 : 1; - size_t size2_unaligned = sizeof(glm::detail::storage::type); Error += size2_unaligned == 2 ? 0 : 1; - size_t align2_unaligned = alignof(glm::detail::storage::type); - Error += align2_unaligned == 1 ? 0 : 1; - size_t size4_unaligned = sizeof(glm::detail::storage::type); Error += size4_unaligned == 4 ? 0 : 1; - size_t align4_unaligned = alignof(glm::detail::storage::type); - Error += align4_unaligned == 1 ? 0 : 1; - size_t size8_unaligned = sizeof(glm::detail::storage::type); Error += size8_unaligned == 8 ? 0 : 1; - size_t align8_unaligned = alignof(glm::detail::storage::type); - Error += align8_unaligned == 1 ? 0 : 1; - size_t size16_unaligned = sizeof(glm::detail::storage::type); Error += size16_unaligned == 16 ? 0 : 1; - size_t align16_unaligned = alignof(glm::detail::storage::type); - Error += align16_unaligned == 1 ? 0 : 1; - size_t size32_unaligned = sizeof(glm::detail::storage::type); Error += size32_unaligned == 32 ? 0 : 1; - size_t align32_unaligned = alignof(glm::detail::storage::type); - Error += align32_unaligned == 1 ? 0 : 1; - size_t size64_unaligned = sizeof(glm::detail::storage::type); Error += size64_unaligned == 64 ? 0 : 1; + +# if GLM_HAS_ALIGNOF + + size_t align1_unaligned = alignof(glm::detail::storage::type); + Error += align1_unaligned == 1 ? 0 : 1; + size_t align2_unaligned = alignof(glm::detail::storage::type); + Error += align2_unaligned == 1 ? 0 : 1; + size_t align4_unaligned = alignof(glm::detail::storage::type); + Error += align4_unaligned == 1 ? 0 : 1; + size_t align8_unaligned = alignof(glm::detail::storage::type); + Error += align8_unaligned == 1 ? 0 : 1; + size_t align16_unaligned = alignof(glm::detail::storage::type); + Error += align16_unaligned == 1 ? 0 : 1; + size_t align32_unaligned = alignof(glm::detail::storage::type); + Error += align32_unaligned == 1 ? 0 : 1; size_t align64_unaligned = alignof(glm::detail::storage::type); Error += align64_unaligned == 1 ? 0 : 1; +# endif //GLM_HAS_ALIGNOF + return Error; } From b719a9f6cc7b5128577f01bc9019085d0b95fe3a Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 18 Sep 2016 19:09:30 +0200 Subject: [PATCH 6/6] Added test for GCC --- test/core/core_type_aligned.cpp | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp index babf82a9..cbb591f0 100644 --- a/test/core/core_type_aligned.cpp +++ b/test/core/core_type_aligned.cpp @@ -36,6 +36,23 @@ int test_aligned() size_t align64_aligned = alignof(glm::detail::storage::type); Error += align64_aligned == 64 ? 0 : 1; +# elif GLM_COMPILER & GLM_COMPILER_GCC + + size_t align1_aligned = __alignof__(glm::detail::storage::type); + Error += align1_aligned == 1 ? 0 : 1; + size_t align2_aligned = __alignof__(glm::detail::storage::type); + Error += align2_aligned == 2 ? 0 : 1; + size_t align4_aligned = __alignof__(glm::detail::storage::type); + Error += align4_aligned == 4 ? 0 : 1; + size_t align8_aligned = __alignof__(glm::detail::storage::type); + Error += align8_aligned == 8 ? 0 : 1; + size_t align16_aligned = __alignof__(glm::detail::storage::type); + Error += align16_aligned == 16 ? 0 : 1; + size_t align32_aligned = __alignof__(glm::detail::storage::type); + Error += align32_aligned == 32 ? 0 : 1; + size_t align64_aligned = __alignof__(glm::detail::storage::type); + Error += align64_aligned == 64 ? 0 : 1; + # endif //GLM_HAS_ALIGNOF return Error; @@ -77,6 +94,23 @@ int test_unaligned() size_t align64_unaligned = alignof(glm::detail::storage::type); Error += align64_unaligned == 1 ? 0 : 1; +# else + + size_t align1_unaligned = __alignof__(glm::detail::storage::type); + Error += align1_unaligned == 1 ? 0 : 1; + size_t align2_unaligned = __alignof__(glm::detail::storage::type); + Error += align2_unaligned == 1 ? 0 : 1; + size_t align4_unaligned = __alignof__(glm::detail::storage::type); + Error += align4_unaligned == 1 ? 0 : 1; + size_t align8_unaligned = __alignof__(glm::detail::storage::type); + Error += align8_unaligned == 1 ? 0 : 1; + size_t align16_unaligned = __alignof__(glm::detail::storage::type); + Error += align16_unaligned == 1 ? 0 : 1; + size_t align32_unaligned = __alignof__(glm::detail::storage::type); + Error += align32_unaligned == 1 ? 0 : 1; + size_t align64_unaligned = __alignof__(glm::detail::storage::type); + Error += align64_unaligned == 1 ? 0 : 1; + # endif //GLM_HAS_ALIGNOF return Error;