Simplified the definition of the interrupt handlers for non smp machines.
Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s

Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s
--- trunk/reactos/ntoskrnl/ke/i386/irqhand.s	2006-01-02 18:03:19 UTC (rev 20531)
+++ trunk/reactos/ntoskrnl/ke/i386/irqhand.s	2006-01-02 18:34:31 UTC (rev 20532)
@@ -1,6 +1,31 @@
 #include <ndk/asm.h>
 #include <../hal/halx86/include/halirq.h>
 
+_KiCommonInterrupt:
+	cld
+	pushl 	%ds
+	pushl 	%es
+	pushl 	%fs
+	pushl 	%gs
+	pushl	$0xceafbeef
+	movl	$KGDT_R0_DATA,%eax
+	movl	%eax,%ds
+	movl	%eax,%es
+	movl 	%eax,%gs
+	movl	$KGDT_R0_PCR,%eax
+	movl	%eax,%fs
+	pushl 	%esp
+	pushl 	%ebx
+	call	_KiInterruptDispatch
+	addl	$0xC, %esp
+	popl	%gs
+	popl	%fs
+	popl	%es
+	popl	%ds
+	popa
+	iret
+
+
 #ifdef CONFIG_SMP
 
 #define BUILD_INTERRUPT_HANDLER(intnum) \
@@ -21,31 +46,6 @@
   B(x,8) B(x,9) B(x,A) B(x,B) \
   B(x,C) B(x,D) B(x,E) B(x,F)
 
-_KiCommonInterrupt:
-	cld
-	pushl %ds
-	pushl %es
-	pushl %fs
-	pushl %gs
-	movl	$0xceafbeef,%eax
-	pushl %eax
-	movl	$KGDT_R0_DATA,%eax
-	movl	%eax,%ds
-	movl	%eax,%es
-	movl %eax,%gs
-	movl	$KGDT_R0_PCR,%eax
-	movl	%eax,%fs
-	pushl %esp
-	pushl %ebx
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
 B16(3) B16(4) B16(5) B16(6)
 B16(7) B16(8) B16(9) B16(A)
 B16(B) B16(C) B16(D) B16(E)
@@ -53,441 +53,30 @@
 
 #undef B
 #undef B16
+#undef BUILD_INTERRUPT_HANDLER
 
 #else /* CONFIG_SMP */
 
-.global _irq_handler_0
-_irq_handler_0:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 0)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
+#define BUILD_INTERRUPT_HANDLER(intnum) \
+  .global _irq_handler_##intnum; \
+  _irq_handler_##intnum:; \
+  pusha; \
+  movl $(##intnum + IRQ_BASE), %ebx; \
+  jmp _KiCommonInterrupt;
 
-.global _irq_handler_1
-_irq_handler_1:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 1)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
+/* Interrupt handlers and declarations */
 
-.global _irq_handler_2
-_irq_handler_2:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 2)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
+#define B(x) \
+  BUILD_INTERRUPT_HANDLER(x)
 
-.global _irq_handler_3
-_irq_handler_3:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 3)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
+B(0) B(1) B(2) B(3)
+B(4) B(5) B(6) B(7)
+B(8) B(9) B(10) B(11)
+B(12) B(13) B(14) B(15)
 
-.global _irq_handler_4
-_irq_handler_4:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 4)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
+#undef B
+#undef BUILD_INTERRUPT_HANDLER
 
-.global _irq_handler_5
-_irq_handler_5:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 5)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_6
-_irq_handler_6:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 6)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_7
-_irq_handler_7:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 7)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_8
-_irq_handler_8:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 8)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_9
-_irq_handler_9:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 9)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_10
-_irq_handler_10:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 10)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_11
-_irq_handler_11:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 11)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_12
-_irq_handler_12:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 12)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_13
-_irq_handler_13:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 13)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_14
-_irq_handler_14:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 14)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
-.global _irq_handler_15
-_irq_handler_15:
-	cld
-	pusha
-	pushl	%ds
-	pushl	%es
-	pushl	%fs
-	pushl	%gs
-	movl	$0xceafbeef,%eax
-	pushl	%eax
-	movw	$KGDT_R0_DATA,%ax
-	movw	%ax,%ds
-	movw	%ax,%es
-	movw	%ax,%gs
-	movl	$KGDT_R0_PCR, %eax
-	movl	%eax, %fs
-	pushl	%esp
-	pushl	$(IRQ_BASE + 15)
-	call	_KiInterruptDispatch
-	addl	$0xC, %esp
-	popl	%gs
-	popl	%fs
-	popl	%es
-	popl	%ds
-	popa
-	iret
-
 #endif /* CONFIG_SMP */
 
 .intel_syntax noprefix