util: Cope with LONG_BIT not being defined on Windows.
authorJose Fonseca <jfonseca@vmware.com>
Sun, 9 Aug 2015 10:25:41 +0000 (11:25 +0100)
committerJose Fonseca <jfonseca@vmware.com>
Sun, 9 Aug 2015 10:32:43 +0000 (11:32 +0100)
Neither MSVC nor MinGW defines LONG_BIT.  For MSVC this was not a problem as
it doesn't define __x86_64__ macro (it's GCC specific.)

However on Windows long type is guaranteed to be 32bits.

Also add an #error, as GCC will just warn, not throw any error, when no
value is returned.

Trivial.

src/util/rounding.h

index b0c9918fd6e69500682b97b98dba97189988a2b5..ec31b47264e9344e1e07c0324cee56716f6caf51 100644 (file)
@@ -96,8 +96,10 @@ _mesa_lroundevenf(float x)
 #ifdef __x86_64__
 #if LONG_BIT == 64
    return _mm_cvtss_si64(_mm_load_ss(&x));
-#elif LONG_BIT == 32
+#elif LONG_BIT == 32 || defined(_WIN32)
    return _mm_cvtss_si32(_mm_load_ss(&x));
+#else
+#error "Unsupported or undefined LONG_BIT"
 #endif
 #else
    return lrintf(x);
@@ -114,8 +116,10 @@ _mesa_lroundeven(double x)
 #ifdef __x86_64__
 #if LONG_BIT == 64
    return _mm_cvtsd_si64(_mm_load_sd(&x));
-#elif LONG_BIT == 32
+#elif LONG_BIT == 32 || defined(_WIN32)
    return _mm_cvtsd_si32(_mm_load_sd(&x));
+#else
+#error "Unsupported or undefined LONG_BIT"
 #endif
 #else
    return lrint(x);