- 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]