From f084ec7edce9cfb282c9f46adc7f4677fbdcc376 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 18 Apr 2012 09:48:49 -0500 Subject: [PATCH] Add generic implementation of __bswap64 --- freebsd/sys/endian.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/freebsd/sys/endian.h b/freebsd/sys/endian.h index 5c95d748..19e1ff25 100644 --- a/freebsd/sys/endian.h +++ b/freebsd/sys/endian.h @@ -197,4 +197,20 @@ le64enc(void *pp, uint64_t u) le32enc(p + 4, u >> 32); } +/* + * In FreeBSD, this can be CPU specific but most targets use this + * implementation. + * + * This is from the powerpc implementation. + */ +static __inline uint64_t +__bswap64(uint64_t _x) +{ + + return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) | + ((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) | + ((_x << 24) & ((__uint64_t)0xff << 40)) | + ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56))); +} + #endif /* _SYS_ENDIAN_HH_ */