diff options
author | Manuel Lauss <manuel.lauss@googlemail.com> | 2009-10-13 14:26:31 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2010-02-27 06:52:53 -0500 |
commit | f1fc6645a4d2cb944320ce8ed1e40f88059779e1 (patch) | |
tree | bd2d87cbf0bb729f7d3ee65c7e234e663c2fda8e /arch | |
parent | 788144656b8a862e724a1296e64ab6375eb541ed (diff) |
MIPS: Alchemy: reduce size of irq dispatcher
By replacing an extra do_IRQ with a goto, the assembly shrinks
from 260 to 212 bytes (gcc-4.3.4).
Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/alchemy/common/irq.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/mips/alchemy/common/irq.c b/arch/mips/alchemy/common/irq.c index f5b148af8b8c..960a3ee2bd4c 100644 --- a/arch/mips/alchemy/common/irq.c +++ b/arch/mips/alchemy/common/irq.c | |||
@@ -519,8 +519,8 @@ asmlinkage void plat_irq_dispatch(void) | |||
519 | unsigned long s, off; | 519 | unsigned long s, off; |
520 | 520 | ||
521 | if (pending & CAUSEF_IP7) { | 521 | if (pending & CAUSEF_IP7) { |
522 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); | 522 | off = MIPS_CPU_IRQ_BASE + 7; |
523 | return; | 523 | goto handle; |
524 | } else if (pending & CAUSEF_IP2) { | 524 | } else if (pending & CAUSEF_IP2) { |
525 | s = IC0_REQ0INT; | 525 | s = IC0_REQ0INT; |
526 | off = AU1000_INTC0_INT_BASE; | 526 | off = AU1000_INTC0_INT_BASE; |
@@ -542,7 +542,9 @@ spurious: | |||
542 | spurious_interrupt(); | 542 | spurious_interrupt(); |
543 | return; | 543 | return; |
544 | } | 544 | } |
545 | do_IRQ(__ffs(s) + off); | 545 | off += __ffs(s); |
546 | handle: | ||
547 | do_IRQ(off); | ||
546 | } | 548 | } |
547 | 549 | ||
548 | /* setup edge/level and assign request 0/1 */ | 550 | /* setup edge/level and assign request 0/1 */ |