mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
bswap.h: always overwrite ntohl/ ntohll macros
The ntohl and htonl macros are redefined because the provided macros were not always optimal. Sometimes it was a function call, sometimes it was a macro which did the shifting. Using the 'bswap' opcode on x86 provides probably better performance than performing the shifting. These macros are only overwritten on x86 if the "optimized" version is available. The ntohll and htonll macros are not available on every platform (at least glibc does not provide them) which means they need to be defined once the endianness of the system is determined. In order to get a more symmetrical setup, redfine the macros once the endianness of the system has been determined. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
30dea7ddf7
commit
4544cd19e4
@@ -87,27 +87,6 @@ static inline uint64_t git_bswap64(uint64_t x)
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(bswap32)
|
||||
|
||||
#undef ntohl
|
||||
#undef htonl
|
||||
#define ntohl(x) bswap32(x)
|
||||
#define htonl(x) bswap32(x)
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(bswap64)
|
||||
|
||||
#undef ntohll
|
||||
#undef htonll
|
||||
#define ntohll(x) bswap64(x)
|
||||
#define htonll(x) bswap64(x)
|
||||
|
||||
#else
|
||||
|
||||
#undef ntohll
|
||||
#undef htonll
|
||||
|
||||
#if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN)
|
||||
|
||||
# define GIT_BYTE_ORDER __BYTE_ORDER
|
||||
@@ -145,14 +124,33 @@ static inline uint64_t git_bswap64(uint64_t x)
|
||||
|
||||
#endif
|
||||
|
||||
#if GIT_BYTE_ORDER == GIT_BIG_ENDIAN
|
||||
# define ntohll(n) (n)
|
||||
# define htonll(n) (n)
|
||||
#else
|
||||
# define ntohll(n) default_bswap64(n)
|
||||
# define htonll(n) default_bswap64(n)
|
||||
#endif
|
||||
#undef ntohl
|
||||
#undef htonl
|
||||
#undef ntohll
|
||||
#undef htonll
|
||||
|
||||
#if GIT_BYTE_ORDER == GIT_BIG_ENDIAN
|
||||
# define ntohl(x) (x)
|
||||
# define htonl(x) (x)
|
||||
# define ntohll(x) (x)
|
||||
# define htonll(x) (x)
|
||||
#else
|
||||
|
||||
# if defined(bswap32)
|
||||
# define ntohl(x) bswap32(x)
|
||||
# define htonl(x) bswap32(x)
|
||||
# else
|
||||
# define ntohl(x) default_swab32(x)
|
||||
# define htonl(x) default_swab32(x)
|
||||
# endif
|
||||
|
||||
# if defined(bswap64)
|
||||
# define ntohll(x) bswap64(x)
|
||||
# define htonll(x) bswap64(x)
|
||||
# else
|
||||
# define ntohll(x) default_bswap64(x)
|
||||
# define htonll(x) default_bswap64(x)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
static inline uint16_t get_be16(const void *ptr)
|
||||
|
||||
Reference in New Issue
Block a user