git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] s390: add #ifdef __KERNEL__ to asm-s390/setup.h
[pandora-kernel.git]
/
include
/
asm-mips
/
bitops.h
diff --git
a/include/asm-mips/bitops.h
b/include/asm-mips/bitops.h
index
3b0c8aa
..
8e80205
100644
(file)
--- a/
include/asm-mips/bitops.h
+++ b/
include/asm-mips/bitops.h
@@
-644,20
+644,26
@@
static inline unsigned long ffz(unsigned long word)
}
/*
}
/*
- * fl
z - find last zero in word
.
+ * fl
s - find last bit set
.
* @word: The word to search
*
* @word: The word to search
*
- * Returns
0..SZLONG-1
- *
Undefined if no zero exists, so code should check against ~0UL first.
+ * Returns
1..SZLONG
+ *
Returns 0 if no bit exists
*/
*/
-static inline unsigned long fl
z
(unsigned long word)
+static inline unsigned long fl
s
(unsigned long word)
{
{
-#if defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64)
- return __ilog2(~word);
-#else
#ifdef CONFIG_32BIT
#ifdef CONFIG_32BIT
- int r = 31, s;
- word = ~word;
+#ifdef CONFIG_CPU_MIPS32
+ __asm__ ("clz %0, %1" : "=r" (word) : "r" (word));
+
+ return 32 - word;
+#else
+ {
+ int r = 32, s;
+
+ if (word == 0)
+ return 0;
+
s = 16; if ((word & 0xffff0000)) s = 0; r -= s; word <<= s;
s = 8; if ((word & 0xff000000)) s = 0; r -= s; word <<= s;
s = 4; if ((word & 0xf0000000)) s = 0; r -= s; word <<= s;
s = 16; if ((word & 0xffff0000)) s = 0; r -= s; word <<= s;
s = 8; if ((word & 0xff000000)) s = 0; r -= s; word <<= s;
s = 4; if ((word & 0xf0000000)) s = 0; r -= s; word <<= s;
@@
-665,10
+671,23
@@
static inline unsigned long flz(unsigned long word)
s = 1; if ((word & 0x80000000)) s = 0; r -= s;
return r;
s = 1; if ((word & 0x80000000)) s = 0; r -= s;
return r;
+ }
#endif
#endif
+#endif /* CONFIG_32BIT */
+
#ifdef CONFIG_64BIT
#ifdef CONFIG_64BIT
- int r = 63, s;
- word = ~word;
+#ifdef CONFIG_CPU_MIPS64
+
+ __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
+
+ return 64 - word;
+#else
+ {
+ int r = 64, s;
+
+ if (word == 0)
+ return 0;
+
s = 32; if ((word & 0xffffffff00000000UL)) s = 0; r -= s; word <<= s;
s = 16; if ((word & 0xffff000000000000UL)) s = 0; r -= s; word <<= s;
s = 8; if ((word & 0xff00000000000000UL)) s = 0; r -= s; word <<= s;
s = 32; if ((word & 0xffffffff00000000UL)) s = 0; r -= s; word <<= s;
s = 16; if ((word & 0xffff000000000000UL)) s = 0; r -= s; word <<= s;
s = 8; if ((word & 0xff00000000000000UL)) s = 0; r -= s; word <<= s;
@@
-677,24
+696,11
@@
static inline unsigned long flz(unsigned long word)
s = 1; if ((word & 0x8000000000000000UL)) s = 0; r -= s;
return r;
s = 1; if ((word & 0x8000000000000000UL)) s = 0; r -= s;
return r;
+ }
#endif
#endif
-#endif
+#endif
/* CONFIG_64BIT */
}
}
-/*
- * fls - find last bit set.
- * @word: The word to search
- *
- * Returns 1..SZLONG
- * Returns 0 if no bit exists
- */
-static inline unsigned long fls(unsigned long word)
-{
- if (word == 0)
- return 0;
-
- return flz(~word) + 1;
-}
#define fls64(x) generic_fls64(x)
/*
#define fls64(x) generic_fls64(x)
/*