mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:36:11 +00:00
[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.
svn path=/trunk/; revision=45223
This commit is contained in:
parent
f4cdf7ef0f
commit
280c5bef1e
2 changed files with 46 additions and 1 deletions
|
@ -214,6 +214,7 @@ KiCheckForApcDelivery(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FORCEINLINE
|
||||
DECLSPEC_NORETURN
|
||||
KiDispatchException0Args(IN NTSTATUS Code,
|
||||
IN ULONG_PTR Address,
|
||||
IN PKTRAP_FRAME TrapFrame)
|
||||
|
@ -224,6 +225,7 @@ KiDispatchException0Args(IN NTSTATUS Code,
|
|||
|
||||
VOID
|
||||
FORCEINLINE
|
||||
DECLSPEC_NORETURN
|
||||
KiDispatchException1Args(IN NTSTATUS Code,
|
||||
IN ULONG_PTR Address,
|
||||
IN ULONG P1,
|
||||
|
@ -235,6 +237,7 @@ KiDispatchException1Args(IN NTSTATUS Code,
|
|||
|
||||
VOID
|
||||
FORCEINLINE
|
||||
DECLSPEC_NORETURN
|
||||
KiDispatchException2Args(IN NTSTATUS Code,
|
||||
IN ULONG_PTR Address,
|
||||
IN ULONG P1,
|
||||
|
@ -247,6 +250,7 @@ KiDispatchException2Args(IN NTSTATUS Code,
|
|||
|
||||
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 @@ KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame)
|
|||
[v] "i"(KTRAP_FRAME_ESP)
|
||||
: "%esp"
|
||||
);
|
||||
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 @@ KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame)
|
|||
[e] "i"(KTRAP_FRAME_EIP)
|
||||
: "%esp"
|
||||
);
|
||||
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 @@ KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame)
|
|||
[v] "i"(KTRAP_FRAME_V86_ES)
|
||||
: "%esp"
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
DECLSPEC_NORETURN
|
||||
KiTrapReturn(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Regular interrupt exit */
|
||||
|
@ -361,10 +371,12 @@ KiTrapReturn(IN PKTRAP_FRAME TrapFrame)
|
|||
[e] "i"(KTRAP_FRAME_EIP)
|
||||
: "%esp"
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
DECLSPEC_NORETURN
|
||||
KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Regular interrupt exit */
|
||||
|
@ -393,6 +405,7 @@ KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame)
|
|||
[e] "i"(KTRAP_FRAME_ERROR_CODE) /* We *WANT* the error code since ESP is there! */
|
||||
: "%esp"
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
|
|
@ -50,6 +50,7 @@ UCHAR KiTrapIoTable[] =
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiExitTrap(IN PKTRAP_FRAME TrapFrame,
|
||||
IN UCHAR Skip)
|
||||
{
|
||||
|
@ -235,6 +236,7 @@ KiExitV86Trap(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Disable interrupts until we return */
|
||||
|
@ -249,6 +251,7 @@ KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiServiceExit(IN PKTRAP_FRAME TrapFrame,
|
||||
IN NTSTATUS Status)
|
||||
{
|
||||
|
@ -267,6 +270,7 @@ KiServiceExit(IN PKTRAP_FRAME TrapFrame,
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiServiceExit2(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Disable interrupts until we return */
|
||||
|
@ -423,6 +427,7 @@ KiEnterTrap(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiSystemFatalException(IN ULONG ExceptionCode,
|
||||
IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
|
@ -437,6 +442,7 @@ KiSystemFatalException(IN ULONG ExceptionCode,
|
|||
|
||||
VOID
|
||||
NTAPI
|
||||
DECLSPEC_NORETURN
|
||||
KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code,
|
||||
IN ULONG_PTR Address,
|
||||
IN ULONG ParameterCount,
|
||||
|
@ -477,6 +483,7 @@ KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code,
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiDebugHandler(IN PKTRAP_FRAME TrapFrame,
|
||||
IN ULONG Parameter1,
|
||||
IN ULONG Parameter2,
|
||||
|
@ -500,6 +507,7 @@ KiDebugHandler(IN PKTRAP_FRAME TrapFrame,
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiNpxHandler(IN PKTRAP_FRAME TrapFrame,
|
||||
IN PKTHREAD Thread,
|
||||
IN PFX_SAVE_AREA SaveArea)
|
||||
|
@ -656,6 +664,7 @@ KiNpxHandler(IN PKTRAP_FRAME TrapFrame,
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap00Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -675,6 +684,7 @@ KiTrap00Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap01Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -694,6 +704,7 @@ KiTrap01Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
}
|
||||
|
||||
VOID
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap02(VOID)
|
||||
{
|
||||
PKTSS Tss, NmiTss;
|
||||
|
@ -840,6 +851,7 @@ KiTrap02(VOID)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap03Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -851,6 +863,7 @@ KiTrap03Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap04Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -870,6 +883,7 @@ KiTrap04Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap05Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -892,6 +906,7 @@ KiTrap05Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap06Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
PUCHAR Instruction;
|
||||
|
@ -937,6 +952,7 @@ KiTrap06Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap07Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
PKTHREAD Thread, NpxThread;
|
||||
|
@ -1046,6 +1062,7 @@ KiTrap07Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap08Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* FIXME: Not handled */
|
||||
|
@ -1054,6 +1071,7 @@ KiTrap08Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap09Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1066,6 +1084,7 @@ KiTrap09Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1080,6 +1099,7 @@ KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1092,6 +1112,7 @@ KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1104,6 +1125,7 @@ KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame,
|
||||
IN ULONG EFlags)
|
||||
{
|
||||
|
@ -1388,6 +1410,7 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame,
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
PKTHREAD Thread;
|
||||
|
@ -1510,6 +1533,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1520,9 +1544,9 @@ KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
KiSystemFatalException(EXCEPTION_RESERVED_TRAP, TrapFrame);
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap10Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
PKTHREAD Thread;
|
||||
|
@ -1550,6 +1574,7 @@ KiTrap10Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap11Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1562,6 +1587,7 @@ KiTrap11Handler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiTrap13Handler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
PKTHREAD Thread;
|
||||
|
@ -1664,6 +1690,7 @@ KiCallbackReturnHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1680,6 +1707,7 @@ KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Save trap frame */
|
||||
|
@ -1694,6 +1722,7 @@ KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame)
|
|||
|
||||
VOID
|
||||
FASTCALL
|
||||
DECLSPEC_NORETURN
|
||||
KiSystemCall(IN ULONG SystemCallNumber,
|
||||
IN PVOID Arguments)
|
||||
{
|
||||
|
@ -1784,6 +1813,7 @@ ExitCall:
|
|||
|
||||
VOID
|
||||
FORCEINLINE
|
||||
DECLSPEC_NORETURN
|
||||
KiSystemCallHandler(IN PKTRAP_FRAME TrapFrame,
|
||||
IN ULONG ServiceNumber,
|
||||
IN PVOID Arguments,
|
||||
|
@ -1825,6 +1855,7 @@ KiSystemCallHandler(IN PKTRAP_FRAME TrapFrame,
|
|||
|
||||
VOID
|
||||
__attribute__((regparm(3)))
|
||||
DECLSPEC_NORETURN
|
||||
KiFastCallEntryHandler(IN ULONG ServiceNumber,
|
||||
IN PVOID Arguments,
|
||||
IN PKTRAP_FRAME TrapFrame)
|
||||
|
@ -1858,6 +1889,7 @@ KiFastCallEntryHandler(IN ULONG ServiceNumber,
|
|||
|
||||
VOID
|
||||
__attribute__((regparm(3)))
|
||||
DECLSPEC_NORETURN
|
||||
KiSystemServiceHandler(IN ULONG ServiceNumber,
|
||||
IN PVOID Arguments,
|
||||
IN PKTRAP_FRAME TrapFrame)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue