Implement instantiating and unboxing through portable stublinker code…#106
Implement instantiating and unboxing through portable stublinker code…#106davidwrighton merged 2 commits intodotnet:masterfrom davidwrighton:architecture_neutral_stubs_gen_and_cleanup
Conversation
… - Handle only the cases with register to register moves - Followon work to remove the old instantiating/unboxing stub infra (except for x86, x86 will remain special) - Shares abi processing logic with delegate shuffle thunk creation - Architecture specific logic is relatively simple - Do not permit use of HELPERREG in computed instantiating stubs - Fix GetArgLoc such that it works on all architectures and OS combinations Add a JIT stress test case for testing all of the various combinations - Use the same calling convention test architecture that was used as part of tail call work Rename secure delegates to wrapper delegates - Secure delegates are no longer a feature of the runtime - But the wrapper delegate lives on as a workaround for a weird detail of the ARM32 abi
| <DefineConstants Condition="'$(FeatureDefaultInterfaces)' == 'true'">$(DefineConstants);FEATURE_DEFAULT_INTERFACES</DefineConstants> | ||
| <DefineConstants Condition="'$(FeatureTypeEquivalence)' == 'true'">$(DefineConstants);FEATURE_TYPEEQUIVALENCE</DefineConstants> | ||
| <DefineConstants Condition="'$(FeatureBasicFreeze)' == 'true'">$(DefineConstants);FEATURE_BASICFREEZE</DefineConstants> | ||
| <DefineConstants Condition="'$(FeaturePortableShuffleThunks)' == 'true'">$(DefineConstants);FEATURE_PORTABLE_SHUFFLE_THUNKS</DefineConstants> |
There was a problem hiding this comment.
Nit: This is not really needed here. FEATURE_PORTABLE_SHUFFLE_THUNKS has no impact on anything implemented in C# and chances that it will ever have are pretty low. There are number of other FEATURE_XXX that are defined for cmake only.
| } | ||
|
|
||
| // Otherwise, must be an inner delegate of a SecureDelegate of an open virtual method. In that case, call base implementation | ||
| // Otherwise, must be an inner delegate of a WrapperDelegate of an open virtual method. In that case, call base implementation |
There was a problem hiding this comment.
| // Otherwise, must be an inner delegate of a WrapperDelegate of an open virtual method. In that case, call base implementation | |
| // Otherwise, must be an inner delegate of a wrapper delegate of an open virtual method. In that case, call base implementation |
src/coreclr/src/vm/frames.h
Outdated
| } | ||
|
|
||
| virtual Assembly *GetAssembly(); | ||
| virtual Assembly *GetAssembly() |
There was a problem hiding this comment.
Not needed anymore. And the base implementation does not need to be virtual anymore.
src/coreclr/src/vm/i386/cgencpu.h
Outdated
| #define ENREGISTERED_RETURNTYPE_INTEGER_MAXSIZE 4 | ||
| #define CALLDESCR_ARGREGS 1 // CallDescrWorker has ArgumentRegister parameter | ||
|
|
||
| #define NO_SHUFFLE_INSTANTIATINGSTUB 1 |
There was a problem hiding this comment.
Ah, no, that's a legacy of an old factoring of the FEATURE flags that was terrible. Let me delete that.
|
@davidwrighton is this worth running outerloop testing on? |
|
@jashook I've run outerloop before in the coreclr repo, and it found nothing, so I don't really want to run it more unless I have to. I have a small set of changes from Jan to incorporate, and then I'll run the normal CI again, and then merge the code. |
|
/azp list |
|
/azp run runtime-coreclr |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
@davidwrighton I have started collecting data on the merged commit. |
Add a JIT stress test case for testing all of the various combinations
Rename secure delegates to wrapper delegates