diff --git a/glm/core/func_integer.inl b/glm/core/func_integer.inl index 5de9fcbf..62d5b920 100644 --- a/glm/core/func_integer.inl +++ b/glm/core/func_integer.inl @@ -543,7 +543,14 @@ namespace glm genIUType const & Value ) { - return __builtin_clz(Value); + /** + * clz returns the number or trailing 0-bits; see + * http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Other-Builtins.html + * + * NoteBecause __builtin_clz only works for unsigned ints, this + * implementation will not work for 64-bit integers. + */ + return 31 - __builtin_clz(Value); } #else diff --git a/glm/gtx/integer.inl b/glm/gtx/integer.inl index 2f2535b4..14e6afa9 100644 --- a/glm/gtx/integer.inl +++ b/glm/gtx/integer.inl @@ -60,10 +60,8 @@ namespace _detail template GLM_FUNC_QUALIFIER T operator() (T const & Value) const { -#if(GLM_COMPILER & GLM_COMPILER_VC) +#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) return Value <= T(1) ? T(0) : T(32) - nlz(Value - T(1)); -#elif(GLM_COMPILER & GLM_COMPILER_GCC) - return Value <= T(1) ? T(0) : nlz(Value - T(1)) + 1; #else return T(32) - nlz(Value - T(1)); #endif