1/*2* Let's make sure we always have a sane definition for ntohl()/htonl().3* Some libraries define those as a function call, just to perform byte4* shifting, bringing significant overhead to what should be a simple5* operation.6*/78/*9* Default version that the compiler ought to optimize properly with10* constant values.11*/12static inline uint32_t default_swab32(uint32_t val)13{14return (((val & 0xff000000) >> 24) |15((val & 0x00ff0000) >> 8) |16((val & 0x0000ff00) << 8) |17((val & 0x000000ff) << 24));18}1920#undef bswap322122#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))2324#define bswap32 git_bswap3225static inline uint32_t git_bswap32(uint32_t x)26{27uint32_t result;28if (__builtin_constant_p(x))29result = default_swab32(x);30else31__asm__("bswap %0" : "=r" (result) : "0" (x));32return result;33}3435#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))3637#include <stdlib.h>3839#define bswap32(x) _byteswap_ulong(x)4041#endif4243#ifdef bswap324445#undef ntohl46#undef htonl47#define ntohl(x) bswap32(x)48#define htonl(x) bswap32(x)4950#endif