diff options
author | Andreas Ericsson <ae@op5.se> | 2010-04-14 22:41:57 +0400 |
---|---|---|
committer | Andreas Ericsson <ae@op5.se> | 2010-04-14 22:44:22 +0400 |
commit | 5dddf7c855f9c8e43954a99a6f85c098dfc7ed41 (patch) | |
tree | b92ae7738d06508c5fbfd1f2d08fb5190343ffc8 /src/bswap.h | |
parent | d15e94c0d4eb0fe06dd1e25d7e9e3c4940417f56 (diff) |
Add block-sha1 in favour of the mozilla routines
Since block-sha1 from git.git has such excellent performance, we
can also get rid of the openssl dependency. It's rather simple
to add it back later as an optional extra, but we really needn't
bother to pull in the entire ssl library and have to deal with
linking issues now that we have the portable and, performance-wise,
truly excellent block-sha1 code to fall back on.
Since this requires a slight revamp of the build rules anyway, we
take the opportunity to fix including EXTRA_OBJS in the final build
as well.
The block-sha1 code was originally implemented for git.git by
Linus Torvalds <torvalds@linux-foundation.org> and was later
polished by Nicolas Pitre <nico@cam.org>.
Signed-off-by: Andreas Ericsson <ae@op5.se>
Diffstat (limited to 'src/bswap.h')
-rw-r--r-- | src/bswap.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/bswap.h b/src/bswap.h new file mode 100644 index 000000000..0dac883d0 --- /dev/null +++ b/src/bswap.h @@ -0,0 +1,50 @@ +/* + * Let's make sure we always have a sane definition for ntohl()/htonl(). + * Some libraries define those as a function call, just to perform byte + * shifting, bringing significant overhead to what should be a simple + * operation. + */ + +#include "common.h" + +/* + * Default version that the compiler ought to optimize properly with + * constant values. + */ +static inline uint32_t default_swab32(uint32_t val) +{ + return (((val & 0xff000000) >> 24) | + ((val & 0x00ff0000) >> 8) | + ((val & 0x0000ff00) << 8) | + ((val & 0x000000ff) << 24)); +} + +#undef bswap32 + +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + +#define bswap32(x) ({ \ + uint32_t __res; \ + if (__builtin_constant_p(x)) { \ + __res = default_swab32(x); \ + } else { \ + __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) +#define htonl(x) bswap32(x) + +#endif |