[MIPS] Optimize get_unaligned / put_unaligned implementations.
authorRalf Baechle <ralf@linux-mips.org>
Wed, 14 Feb 2007 21:16:14 +0000 (21:16 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 11 Oct 2007 22:46:15 +0000 (23:46 +0100)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
include/asm-mips/unaligned.h

index a004256..3249049 100644 (file)
@@ -3,12 +3,27 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 1996, 1999, 2000, 2001, 2003 by Ralf Baechle
- * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
+ * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org)
  */
-#ifndef _ASM_UNALIGNED_H
-#define _ASM_UNALIGNED_H
+#ifndef __ASM_GENERIC_UNALIGNED_H
+#define __ASM_GENERIC_UNALIGNED_H
 
-#include <asm-generic/unaligned.h>
+#include <linux/compiler.h>
 
-#endif /* _ASM_UNALIGNED_H */
+#define get_unaligned(ptr)                                     \
+({                                                             \
+       struct __packed {                                       \
+               typeof(*(ptr)) __v;                             \
+       } *__p = (void *) (ptr);                                \
+       __p->__v;                                               \
+})
+
+#define put_unaligned(val, ptr)                                        \
+do {                                                           \
+       struct __packed {                                       \
+               typeof(*(ptr)) __v;                             \
+       } *__p = (void *) (ptr);                                \
+       __p->__v = (val);                                       \
+} while(0)
+
+#endif /* __ASM_GENERIC_UNALIGNED_H */