diff options
author | Gleb Balykov <g.balykov@samsung.com> | 2018-06-29 17:25:17 +0300 |
---|---|---|
committer | 이형주/Tizen Platform Lab(SR)/Staff Engineer/삼성전자 <leee.lee@samsung.com> | 2018-07-06 09:23:22 +0900 |
commit | 1f6ace8289c0b3c62d5ae21deb315470a51dafa3 (patch) | |
tree | e96ae03e68438ed59d7662d15781ded44f55703d /src/vm/method.hpp | |
parent | b192de29e9035467716c59187d774f2105c89521 (diff) | |
download | coreclr-1f6ace8289c0b3c62d5ae21deb315470a51dafa3.tar.gz coreclr-1f6ace8289c0b3c62d5ae21deb315470a51dafa3.tar.bz2 coreclr-1f6ace8289c0b3c62d5ae21deb315470a51dafa3.zip |
Remove relocations for vtable chunks (#17147)
* Separate sections READONLY_VCHUNKS and READONLY_DICTIONARY
* Remove relocations for second-level indirection of Vtable in case FEATURE_NGEN_RELOCS_OPTIMIZATIONS is enabled.
Introduce FEATURE_NGEN_RELOCS_OPTIMIZATIONS, under which NGEN specific relocations optimizations are enabled
* Replace push/pop of R11 in stubs with
- str/ldr of R4 in space reserved in epilog for non-tail calls
- usage of R4 with hybrid-tail calls (same as for EmitShuffleThunk)
* Replace push/pop of R11 for function epilog with usage of LR as helper register right before its restore from stack
Diffstat (limited to 'src/vm/method.hpp')
-rw-r--r-- | src/vm/method.hpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/vm/method.hpp b/src/vm/method.hpp index c1316d06c3..57258eb47c 100644 --- a/src/vm/method.hpp +++ b/src/vm/method.hpp @@ -1133,7 +1133,16 @@ public: } } - PTR_PCODE GetAddrOfSlot(); + inline BOOL IsVirtualSlot() + { + return GetSlot() < GetMethodTable()->GetNumVirtuals(); + } + inline BOOL IsVtableSlot() + { + return IsVirtualSlot() && !HasNonVtableSlot(); + } + + TADDR GetAddrOfSlot(); PTR_MethodDesc GetDeclMethodDesc(UINT32 slotNumber); @@ -2566,7 +2575,7 @@ public: }; // The writeable part of the methoddesc. -#if defined(PLATFORM_UNIX) && defined(_TARGET_ARM_) +#if defined(FEATURE_NGEN_RELOCS_OPTIMIZATIONS) RelativePointer<PTR_NDirectWriteableData> m_pWriteableData; #else PlainPointer<PTR_NDirectWriteableData> m_pWriteableData; @@ -3382,7 +3391,7 @@ public: // <TODO>make private: JITinterface.cpp accesses through this </TODO> // // For generic method definitions that are not the typical method definition (e.g. C<int>.m<U>) // this field is null; to obtain the instantiation use LoadMethodInstantiation -#if defined(PLATFORM_UNIX) && defined(_TARGET_ARM_) +#if defined(FEATURE_NGEN_RELOCS_OPTIMIZATIONS) RelativePointer<PTR_Dictionary> m_pPerInstInfo; //SHARED #else PlainPointer<PTR_Dictionary> m_pPerInstInfo; //SHARED |