aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/include/asm/byteorder.h
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2011-04-13 21:53:09 +0200
committerWolfgang Denk <wd@denx.de>2011-04-13 21:53:09 +0200
commit107b56bdd8e82b07458df11f8df4a01067512281 (patch)
tree5408cb88b9aaf65e8b8e96ea812ae09e506bea22 /arch/x86/include/asm/byteorder.h
parent2c51983b810d73946f653a4385c65a8b7babbbe1 (diff)
parent880c80d004acdc7370ab892df51c37c0cf0ff86d (diff)
Merge branch 'master' of git://git.denx.de/u-boot-x86
Diffstat (limited to 'arch/x86/include/asm/byteorder.h')
-rw-r--r--arch/x86/include/asm/byteorder.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/arch/x86/include/asm/byteorder.h b/arch/x86/include/asm/byteorder.h
new file mode 100644
index 0000000000..7dfeb8bbed
--- /dev/null
+++ b/arch/x86/include/asm/byteorder.h
@@ -0,0 +1,43 @@
+#ifndef _I386_BYTEORDER_H
+#define _I386_BYTEORDER_H
+
+#include <asm/types.h>
+
+#ifdef __GNUC__
+
+
+static __inline__ __u32 ___arch__swab32(__u32 x)
+{
+#ifdef CONFIG_X86_BSWAP
+ __asm__("bswap %0" : "=r" (x) : "0" (x));
+#else
+ __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */
+ "rorl $16,%0\n\t" /* swap words */
+ "xchgb %b0,%h0" /* swap higher bytes */
+ :"=q" (x)
+ : "0" (x));
+#endif
+ return x;
+}
+
+static __inline__ __u16 ___arch__swab16(__u16 x)
+{
+ __asm__("xchgb %b0,%h0" /* swap bytes */ \
+ : "=q" (x) \
+ : "0" (x)); \
+ return x;
+}
+
+#define __arch__swab32(x) ___arch__swab32(x)
+#define __arch__swab16(x) ___arch__swab16(x)
+
+#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
+# define __BYTEORDER_HAS_U64__
+# define __SWAB_64_THRU_32__
+#endif
+
+#endif /* __GNUC__ */
+
+#include <linux/byteorder/little_endian.h>
+
+#endif /* _I386_BYTEORDER_H */