aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-04-27 17:24:49 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-04-27 17:24:49 -0400
commita9aa0e24f7ed5acf2e0e1799fb28daf928293ba1 (patch)
tree38782b91d531c8d98b81372a7c964fa2c924b90f /include
parent7c1c3eb855b5311118bed3b51c79d652d40148ec (diff)
parentee1cca1b0661fa33fd99f2d8ec7e2749432f9b1d (diff)
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: [MIPS] Fix branch emulation for floating-point exceptions. [MIPS] Cleanup inode->r_dev usage. [MIPS] Update MIPS defconfigs. [MIPS] Get rid of CONFIG_ADVANCED. [MIPS] Kconfig: Clarify description of CROSSCOMPILE. [MIPS] 24K LV: Add core card id. [MIPS] Sparse: fix sparse for 64-bit kernels. [MIPS] Use __ffs() instead of ffs() in ip32_irq0(). [MIPS] Fix bitops for MIPS32/MIPS64 CPUs. [MIPS] Fix ip27 build. [MIPS] Oprofile: fix sparse warning. [MIPS] Fix oprofile module unloading
Diffstat (limited to 'include')
-rw-r--r--include/asm-mips/bitops.h56
-rw-r--r--include/asm-mips/mips-boards/generic.h1
2 files changed, 25 insertions, 32 deletions
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h
index a1728f8c0705..d2f444537e4b 100644
--- a/include/asm-mips/bitops.h
+++ b/include/asm-mips/bitops.h
@@ -467,64 +467,56 @@ static inline unsigned long __ffs(unsigned long word)
467} 467}
468 468
469/* 469/*
470 * ffs - find first bit set. 470 * fls - find last bit set.
471 * @word: The word to search 471 * @word: The word to search
472 * 472 *
473 * Returns 1..SZLONG 473 * This is defined the same way as ffs.
474 * Returns 0 if no bit exists 474 * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
475 */ 475 */
476 476static inline int fls(int word)
477static inline unsigned long ffs(unsigned long word)
478{ 477{
479 if (!word) 478 __asm__ ("clz %0, %1" : "=r" (word) : "r" (word));
480 return 0;
481 479
482 return __ffs(word) + 1; 480 return 32 - word;
483} 481}
484 482
485/* 483#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPS64)
486 * ffz - find first zero in word. 484static inline int fls64(__u64 word)
487 * @word: The word to search
488 *
489 * Undefined if no zero exists, so code should check against ~0UL first.
490 */
491static inline unsigned long ffz(unsigned long word)
492{ 485{
493 return __ffs (~word); 486 __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
487
488 return 64 - word;
494} 489}
490#else
491#include <asm-generic/bitops/fls64.h>
492#endif
495 493
496/* 494/*
497 * fls - find last bit set. 495 * ffs - find first bit set.
498 * @word: The word to search 496 * @word: The word to search
499 * 497 *
500 * Returns 1..SZLONG 498 * This is defined the same way as
501 * Returns 0 if no bit exists 499 * the libc and compiler builtin ffs routines, therefore
500 * differs in spirit from the above ffz (man ffs).
502 */ 501 */
503static inline unsigned long fls(unsigned long word) 502static inline int ffs(int word)
504{ 503{
505#ifdef CONFIG_CPU_MIPS32 504 if (!word)
506 __asm__ ("clz %0, %1" : "=r" (word) : "r" (word)); 505 return 0;
507
508 return 32 - word;
509#endif
510
511#ifdef CONFIG_CPU_MIPS64
512 __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
513 506
514 return 64 - word; 507 return fls(word & -word);
515#endif
516} 508}
517 509
518#else 510#else
519 511
520#include <asm-generic/bitops/__ffs.h> 512#include <asm-generic/bitops/__ffs.h>
521#include <asm-generic/bitops/ffs.h> 513#include <asm-generic/bitops/ffs.h>
522#include <asm-generic/bitops/ffz.h>
523#include <asm-generic/bitops/fls.h> 514#include <asm-generic/bitops/fls.h>
515#include <asm-generic/bitops/fls64.h>
524 516
525#endif /*defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64) */ 517#endif /*defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64) */
526 518
527#include <asm-generic/bitops/fls64.h> 519#include <asm-generic/bitops/ffz.h>
528#include <asm-generic/bitops/find.h> 520#include <asm-generic/bitops/find.h>
529 521
530#ifdef __KERNEL__ 522#ifdef __KERNEL__
diff --git a/include/asm-mips/mips-boards/generic.h b/include/asm-mips/mips-boards/generic.h
index 25b6ffc26623..fa8b913cc3e0 100644
--- a/include/asm-mips/mips-boards/generic.h
+++ b/include/asm-mips/mips-boards/generic.h
@@ -67,6 +67,7 @@
67#define MIPS_REVISION_CORID_CORE_FPGA2 7 67#define MIPS_REVISION_CORID_CORE_FPGA2 7
68#define MIPS_REVISION_CORID_CORE_FPGAR2 8 68#define MIPS_REVISION_CORID_CORE_FPGAR2 8
69#define MIPS_REVISION_CORID_CORE_FPGA3 9 69#define MIPS_REVISION_CORID_CORE_FPGA3 9
70#define MIPS_REVISION_CORID_CORE_24K 10
70 71
71/**** Artificial corid defines ****/ 72/**** Artificial corid defines ****/
72/* 73/*