mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
util.h: backout cb07828e14e0 and 7d902369e960 for big-endian breakage
getbe32 and putbe32 need to behave differently on big-endian and little-endian systems. On big-endian ones, they should be roughly equivalent to the identity function with a cast, but on little-endian ones they should reverse the order of the bytes. That is achieved by the original definition, but __builtin_bswap32 and _byteswap_ulong, as the names suggest, swap bytes around unconditionally. There was no measurable performance improvement, so there's no point adding extra complexity with even more ifdefs for endianncess.
This commit is contained in:
parent
c0d5c1e51a
commit
4500805b25
@ -151,17 +151,6 @@ typedef unsigned __int64 uint64_t;
|
||||
#define inline __inline
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1300)
|
||||
static inline uint32_t getbe32(const char *c)
|
||||
{
|
||||
return _byteswap_ulong(*(uint32_t *)c);
|
||||
}
|
||||
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
|
||||
static inline uint32_t getbe32(const char *c)
|
||||
{
|
||||
return __builtin_bswap32(*(uint32_t *)c);
|
||||
}
|
||||
#else
|
||||
static inline uint32_t getbe32(const char *c)
|
||||
{
|
||||
const unsigned char *d = (const unsigned char *)c;
|
||||
@ -171,21 +160,7 @@ static inline uint32_t getbe32(const char *c)
|
||||
(d[2] << 8) |
|
||||
(d[3]));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1300)
|
||||
static inline void putbe32(uint32_t x, char *c)
|
||||
{
|
||||
x = _byteswap_ulong(x);
|
||||
*(uint32_t *)c = x;
|
||||
}
|
||||
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
|
||||
static inline void putbe32(uint32_t x, char *c)
|
||||
{
|
||||
x = __builtin_bswap32(x);
|
||||
*(uint32_t *)c = x;
|
||||
}
|
||||
#else
|
||||
static inline void putbe32(uint32_t x, char *c)
|
||||
{
|
||||
c[0] = (x >> 24) & 0xff;
|
||||
@ -193,6 +168,5 @@ static inline void putbe32(uint32_t x, char *c)
|
||||
c[2] = (x >> 8) & 0xff;
|
||||
c[3] = (x) & 0xff;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _HG_UTIL_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user