diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-08-15 19:59:40 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-09-27 08:37:35 -0400 |
commit | dc41fb43966ae1318fe34a8e5f959924a7c05d81 (patch) | |
tree | 4dbca3a63776353c118877c417d0f9a23d11b61e /arch/mips/sibyte/bcm1480 | |
parent | 73b76c78fdf3a25faecbffb52c925950d46152b6 (diff) |
[MIPS] Fix 32-bit kernel by replacing 64-bit-only code.
dclz() expects its 64-bit argument being passed as a single register
but on 32-bit kernels it'll actually be in a register pair.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/sibyte/bcm1480')
-rw-r--r-- | arch/mips/sibyte/bcm1480/irq.c | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c index ed325f0ab28a..a0222fa4416c 100644 --- a/arch/mips/sibyte/bcm1480/irq.c +++ b/arch/mips/sibyte/bcm1480/irq.c | |||
@@ -469,21 +469,6 @@ void bcm1480_kgdb_interrupt(struct pt_regs *regs) | |||
469 | 469 | ||
470 | #endif /* CONFIG_KGDB */ | 470 | #endif /* CONFIG_KGDB */ |
471 | 471 | ||
472 | static inline int dclz(unsigned long long x) | ||
473 | { | ||
474 | int lz; | ||
475 | |||
476 | __asm__ ( | ||
477 | " .set push \n" | ||
478 | " .set mips64 \n" | ||
479 | " dclz %0, %1 \n" | ||
480 | " .set pop \n" | ||
481 | : "=r" (lz) | ||
482 | : "r" (x)); | ||
483 | |||
484 | return lz; | ||
485 | } | ||
486 | |||
487 | extern void bcm1480_timer_interrupt(struct pt_regs *regs); | 472 | extern void bcm1480_timer_interrupt(struct pt_regs *regs); |
488 | extern void bcm1480_mailbox_interrupt(struct pt_regs *regs); | 473 | extern void bcm1480_mailbox_interrupt(struct pt_regs *regs); |
489 | extern void bcm1480_kgdb_interrupt(struct pt_regs *regs); | 474 | extern void bcm1480_kgdb_interrupt(struct pt_regs *regs); |
@@ -536,9 +521,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
536 | 521 | ||
537 | if (mask_h) { | 522 | if (mask_h) { |
538 | if (mask_h ^ 1) | 523 | if (mask_h ^ 1) |
539 | do_IRQ(63 - dclz(mask_h), regs); | 524 | do_IRQ(fls64(mask_h) - 1, regs); |
540 | else | 525 | else |
541 | do_IRQ(127 - dclz(mask_l), regs); | 526 | do_IRQ(63 + fls64(mask_l), regs); |
542 | } | 527 | } |
543 | } | 528 | } |
544 | } | 529 | } |