Merge branch 'jc/checkout-detached'
[gitweb.git] / compat / bswap.h
index 7246a12c6eee9411d694b9022c0f21af9a6d4de5..f3b8c44181776a99c3eb79e15542104d67001c9d 100644 (file)
@@ -9,7 +9,7 @@
  * Default version that the compiler ought to optimize properly with
  * constant values.
  */
-static inline unsigned int default_swab32(unsigned int val)
+static inline uint32_t default_swab32(uint32_t val)
 {
        return (((val & 0xff000000) >> 24) |
                ((val & 0x00ff0000) >>  8) |
@@ -20,14 +20,24 @@ static inline unsigned int default_swab32(unsigned int val)
 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
 
 #define bswap32(x) ({ \
-       unsigned int __res; \
+       uint32_t __res; \
        if (__builtin_constant_p(x)) { \
                __res = default_swab32(x); \
        } else { \
-               __asm__("bswap %0" : "=r" (__res) : "0" (x)); \
+               __asm__("bswap %0" : "=r" (__res) : "0" ((uint32_t)(x))); \
        } \
        __res; })
 
+#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+
+#include <stdlib.h>
+
+#define bswap32(x) _byteswap_ulong(x)
+
+#endif
+
+#ifdef bswap32
+
 #undef ntohl
 #undef htonl
 #define ntohl(x) bswap32(x)