diff options
author | JUNG DONG-HEON <dheon.jung@samsung.com> | 2020-06-08 10:20:14 +0900 |
---|---|---|
committer | 이형주/Common Platform Lab(SR)/Staff Engineer/삼성전자 <leee.lee@samsung.com> | 2020-06-18 07:38:46 +0900 |
commit | 7d6fa13ce85654174b882c9e934c000dfd2222fe (patch) | |
tree | 46c473fdedd5747c2ad281170c0416407b74a503 /src/jit/morph.cpp | |
parent | 488be5d790020489f7f4dd7d43680f43b101dbd4 (diff) | |
download | coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.tar.gz coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.tar.bz2 coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.zip |
Implement instantiating and unboxing through portable stublinker code… (#106)
* Implement instantiating and unboxing through portable stublinker code
- Handle only the cases with register to register moves
- 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
Diffstat (limited to 'src/jit/morph.cpp')
-rw-r--r-- | src/jit/morph.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/jit/morph.cpp b/src/jit/morph.cpp index afdb3c9512..becb0bb215 100644 --- a/src/jit/morph.cpp +++ b/src/jit/morph.cpp @@ -2782,13 +2782,13 @@ void Compiler::fgInitArgInfo(GenTreeCall* call) } #endif // defined(_TARGET_X86_) || defined(_TARGET_ARM_) #if defined(_TARGET_ARM_) - // A non-standard calling convention using secure delegate invoke is used on ARM, only, but not for secure + // A non-standard calling convention using wrapper delegate invoke is used on ARM, only, for wrapper // delegates. It is used for VSD delegate calls where the VSD custom calling convention ABI requires passing // R4, a callee-saved register, with a special value. Since R4 is a callee-saved register, its value needs - // to be preserved. Thus, the VM uses a secure delegate IL stub, which preserves R4 and also sets up R4 - // correctly for the VSD call. The VM is simply reusing an existing mechanism (secure delegate IL stub) + // to be preserved. Thus, the VM uses a wrapper delegate IL stub, which preserves R4 and also sets up R4 + // correctly for the VSD call. The VM is simply reusing an existing mechanism (wrapper delegate IL stub) // to achieve its goal for delegate VSD call. See COMDelegate::NeedsWrapperDelegate() in the VM for details. - else if (call->gtCallMoreFlags & GTF_CALL_M_SECURE_DELEGATE_INV) + else if (call->gtCallMoreFlags & GTF_CALL_M_WRAPPER_DELEGATE_INV) { GenTree* arg = call->gtCallObjp; if (arg->OperIsLocal()) @@ -2805,7 +2805,7 @@ void Compiler::fgInitArgInfo(GenTreeCall* call) noway_assert(arg != nullptr); GenTree* newArg = new (this, GT_ADDR) - GenTreeAddrMode(TYP_BYREF, arg, nullptr, 0, eeGetEEInfo()->offsetOfSecureDelegateIndirectCell); + GenTreeAddrMode(TYP_BYREF, arg, nullptr, 0, eeGetEEInfo()->offsetOfWrapperDelegateIndirectCell); // Append newArg as the last arg GenTreeArgList** insertionPoint = &call->gtCallArgs; |