|
13 | 13 | #include "tls.h"
|
14 | 14 | #include "asmconstants.h"
|
15 | 15 | #include "virtualcallstub.h"
|
| 16 | +#include "jitinterface.h" |
16 | 17 |
|
17 | 18 | #ifndef DACCESS_COMPILE
|
18 | 19 | //-----------------------------------------------------------------------
|
@@ -2004,20 +2005,29 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD
|
2004 | 2005 | END_DYNAMIC_HELPER_EMIT();
|
2005 | 2006 | }
|
2006 | 2007 |
|
2007 |
| -PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, CORINFO_RUNTIME_LOOKUP * pLookup) |
| 2008 | +PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, CORINFO_RUNTIME_LOOKUP * pLookup, DWORD dictionaryIndexAndSlot, Module * pModule) |
2008 | 2009 | {
|
2009 | 2010 | STANDARD_VM_CONTRACT;
|
2010 | 2011 |
|
| 2012 | + PCODE helperAddress = (pLookup->helper == CORINFO_HELP_RUNTIMEHANDLE_METHOD ? |
| 2013 | + GetEEFuncEntryPoint(JIT_GenericHandleMethodWithSlotAndModule) : |
| 2014 | + GetEEFuncEntryPoint(JIT_GenericHandleClassWithSlotAndModule)); |
| 2015 | + |
| 2016 | + GenericHandleArgs * pArgs = (GenericHandleArgs *)(void *)pAllocator->GetDynamicHelpersHeap()->AllocAlignedMem(sizeof(GenericHandleArgs), DYNAMIC_HELPER_ALIGNMENT); |
| 2017 | + pArgs->dictionaryIndexAndSlot = dictionaryIndexAndSlot; |
| 2018 | + pArgs->signature = pLookup->signature; |
| 2019 | + pArgs->module = (CORINFO_MODULE_HANDLE)pModule; |
| 2020 | + |
2011 | 2021 | // It's available only via the run-time helper function
|
2012 | 2022 | if (pLookup->indirections == CORINFO_USEHELPER)
|
2013 | 2023 | {
|
2014 | 2024 | BEGIN_DYNAMIC_HELPER_EMIT(32);
|
2015 | 2025 |
|
2016 | 2026 | // X0 already contains generic context parameter
|
2017 | 2027 | // reuse EmitHelperWithArg for below two operations
|
2018 |
| - // X1 <- pLookup->signature |
2019 |
| - // branch to pLookup->helper |
2020 |
| - EmitHelperWithArg(p, pAllocator, (TADDR)pLookup->signature, CEEJitInfo::getHelperFtnStatic(pLookup->helper)); |
| 2028 | + // X1 <- pArgs |
| 2029 | + // branch to helperAddress |
| 2030 | + EmitHelperWithArg(p, pAllocator, (TADDR)pArgs, helperAddress); |
2021 | 2031 |
|
2022 | 2032 | END_DYNAMIC_HELPER_EMIT();
|
2023 | 2033 | }
|
@@ -2104,9 +2114,9 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator,
|
2104 | 2114 | *(DWORD*)p = 0x91000120;
|
2105 | 2115 | p += 4;
|
2106 | 2116 | // reuse EmitHelperWithArg for below two operations
|
2107 |
| - // X1 <- pLookup->signature |
2108 |
| - // branch to pLookup->helper |
2109 |
| - EmitHelperWithArg(p, pAllocator, (TADDR)pLookup->signature, CEEJitInfo::getHelperFtnStatic(pLookup->helper)); |
| 2117 | + // X1 <- pArgs |
| 2118 | + // branch to helperAddress |
| 2119 | + EmitHelperWithArg(p, pAllocator, (TADDR)pArgs, helperAddress); |
2110 | 2120 | }
|
2111 | 2121 |
|
2112 | 2122 | // datalabel:
|
|
0 commit comments