aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-07-03 06:51:19 -0400
committerIngo Molnar <mingo@elte.hu>2009-07-03 07:26:43 -0400
commit3ac805d2afd3fa4a07cb5bcf352fd7fa83f28935 (patch)
tree29e4928248f19565f883156eb04e736510c88713 /arch/x86/lib
parent824975ef190e7dcb77718d1cc2cb53769b16d918 (diff)
x86: atomic64: Reduce size of functions
cmpxchg8b is a huge instruction in terms of register footprint, we almost never want to inline it, not even within the same code module. GCC 4.3 still messes up for two functions, under-judging the true cost of this instruction - so annotate two key functions to reduce the bloat: arch/x86/lib/atomic64_32.o: text data bss dec hex filename 1763 0 0 1763 6e3 atomic64_32.o.before 435 0 0 435 1b3 atomic64_32.o.after Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Eric Dumazet <eric.dumazet@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: David Howells <dhowells@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Arnd Bergmann <arnd@arndb.de> LKML-Reference: <alpine.LFD.2.01.0907021653030.3210@localhost.localdomain> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r--arch/x86/lib/atomic64_32.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/lib/atomic64_32.c b/arch/x86/lib/atomic64_32.c
index 61959627e1e1..a910238a7760 100644
--- a/arch/x86/lib/atomic64_32.c
+++ b/arch/x86/lib/atomic64_32.c
@@ -4,7 +4,7 @@
4#include <asm/cmpxchg.h> 4#include <asm/cmpxchg.h>
5#include <asm/atomic.h> 5#include <asm/atomic.h>
6 6
7static inline u64 cmpxchg8b(u64 *ptr, u64 old, u64 new) 7static noinline u64 cmpxchg8b(u64 *ptr, u64 old, u64 new)
8{ 8{
9 u32 low = new; 9 u32 low = new;
10 u32 high = new >> 32; 10 u32 high = new >> 32;
@@ -74,7 +74,7 @@ u64 atomic64_read(atomic64_t *ptr)
74 * 74 *
75 * Atomically adds @delta to @ptr and returns @delta + *@ptr 75 * Atomically adds @delta to @ptr and returns @delta + *@ptr
76 */ 76 */
77u64 atomic64_add_return(u64 delta, atomic64_t *ptr) 77noinline u64 atomic64_add_return(u64 delta, atomic64_t *ptr)
78{ 78{
79 /* 79 /*
80 * Try first with a (probably incorrect) assumption about 80 * Try first with a (probably incorrect) assumption about