[rtems-libbsd commit] Add generic implementation of __bswap64

Joel Sherrill joel at rtems.org
Wed Apr 18 14:45:58 UTC 2012


Module:    rtems-libbsd
Branch:    master
Commit:    f084ec7edce9cfb282c9f46adc7f4677fbdcc376
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=f084ec7edce9cfb282c9f46adc7f4677fbdcc376

Author:    Joel Sherrill <joel.sherrill at oarcorp.com>
Date:      Wed Apr 18 09:48:49 2012 -0500

Add generic implementation of __bswap64

---

 freebsd/sys/endian.h |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/freebsd/sys/endian.h b/freebsd/sys/endian.h
index 5c95d74..19e1ff2 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_ */




More information about the vc mailing list