diff options
-rw-r--r-- | include/asm-x86/bitops_32.h | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/include/asm-x86/bitops_32.h b/include/asm-x86/bitops_32.h index e4d75fcf9c03..2513a81f82aa 100644 --- a/include/asm-x86/bitops_32.h +++ b/include/asm-x86/bitops_32.h | |||
@@ -20,20 +20,22 @@ static inline int find_first_zero_bit(const unsigned long *addr, unsigned size) | |||
20 | 20 | ||
21 | if (!size) | 21 | if (!size) |
22 | return 0; | 22 | return 0; |
23 | /* This looks at memory. Mark it volatile to tell gcc not to move it around */ | 23 | /* This looks at memory. |
24 | __asm__ __volatile__( | 24 | * Mark it volatile to tell gcc not to move it around |
25 | "movl $-1,%%eax\n\t" | 25 | */ |
26 | "xorl %%edx,%%edx\n\t" | 26 | asm volatile("movl $-1,%%eax\n\t" |
27 | "repe; scasl\n\t" | 27 | "xorl %%edx,%%edx\n\t" |
28 | "je 1f\n\t" | 28 | "repe; scasl\n\t" |
29 | "xorl -4(%%edi),%%eax\n\t" | 29 | "je 1f\n\t" |
30 | "subl $4,%%edi\n\t" | 30 | "xorl -4(%%edi),%%eax\n\t" |
31 | "bsfl %%eax,%%edx\n" | 31 | "subl $4,%%edi\n\t" |
32 | "1:\tsubl %%ebx,%%edi\n\t" | 32 | "bsfl %%eax,%%edx\n" |
33 | "shll $3,%%edi\n\t" | 33 | "1:\tsubl %%ebx,%%edi\n\t" |
34 | "addl %%edi,%%edx" | 34 | "shll $3,%%edi\n\t" |
35 | :"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2) | 35 | "addl %%edi,%%edx" |
36 | :"1" ((size + 31) >> 5), "2" (addr), "b" (addr) : "memory"); | 36 | : "=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2) |
37 | : "1" ((size + 31) >> 5), "2" (addr), | ||
38 | "b" (addr) : "memory"); | ||
37 | return res; | 39 | return res; |
38 | } | 40 | } |
39 | 41 | ||
@@ -75,7 +77,7 @@ static inline unsigned find_first_bit(const unsigned long *addr, unsigned size) | |||
75 | unsigned long val = *addr++; | 77 | unsigned long val = *addr++; |
76 | if (val) | 78 | if (val) |
77 | return __ffs(val) + x; | 79 | return __ffs(val) + x; |
78 | x += (sizeof(*addr)<<3); | 80 | x += sizeof(*addr) << 3; |
79 | } | 81 | } |
80 | return x; | 82 | return x; |
81 | } | 83 | } |
@@ -152,10 +154,10 @@ static inline int fls(int x) | |||
152 | 154 | ||
153 | #include <asm-generic/bitops/ext2-non-atomic.h> | 155 | #include <asm-generic/bitops/ext2-non-atomic.h> |
154 | 156 | ||
155 | #define ext2_set_bit_atomic(lock, nr, addr) \ | 157 | #define ext2_set_bit_atomic(lock, nr, addr) \ |
156 | test_and_set_bit((nr), (unsigned long *)addr) | 158 | test_and_set_bit((nr), (unsigned long *)(addr)) |
157 | #define ext2_clear_bit_atomic(lock, nr, addr) \ | 159 | #define ext2_clear_bit_atomic(lock, nr, addr) \ |
158 | test_and_clear_bit((nr), (unsigned long *)addr) | 160 | test_and_clear_bit((nr), (unsigned long *)(addr)) |
159 | 161 | ||
160 | #include <asm-generic/bitops/minix.h> | 162 | #include <asm-generic/bitops/minix.h> |
161 | 163 | ||