-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Background
Over the past several releases, there has been a slow, but intentional, effort to move more runtime code from C++ into C#. A consequence of this effort has meant the removal of Helper Method Frames (HMF). Removal of HMFs simplifies the runtime for efforts like cDAC, reduces opportunities for GC holes, and in some cases can result in improved performance when the JIT can see more of the code that is can optimize.
Prior work
Below is a list of various PRs that can be referenced that demonstrate that effort across multiple authors and releases.
#70000, #70055, #71873, #87166, #95038, #96926, #97590, #100116, #101353, #106793, #107058, #107218, #107648, #108167, #109135, #109996, #110064, #110211, #110377, #110481, #110627, #110766
Remaining work
List of JIT helpers that need the removal of explicit HMFs:
-
JIT_GetFieldAddr_Framed
-
JIT_New
-
JIT_NewMaybeFrozen
-
FramedAllocateString
-
JIT_StrCns
-
JIT_NewArr1
-
JIT_NewArr1MaybeFrozen
-
JIT_NewMDArr
-
JIT_Box
-
JIT_GetRuntimeFieldStub
-
JIT_GetRuntimeMethodStub
-
JIT_GetRuntimeType_Framed
-
JIT_MonEnter_Helper
-
JIT_MonTryEnter_Helper
-
JIT_MonExit_Helper
-
JIT_MonExit_Signal
-
IL_Throw
-
IL_Rethrow
-
JIT_ThrowMethodAccessException
-
JIT_ThrowFieldAccessException
-
JIT_ThrowClassAccessException
-
JIT_UserBreakpoint
-
JIT_PollGC_Framed
-
JIT_PInvokeEndRarePath
-
JIT_RareDisableHelper
/JIT_RareDisableHelperWorker
-
JIT_StressGC
-
JIT_Patchpoint_Framed
-
JIT_PartialCompilationPatchpoint
List of JIT helpers with implicit HMFs through a use of FCThrow
.
-
JIT_Div
,JIT_Mod
,JIT_UDiv
,JIT_UMod
,JIT_LDiv
,JIT_LMod
,JIT_ULDiv
,JIT_ULMod
- Move arithmetic helpers to managed code #109087
The following clean-up can occur after all the above is complete: