aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-06-20 15:50:20 -0400
committerIngo Molnar <mingo@elte.hu>2008-06-21 01:57:24 -0400
commit437a0a54eea7b101e8a5b70688009956f6522ed0 (patch)
treea0a2b59e4fc40f01d8ad9b5702698f216e79ff49
parent7dbceaf9bb68919651901b101f44edd5391ee489 (diff)
x86, bitops: make constant-bit set/clear_bit ops faster, gcc workaround
Jeremy Fitzhardinge reported this compiler bug: Suggestion from Linus: add "r" to the input constraint of the set_bit()/clear_bit()'s constant 'nr' branch: Blows up on "gcc version 3.4.4 20050314 (prerelease) (Debian 3.4.3-13)": CC init/main.o include2/asm/bitops.h: In function `start_kernel': include2/asm/bitops.h:59: warning: asm operand 1 probably doesn't match constraints include2/asm/bitops.h:59: warning: asm operand 1 probably doesn't match constraints include2/asm/bitops.h:59: warning: asm operand 1 probably doesn't match constraints include2/asm/bitops.h:59: error: impossible constraint in `asm' include2/asm/bitops.h:59: error: impossible constraint in `asm' include2/asm/bitops.h:59: error: impossible constraint in `asm' Reported-by: Jeremy Fitzhardinge <jeremy@goop.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/asm-x86/bitops.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/asm-x86/bitops.h b/include/asm-x86/bitops.h
index 6c5054819719..96b1829cea15 100644
--- a/include/asm-x86/bitops.h
+++ b/include/asm-x86/bitops.h
@@ -58,7 +58,7 @@ static inline void set_bit(unsigned int nr, volatile unsigned long *addr)
58 if (IS_IMMEDIATE(nr)) { 58 if (IS_IMMEDIATE(nr)) {
59 asm volatile(LOCK_PREFIX "orb %1,%0" 59 asm volatile(LOCK_PREFIX "orb %1,%0"
60 : CONST_MASK_ADDR(nr, addr) 60 : CONST_MASK_ADDR(nr, addr)
61 : "i" (CONST_MASK(nr)) 61 : "iq" ((u8)CONST_MASK(nr))
62 : "memory"); 62 : "memory");
63 } else { 63 } else {
64 asm volatile(LOCK_PREFIX "bts %1,%0" 64 asm volatile(LOCK_PREFIX "bts %1,%0"
@@ -95,7 +95,7 @@ static inline void clear_bit(int nr, volatile unsigned long *addr)
95 if (IS_IMMEDIATE(nr)) { 95 if (IS_IMMEDIATE(nr)) {
96 asm volatile(LOCK_PREFIX "andb %1,%0" 96 asm volatile(LOCK_PREFIX "andb %1,%0"
97 : CONST_MASK_ADDR(nr, addr) 97 : CONST_MASK_ADDR(nr, addr)
98 : "i" (~CONST_MASK(nr))); 98 : "iq" ((u8)~CONST_MASK(nr)));
99 } else { 99 } else {
100 asm volatile(LOCK_PREFIX "btr %1,%0" 100 asm volatile(LOCK_PREFIX "btr %1,%0"
101 : BITOP_ADDR(addr) 101 : BITOP_ADDR(addr)