- Convert pure inline assembler .c files to .S files.
- Move SMP IRQ handlers to irqhand.s (at the same place where the UP ones are).
Added: trunk/reactos/ntoskrnl/ex/i386/interlck.S
Deleted: trunk/reactos/ntoskrnl/ex/i386/interlck.c
Added: trunk/reactos/ntoskrnl/ke/i386/brkpoint.S
Deleted: trunk/reactos/ntoskrnl/ke/i386/brkpoint.c
Modified: trunk/reactos/ntoskrnl/ke/i386/irq.c
Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s
Modified: trunk/reactos/ntoskrnl/ntoskrnl.xml

Added: trunk/reactos/ntoskrnl/ex/i386/interlck.S
--- trunk/reactos/ntoskrnl/ex/i386/interlck.S	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ex/i386/interlck.S	2005-07-05 16:40:01 UTC (rev 16428)
@@ -0,0 +1,143 @@
+/* $Id: interlck.c 15557 2005-05-28 07:26:38Z hbirr $
+ *
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/ex/i386/interlck.c
+ * PURPOSE:         No purpose listed.
+ *
+ * PROGRAMMERS:     No programmer listed.
+ */
+
+#ifdef CONFIG_SMP
+#define LOCK lock
+#else
+#define LOCK
+#endif
+
+.global @Exfi386InterlockedIncrementLong@4
+@Exfi386InterlockedIncrementLong@4:
+	LOCK
+	addl $1,(%ecx)
+	lahf
+	andl $0xC000, %eax
+	ret
+
+.global @Exfi386InterlockedDecrementLong@4
+@Exfi386InterlockedDecrementLong@4:
+	LOCK
+	subl $1,(%ecx)
+	lahf
+	andl $0xC000, %eax
+	ret
+
+.global @Exfi386InterlockedExchangeUlong@8
+@Exfi386InterlockedExchangeUlong@8:
+	LOCK
+	xchgl %edx,(%ecx)
+	movl  %edx,%eax
+	ret
+
+.global _Exi386InterlockedIncrementLong@4
+_Exi386InterlockedIncrementLong@4:
+	movl 4(%esp),%eax
+	LOCK
+	addl $1,(%eax)
+	lahf
+	andl $0xC000, %eax
+	ret $4
+
+.global _Exi386InterlockedDecrementLong@4
+_Exi386InterlockedDecrementLong@4:
+	movl 4(%esp),%eax
+	LOCK
+	subl $1,(%eax)
+	lahf
+	andl $0xC000, %eax
+	ret $4
+
+.global _Exi386InterlockedExchangeUlong@8
+_Exi386InterlockedExchangeUlong@8:
+	movl 4(%esp),%edx
+	movl 8(%esp),%eax
+	LOCK
+	xchgl %eax,(%edx)
+	ret $8
+
+.global @InterlockedIncrement@4
+@InterlockedIncrement@4:
+	movl $1,%eax
+	LOCK
+	xaddl %eax,(%ecx)
+	incl %eax
+	ret
+
+.global @InterlockedDecrement@4
+@InterlockedDecrement@4:
+	movl $-1,%eax
+	LOCK
+	xaddl %eax,(%ecx)
+	decl %eax
+	ret
+
+.global @InterlockedExchange@8
+@InterlockedExchange@8:
+	LOCK
+	xchgl %edx,(%ecx)
+	movl  %edx,%eax
+	ret
+
+.global @InterlockedExchangeAdd@8
+@InterlockedExchangeAdd@8:
+	LOCK
+	xaddl %edx,(%ecx)
+	movl %edx,%eax
+	ret
+
+.global @InterlockedClearBit@8
+@InterlockedClearBit@8:
+	LOCK
+	btr %edx,(%ecx)
+	setc %al
+	ret
+
+.global @InterlockedCompareExchange@12
+@InterlockedCompareExchange@12:
+	movl 4(%esp),%eax
+	LOCK
+	cmpxchg %edx,(%ecx)
+	ret $4
+
+.global @ExfpInterlockedExchange64@8
+@ExfpInterlockedExchange64@8:
+	pushl %ebx
+	pushl %esi
+	movl %ecx,%esi
+	movl (%edx),%ebx
+	movl 4(%edx),%ecx
+1:
+	movl (%esi),%eax
+	movl 4(%esi),%edx
+	LOCK
+	cmpxchg8b (%esi)
+	jnz 1b
+	popl %esi
+	popl %ebx
+	ret
+
+.global @ExfInterlockedCompareExchange64@12
+@ExfInterlockedCompareExchange64@12:
+	pushl %ebx
+	pushl %esi
+	movl %ecx,%esi
+	movl (%edx),%ebx
+	movl 4(%edx),%ecx
+	movl 12(%esp),%edx
+	movl (%edx),%eax
+	movl 4(%edx),%edx
+	LOCK
+	cmpxchg8b (%esi)
+	popl %esi
+	popl %ebx
+	ret  $4
+
+/* EOF */

Deleted: trunk/reactos/ntoskrnl/ex/i386/interlck.c
--- trunk/reactos/ntoskrnl/ex/i386/interlck.c	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ex/i386/interlck.c	2005-07-05 16:40:01 UTC (rev 16428)
@@ -1,536 +0,0 @@
-/* $Id$
- *
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            ntoskrnl/ex/i386/interlck.c
- * PURPOSE:         No purpose listed.
- *
- * PROGRAMMERS:     No programmer listed.
- */
-
-#include <ntoskrnl.h>
-
-#ifdef LOCK
-#undef LOCK
-#endif
-
-#if defined(__GNUC__)
-
-/*
- * Do not declare any variable after this point!!
- */
-__asm__("\n\t.text\n\t");
-
-#ifdef CONFIG_SMP
-#define LOCK "lock ; "
-#else
-#define LOCK ""
-#endif
-
-#elif defined(_MSC_VER)
-
-#ifdef CONFIG_SMP
-#define LOCK lock
-#else
-#define LOCK
-#endif
-
-#endif
-
-#if defined(__GNUC__)
-
-/*
- * @implemented
- */
-INTERLOCKED_RESULT FASTCALL
-Exfi386InterlockedIncrementLong(IN PLONG Addend);
-
-__asm__("\n\t.global @Exfi386InterlockedIncrementLong@4\n\t"
-	"@Exfi386InterlockedIncrementLong@4:\n\t"
-	LOCK
-	"addl $1,(%ecx)\n\t"
-	"lahf\n\t"
-	"andl $0xC000, %eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-
-/*
- * @implemented
- */
-__declspec(naked)
-INTERLOCKED_RESULT FASTCALL
-Exfi386InterlockedIncrementLong(IN PLONG Addend)
-{
-        __asm LOCK add dword ptr [ecx], 1
-	__asm lahf
-	__asm and eax, 0xC000
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-#if defined(__GNUC__)
-
-/*
- * @implemented
- */
-INTERLOCKED_RESULT FASTCALL
-Exfi386InterlockedDecrementLong(IN PLONG Addend);
-
-__asm__("\n\t.global @Exfi386InterlockedDecrementLong@4\n\t"
-	"@Exfi386InterlockedDecrementLong@4:\n\t"
-	LOCK
-	"subl $1,(%ecx)\n\t"
-	"lahf\n\t"
-	"andl $0xC000, %eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-
-/*
- * @implemented
- */
-__declspec(naked)
-INTERLOCKED_RESULT FASTCALL
-Exfi386InterlockedDecrementLong(IN PLONG Addend)
-{
-	__asm LOCK sub dword ptr [ecx], 1
-	__asm lahf
-	__asm and eax, 0xC000
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-#if defined(__GNUC__)
-
-/*
- * @implemented
- */
-ULONG FASTCALL
-Exfi386InterlockedExchangeUlong(IN PULONG Target,
-				IN ULONG Value);
-
-__asm__("\n\t.global @Exfi386InterlockedExchangeUlong@8\n\t"
-	"@Exfi386InterlockedExchangeUlong@8:\n\t"
-	LOCK
-	"xchgl %edx,(%ecx)\n\t"
-	"movl  %edx,%eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-
-/*
- * @implemented
- */
-__declspec(naked)
-ULONG FASTCALL
-Exfi386InterlockedExchangeUlong(IN PULONG Target,
-				IN ULONG Value)
-{
-	__asm LOCK xchg [ecx], edx
-	__asm mov  eax, edx
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-#if defined(__GNUC__)
-
-INTERLOCKED_RESULT STDCALL
-Exi386InterlockedIncrementLong(IN PLONG Addend);
-
-__asm__("\n\t.global _Exi386InterlockedIncrementLong@4\n\t"
-	"_Exi386InterlockedIncrementLong@4:\n\t"
-	"movl 4(%esp),%eax\n\t"
-	LOCK
-	"addl $1,(%eax)\n\t"
-	"lahf\n\t"
-	"andl $0xC000, %eax\n\t"
-	"ret $4\n\t");
-
-#elif defined(_MSC_VER)
-
-__declspec(naked)
-INTERLOCKED_RESULT STDCALL
-Exi386InterlockedIncrementLong(IN PLONG Addend)
-{
-	__asm mov eax, Addend
-	__asm LOCK add dword ptr [eax], 1
-	__asm lahf
-	__asm and eax, 0xC000
-	__asm ret 4
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-#if defined(__GNUC__)
-
-INTERLOCKED_RESULT STDCALL
-Exi386InterlockedDecrementLong(IN PLONG Addend);
-
-__asm__("\n\t.global _Exi386InterlockedDecrementLong@4\n\t"
-	"_Exi386InterlockedDecrementLong@4:\n\t"
-	"movl 4(%esp),%eax\n\t"
-	LOCK
-	"subl $1,(%eax)\n\t"
-	"lahf\n\t"
-	"andl $0xC000, %eax\n\t"
-	"ret $4\n\t");
-
-#elif defined(_MSC_VER)
-
-__declspec(naked)
-INTERLOCKED_RESULT STDCALL
-Exi386InterlockedDecrementLong(IN PLONG Addend)
-{
-	__asm mov eax, Addend
-	__asm LOCK sub dword ptr [eax], 1
-	__asm lahf
-	__asm and eax, 0xC000
-	__asm ret 4
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-#if defined(__GNUC__)
-
-ULONG STDCALL
-Exi386InterlockedExchangeUlong(IN PULONG Target,
-			       IN ULONG Value);
-
-__asm__("\n\t.global _Exi386InterlockedExchangeUlong@8\n\t"
-	"_Exi386InterlockedExchangeUlong@8:\n\t"
-	"movl 4(%esp),%edx\n\t"
-	"movl 8(%esp),%eax\n\t"
-	LOCK
-	"xchgl %eax,(%edx)\n\t"
-	"ret $8\n\t");
-
-#elif defined(_MSC_VER)
-
-__declspec(naked)
-ULONG STDCALL
-Exi386InterlockedExchangeUlong(IN PULONG Target,
-			       IN ULONG Value)
-{
-	__asm mov edx, Value
-	__asm mov eax, Target
-	__asm LOCK xchg [edx], eax
-	__asm ret 8
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-
-/**********************************************************************
- * FASTCALL: @InterlockedIncrement@4
- * STDCALL : _InterlockedIncrement@4
- */
-#if defined(__GNUC__)
-/*
- * @implemented
- */
-LONG FASTCALL
-InterlockedIncrement(PLONG Addend);
-/*
- * FUNCTION: Increments a caller supplied variable of type LONG as an
- * atomic operation
- * ARGUMENTS:
- *     Addend = Points to a variable whose value is to be increment
- * RETURNS: The incremented value
- */
-
-__asm__("\n\t.global @InterlockedIncrement@4\n\t"
-	"@InterlockedIncrement@4:\n\t"
-	"movl $1,%eax\n\t"
-	LOCK
-	"xaddl %eax,(%ecx)\n\t"
-	"incl %eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-/*
- * @implemented
- */
-__declspec(naked)
-LONG FASTCALL
-InterlockedIncrement(PLONG Addend)
-{
-	__asm mov eax, 1
-	__asm LOCK xadd [ecx], eax
-	__asm inc eax
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-/**********************************************************************
- * FASTCALL: @InterlockedDecrement@4
- * STDCALL : _InterlockedDecrement@4
- */
-#if defined(__GNUC__)
-/*
- * @implemented
- */
-LONG FASTCALL
-InterlockedDecrement(PLONG Addend);
-
-__asm__("\n\t.global @InterlockedDecrement@4\n\t"
-	"@InterlockedDecrement@4:\n\t"
-	"movl $-1,%eax\n\t"
-	LOCK
-	"xaddl %eax,(%ecx)\n\t"
-	"decl %eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-
-/*
- * @implemented
- */
-__declspec(naked)
-LONG FASTCALL
-InterlockedDecrement(PLONG Addend)
-{
-	__asm mov eax, -1
-	__asm LOCK xadd [ecx], eax
-	__asm dec eax
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-
-/**********************************************************************
- * FASTCALL: @InterlockedExchange@8
- * STDCALL : _InterlockedExchange@8
- */
-
-#if defined(__GNUC__)
-/*
- * @implemented
- */
-LONG FASTCALL
-InterlockedExchange(PLONG Target,
-		    LONG Value);
-
-__asm__("\n\t.global @InterlockedExchange@8\n\t"
-	"@InterlockedExchange@8:\n\t"
-	LOCK
-	"xchgl %edx,(%ecx)\n\t"
-	"movl  %edx,%eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-/*
- * @implemented
- */
-__declspec(naked)
-LONG FASTCALL
-InterlockedExchange(PLONG Target,
-		    LONG Value)
-{
-	__asm LOCK xchg [ecx], edx
-	__asm mov eax, edx
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/**********************************************************************
- * FASTCALL: @InterlockedExchangeAdd@8
- * STDCALL: _InterlockedExchangeAdd@8
- */
-#if defined(__GNUC__)
-/*
- * @implemented
- */
-LONG FASTCALL
-InterlockedExchangeAdd(PLONG Addend,
-		       LONG Value);
-
-__asm__("\n\t.global @InterlockedExchangeAdd@8\n\t"
-	"@InterlockedExchangeAdd@8:\n\t"
-	LOCK
-	"xaddl %edx,(%ecx)\n\t"
-	"movl %edx,%eax\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-/*
- * @implemented
- */
-__declspec(naked)
-LONG FASTCALL
-InterlockedExchangeAdd(PLONG Addend,
-		       LONG Value)
-{
-	__asm LOCK xadd [ecx], edx
-	__asm mov eax, edx
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/**********************************************************************
- * FASTCALL: @InterlockedClearBit@8
- * STDCALL: _InterlockedClearBit@8
- */
-#if defined(__GNUC__)
-/*
- * @implemented
- */
-UCHAR
-FASTCALL
-InterlockedClearBit(PLONG Destination,
-                    LONG Bit);
-
-__asm__("\n\t.global @InterlockedClearBit@8\n\t"
-	"@InterlockedClearBit@8:\n\t"
-	LOCK
-	"btr %edx,(%ecx)\n\t"
-	"setc %al\n\t"
-	"ret\n\t");
-
-#elif defined(_MSC_VER)
-/*
- * @implemented
- */
-__declspec(naked)
-UCHAR
-FASTCALL
-InterlockedClearBit(PUCHAR Destination,
-                    UCHAR Bit)
-{
-	__asm LOCK btr [ecx], edx
-	__asm setc al
-	__asm ret
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/**********************************************************************
- * FASTCALL: @InterlockedCompareExchange@12
- * STDCALL: _InterlockedCompareExchange@12
- */
-#if defined(__GNUC__)
-
-LONG FASTCALL
-InterlockedCompareExchange(PLONG Destination,
-			   LONG Exchange,
-			   LONG Comperand);
-
-__asm__("\n\t.global @InterlockedCompareExchange@12\n\t"
-	"@InterlockedCompareExchange@12:\n\t"
-	"movl 4(%esp),%eax\n\t"
-	LOCK
-	"cmpxchg %edx,(%ecx)\n\t"
-	"ret $4\n\t");
-
-#elif defined(_MSC_VER)
-
-__declspec(naked)
-LONG FASTCALL
-InterlockedCompareExchange(PLONG Destination,
-			   LONG Exchange,
-			   LONG Comperand)
-{
-	__asm mov eax, Comperand
-	__asm LOCK cmpxchg [ecx], edx
-	__asm ret 4
-}
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/**********************************************************************
- * FASTCALL: @InterlockedCompareExchange64@8
- */
-#if defined(__GNUC__)
-LONGLONG FASTCALL
-ExfpInterlockedExchange64(LONGLONG volatile * Destination,
-                         PLONGLONG Exchange);
-
-__asm__("\n\t.global @ExfpInterlockedExchange64@8\n\t"
-	"@ExfpInterlockedExchange64@8:\n\t"
-	"pushl %ebx\n\t"
-	"pushl %esi\n\t"
-	"movl %ecx,%esi\n\t"
-	"movl (%edx),%ebx\n\t"
-	"movl 4(%edx),%ecx\n\t"
-	"\n1:\t"
-	"movl (%esi),%eax\n\t"
-	"movl 4(%esi),%edx\n\t"
-	LOCK
-	"cmpxchg8b (%esi)\n\t"
-	"jnz 1b\n\t"
-	"popl %esi\n\t"
-	"popl %ebx\n\t"
-	"ret\n\t");
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/**********************************************************************
- * FASTCALL: @ExfInterlockedCompareExchange@12
- */
-#if defined(__GNUC__)
-LONGLONG FASTCALL
-ExfInterlockedCompareExchange64(LONGLONG volatile * Destination,
-                                PLONGLONG Exchange,
-				PLONGLONG Comperand);
-
-__asm__("\n\t.global @ExfInterlockedCompareExchange64@12\n\t"
-	"@ExfInterlockedCompareExchange64@12:\n\t"
-	"pushl %ebx\n\t"
-	"pushl %esi\n\t"
-	"movl %ecx,%esi\n\t"
-	"movl (%edx),%ebx\n\t"
-	"movl 4(%edx),%ecx\n\t"
-	"movl 12(%esp),%edx\n\t"
-	"movl (%edx),%eax\n\t"
-	"movl 4(%edx),%edx\n\t"
-	LOCK
-	"cmpxchg8b (%esi)\n\t"
-	"popl %esi\n\t"
-	"popl %ebx\n\t"
-	"ret  $4\n\t");
-
-#else
-#error Unknown compiler for inline assembler
-#endif
-
-/* EOF */

Added: trunk/reactos/ntoskrnl/ke/i386/brkpoint.S
--- trunk/reactos/ntoskrnl/ke/i386/brkpoint.S	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ke/i386/brkpoint.S	2005-07-05 16:40:01 UTC (rev 16428)
@@ -0,0 +1,22 @@
+/* $Id: brkpoint.c 15164 2005-05-09 01:38:29Z sedwards $
+ *
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            ntoskrnl/ke/i386/brkpoint.c
+ * PURPOSE:         Handles breakpoints
+ *
+ * PROGRAMMERS:     No programmer listed.
+ */
+
+.global _DbgBreakPoint@0
+_DbgBreakPoint@0:
+.global _DbgBreakPointNoBugCheck@0
+_DbgBreakPointNoBugCheck@0:
+	int $3
+	ret
+
+.global _DbgBreakPointWithStatus@4
+_DbgBreakPointWithStatus@4:
+	mov 0x4(%esp), %eax
+	int $3
+	ret $4

Deleted: trunk/reactos/ntoskrnl/ke/i386/brkpoint.c
--- trunk/reactos/ntoskrnl/ke/i386/brkpoint.c	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ke/i386/brkpoint.c	2005-07-05 16:40:01 UTC (rev 16428)
@@ -1,59 +0,0 @@
-/* $Id$
- *
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            ntoskrnl/ke/i386/brkpoint.c
- * PURPOSE:         Handles breakpoints
- *
- * PROGRAMMERS:     No programmer listed.
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <ntoskrnl.h>
-#include <internal/debug.h>
-
-/* FUNCTIONS *****************************************************************/
-
-/*
- * @implemented
- */
-VOID STDCALL
-DbgBreakPoint(VOID)
-{
-#if defined(__GNUC__)
-   __asm__("int $3\n\t");
-#elif defined(_MSC_VER)
-   __asm int 3;
-#else
-#error Unknown compiler for inline assembler
-#endif
-}
-
-/*
- * @implemented
- */
-#if defined(__GNUC__)
- __asm__(".globl _DbgBreakPointNoBugCheck@0\n\t"
-         "_DbgBreakPointNoBugCheck@0:\n\t"
-         "int $3\n\t"
-         "ret\n\t");
-#endif
-
-/*
- * @implemented
- */
-VOID STDCALL
-DbgBreakPointWithStatus(ULONG Status)
-{
-#if defined(__GNUC__)
-   __asm__("mov %0, %%eax\n\t"
-           "int $3\n\t"
-           ::"m"(Status));
-#elif defined(_MSC_VER)
-   __asm mov eax, Status
-   __asm int 3;
-#else
-#error Unknown compiler for inline assembler
-#endif
-}

Modified: trunk/reactos/ntoskrnl/ke/i386/irq.c
--- trunk/reactos/ntoskrnl/ke/i386/irq.c	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ke/i386/irq.c	2005-07-05 16:40:01 UTC (rev 16428)
@@ -26,74 +26,29 @@
 
 /* GLOBALS *****************************************************************/
 
+/* Interrupt handler list */
+
 #ifdef CONFIG_SMP
 
-#define __STR(x) #x
-#define STR(x) __STR(x)
-
-#define INT_NAME(intnum) _KiUnexpectedInterrupt##intnum
 #define INT_NAME2(intnum) KiUnexpectedInterrupt##intnum
 
-#define BUILD_COMMON_INTERRUPT_HANDLER() \
-__asm__( \
-  "_KiCommonInterrupt:\n\t" \
-  "cld\n\t" \
-  "pushl %ds\n\t" \
-  "pushl %es\n\t" \
-  "pushl %fs\n\t" \
-  "pushl %gs\n\t" \
-  "movl	$0xceafbeef,%eax\n\t" \
-  "pushl %eax\n\t" \
-  "movl	$" STR(KERNEL_DS) ",%eax\n\t" \
-  "movl	%eax,%ds\n\t" \
-  "movl	%eax,%es\n\t" \
-  "movl %eax,%gs\n\t" \
-  "movl	$" STR(PCR_SELECTOR) ",%eax\n\t" \
-  "movl	%eax,%fs\n\t" \
-  "pushl %esp\n\t" \
-  "pushl %ebx\n\t" \
-  "call	_KiInterruptDispatch\n\t" \
-  "addl	$0xC, %esp\n\t" \
-  "popl	%gs\n\t" \
-  "popl	%fs\n\t" \
-  "popl	%es\n\t" \
-  "popl	%ds\n\t" \
-  "popa\n\t" \
-  "iret\n\t");
-
 #define BUILD_INTERRUPT_HANDLER(intnum) \
-VOID INT_NAME2(intnum)(VOID); \
-__asm__( \
-  STR(INT_NAME(intnum)) ":\n\t" \
-  "pusha\n\t" \
-  "movl $0x" STR(intnum) ",%ebx\n\t" \
-  "jmp _KiCommonInterrupt");
+VOID INT_NAME2(intnum)(VOID);
 
-
-/* Interrupt handlers and declarations */
-
-#define B(x,y) \
+#define D(x,y) \
   BUILD_INTERRUPT_HANDLER(x##y)
 
-#define B16(x) \
-  B(x,0) B(x,1) B(x,2) B(x,3) \
-  B(x,4) B(x,5) B(x,6) B(x,7) \
-  B(x,8) B(x,9) B(x,A) B(x,B) \
-  B(x,C) B(x,D) B(x,E) B(x,F)
+#define D16(x) \
+  D(x,0) D(x,1) D(x,2) D(x,3) \
+  D(x,4) D(x,5) D(x,6) D(x,7) \
+  D(x,8) D(x,9) D(x,A) D(x,B) \
+  D(x,C) D(x,D) D(x,E) D(x,F)
 
+D16(3) D16(4) D16(5) D16(6)
+D16(7) D16(8) D16(9) D16(A)
+D16(B) D16(C) D16(D) D16(E)
+D16(F)
 
-BUILD_COMMON_INTERRUPT_HANDLER()
-B16(3) B16(4) B16(5) B16(6)
-B16(7) B16(8) B16(9) B16(A)
-B16(B) B16(C) B16(D) B16(E)
-B16(F)
-
-#undef B
-#undef B16
-
-
-/* Interrupt handler list */
-
 #define L(x,y) \
   (ULONG)& INT_NAME2(x##y)
 
@@ -111,45 +66,47 @@
 
 #undef L
 #undef L16
+#undef D
+#undef D16
 
 #else /* CONFIG_SMP */
 
- void irq_handler_0(void);
- void irq_handler_1(void);
- void irq_handler_2(void);
- void irq_handler_3(void);
- void irq_handler_4(void);
- void irq_handler_5(void);
- void irq_handler_6(void);
- void irq_handler_7(void);
- void irq_handler_8(void);
- void irq_handler_9(void);
- void irq_handler_10(void);
- void irq_handler_11(void);
- void irq_handler_12(void);
- void irq_handler_13(void);
- void irq_handler_14(void);
- void irq_handler_15(void);
+void irq_handler_0(void);
+void irq_handler_1(void);
+void irq_handler_2(void);
+void irq_handler_3(void);
+void irq_handler_4(void);
+void irq_handler_5(void);
+void irq_handler_6(void);
+void irq_handler_7(void);
+void irq_handler_8(void);
+void irq_handler_9(void);
+void irq_handler_10(void);
+void irq_handler_11(void);
+void irq_handler_12(void);
+void irq_handler_13(void);
+void irq_handler_14(void);
+void irq_handler_15(void);
 
 static unsigned int irq_handler[NR_IRQS]=
-        {
-                (int)&irq_handler_0,
-                (int)&irq_handler_1,
-                (int)&irq_handler_2,
-                (int)&irq_handler_3,
-                (int)&irq_handler_4,
-                (int)&irq_handler_5,
-                (int)&irq_handler_6,
-                (int)&irq_handler_7,
-                (int)&irq_handler_8,
-                (int)&irq_handler_9,
-                (int)&irq_handler_10,
-                (int)&irq_handler_11,
-                (int)&irq_handler_12,
-                (int)&irq_handler_13,
-                (int)&irq_handler_14,
-                (int)&irq_handler_15,
-        };
+{
+   (int)&irq_handler_0,
+   (int)&irq_handler_1,
+   (int)&irq_handler_2,
+   (int)&irq_handler_3,
+   (int)&irq_handler_4,
+   (int)&irq_handler_5,
+   (int)&irq_handler_6,
+   (int)&irq_handler_7,
+   (int)&irq_handler_8,
+   (int)&irq_handler_9,
+   (int)&irq_handler_10,
+   (int)&irq_handler_11,
+   (int)&irq_handler_12,
+   (int)&irq_handler_13,
+   (int)&irq_handler_14,
+   (int)&irq_handler_15,
+};
 
 #endif /* CONFIG_SMP */
 

Modified: trunk/reactos/ntoskrnl/ke/i386/irqhand.s
--- trunk/reactos/ntoskrnl/ke/i386/irqhand.s	2005-07-05 14:00:33 UTC (rev 16427)
+++ trunk/reactos/ntoskrnl/ke/i386/irqhand.s	2005-07-05 16:40:01 UTC (rev 16428)
@@ -1,6 +1,61 @@
 #include <ndk/i386/segment.h>
 #include <../hal/halx86/include/halirq.h>
 
+#ifdef CONFIG_SMP
+
+#define BUILD_INTERRUPT_HANDLER(intnum) \
+  .global _KiUnexpectedInterrupt##intnum; \
+  _KiUnexpectedInterrupt##intnum:; \
+  pusha; \
+  movl $0x##intnum, %ebx; \
+  jmp _KiCommonInterrupt;
+
+/* Interrupt handlers and declarations */
+
+#define B(x,y) \
+  BUILD_INTERRUPT_HANDLER(x##y)
+
+#define B16(x) \
+  B(x,0) B(x,1) B(x,2) B(x,3) \
+  B(x,4) B(x,5) B(x,6) B(x,7) \
+  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	$KERNEL_DS,%eax
+	movl	%eax,%ds
+	movl	%eax,%es
+	movl %eax,%gs
+	movl	$PCR_SELECTOR,%eax
+	movl	%eax,%fs
+	pushl %esp
+	pushl %ebx
+	call	_KiInterruptDispatch
+	addl	$0xC, %esp
[truncated at 1000 lines; 741 more skipped]