Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[MIPS] Optimize get_unaligned / put_unaligned implementations.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

+21 -6
+21 -6
include/asm-mips/unaligned.h
··· 3 3 * License. See the file "COPYING" in the main directory of this archive 4 4 * for more details. 5 5 * 6 - * Copyright (C) 1996, 1999, 2000, 2001, 2003 by Ralf Baechle 7 - * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc. 6 + * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org) 8 7 */ 9 - #ifndef _ASM_UNALIGNED_H 10 - #define _ASM_UNALIGNED_H 8 + #ifndef __ASM_GENERIC_UNALIGNED_H 9 + #define __ASM_GENERIC_UNALIGNED_H 11 10 12 - #include <asm-generic/unaligned.h> 11 + #include <linux/compiler.h> 13 12 14 - #endif /* _ASM_UNALIGNED_H */ 13 + #define get_unaligned(ptr) \ 14 + ({ \ 15 + struct __packed { \ 16 + typeof(*(ptr)) __v; \ 17 + } *__p = (void *) (ptr); \ 18 + __p->__v; \ 19 + }) 20 + 21 + #define put_unaligned(val, ptr) \ 22 + do { \ 23 + struct __packed { \ 24 + typeof(*(ptr)) __v; \ 25 + } *__p = (void *) (ptr); \ 26 + __p->__v = (val); \ 27 + } while(0) 28 + 29 + #endif /* __ASM_GENERIC_UNALIGNED_H */