Author: sir_richard Date: Sun Jan 24 00:59:59 2010 New Revision: 45223
URL: http://svn.reactos.org/svn/reactos?rev=45223&view=rev Log: [PERF]: Make all trap handlers, trap exit code, fatal exit code, and exception dispatch code "no return" since it always leads to an iret or other kind of non-directly-returning mechanism. This allows the compiler to optimize better and also remove useless code at the bottom of the functions. Since __builtin_unreachable is only for GCC 4.5, we use exit(0) for now (it will never be reached) to trick GCC.
Modified: trunk/reactos/ntoskrnl/include/internal/trap_x.h trunk/reactos/ntoskrnl/ke/i386/traphdlr.c
Modified: trunk/reactos/ntoskrnl/include/internal/trap_x.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/t... ============================================================================== --- trunk/reactos/ntoskrnl/include/internal/trap_x.h [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/include/internal/trap_x.h [iso-8859-1] Sun Jan 24 00:59:59 2010 @@ -214,6 +214,7 @@
VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException0Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN PKTRAP_FRAME TrapFrame) @@ -224,6 +225,7 @@
VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException1Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG P1, @@ -235,6 +237,7 @@
VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException2Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG P1, @@ -247,6 +250,7 @@
FORCEINLINE VOID +DECLSPEC_NORETURN KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame) { /* Restore nonvolatiles, EAX, and do a "jump" back to the kernel caller */ @@ -272,10 +276,12 @@ [v] "i"(KTRAP_FRAME_ESP) : "%esp" ); -} - -FORCEINLINE -VOID + exit(0); +} + +FORCEINLINE +VOID +DECLSPEC_NORETURN KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit, but we only restore EAX as a volatile */ @@ -299,10 +305,12 @@ [e] "i"(KTRAP_FRAME_EIP) : "%esp" ); -} - -FORCEINLINE -VOID + exit(0); +} + +FORCEINLINE +VOID +DECLSPEC_NORETURN KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame) { /* Restore nonvolatiles, EAX, and do a SYSEXIT back to the user caller */ @@ -330,10 +338,12 @@ [v] "i"(KTRAP_FRAME_V86_ES) : "%esp" ); -} - -FORCEINLINE -VOID + exit(0); +} + +FORCEINLINE +VOID +DECLSPEC_NORETURN KiTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit */ @@ -361,10 +371,12 @@ [e] "i"(KTRAP_FRAME_EIP) : "%esp" ); -} - -FORCEINLINE -VOID + exit(0); +} + +FORCEINLINE +VOID +DECLSPEC_NORETURN KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit */ @@ -393,6 +405,7 @@ [e] "i"(KTRAP_FRAME_ERROR_CODE) /* We *WANT* the error code since ESP is there! */ : "%esp" ); + exit(0); }
NTSTATUS
Modified: trunk/reactos/ntoskrnl/ke/i386/traphdlr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/traphdlr.c... ============================================================================== --- trunk/reactos/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] Sun Jan 24 00:59:59 2010 @@ -50,6 +50,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiExitTrap(IN PKTRAP_FRAME TrapFrame, IN UCHAR Skip) { @@ -235,6 +236,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiEoiHelper(IN PKTRAP_FRAME TrapFrame) { /* Disable interrupts until we return */ @@ -249,6 +251,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiServiceExit(IN PKTRAP_FRAME TrapFrame, IN NTSTATUS Status) { @@ -267,6 +270,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiServiceExit2(IN PKTRAP_FRAME TrapFrame) { /* Disable interrupts until we return */ @@ -423,6 +427,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiSystemFatalException(IN ULONG ExceptionCode, IN PKTRAP_FRAME TrapFrame) { @@ -437,6 +442,7 @@
VOID NTAPI +DECLSPEC_NORETURN KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG ParameterCount, @@ -477,6 +483,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiDebugHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG Parameter1, IN ULONG Parameter2, @@ -500,6 +507,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiNpxHandler(IN PKTRAP_FRAME TrapFrame, IN PKTHREAD Thread, IN PFX_SAVE_AREA SaveArea) @@ -656,6 +664,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap00Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -675,6 +684,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap01Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -694,6 +704,7 @@ }
VOID +DECLSPEC_NORETURN KiTrap02(VOID) { PKTSS Tss, NmiTss; @@ -840,6 +851,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap03Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -851,6 +863,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap04Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -870,6 +883,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap05Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -892,6 +906,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap06Handler(IN PKTRAP_FRAME TrapFrame) { PUCHAR Instruction; @@ -937,6 +952,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap07Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread, NpxThread; @@ -1046,6 +1062,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap08Handler(IN PKTRAP_FRAME TrapFrame) { /* FIXME: Not handled */ @@ -1054,6 +1071,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap09Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1066,6 +1084,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1080,6 +1099,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1092,6 +1112,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1104,6 +1125,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG EFlags) { @@ -1388,6 +1410,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1510,6 +1533,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1520,9 +1544,9 @@ KiSystemFatalException(EXCEPTION_RESERVED_TRAP, TrapFrame); }
- -VOID -FASTCALL +VOID +FASTCALL +DECLSPEC_NORETURN KiTrap10Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1550,6 +1574,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap11Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1562,6 +1587,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiTrap13Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1664,6 +1690,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1680,6 +1707,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1694,6 +1722,7 @@
VOID FASTCALL +DECLSPEC_NORETURN KiSystemCall(IN ULONG SystemCallNumber, IN PVOID Arguments) { @@ -1784,6 +1813,7 @@
VOID FORCEINLINE +DECLSPEC_NORETURN KiSystemCallHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG ServiceNumber, IN PVOID Arguments, @@ -1825,6 +1855,7 @@
VOID __attribute__((regparm(3))) +DECLSPEC_NORETURN KiFastCallEntryHandler(IN ULONG ServiceNumber, IN PVOID Arguments, IN PKTRAP_FRAME TrapFrame) @@ -1858,6 +1889,7 @@
VOID __attribute__((regparm(3))) +DECLSPEC_NORETURN KiSystemServiceHandler(IN ULONG ServiceNumber, IN PVOID Arguments, IN PKTRAP_FRAME TrapFrame)