diff options
author | Ruben Ayrapetyan <ruben-ayrapetyan@users.noreply.github.com> | 2017-06-27 00:18:19 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2017-06-26 14:18:19 -0700 |
commit | 8cc7e35dd0a625a3b883703387291739a148e8c8 (patch) | |
tree | 33ea4e95260aba8be3bc63f6ec789dea8c4a9bc0 /src/vm/arm | |
parent | 959dacc9f0b09eb9f8c418eabb1b9180ceb6f5ac (diff) | |
download | coreclr-8cc7e35dd0a625a3b883703387291739a148e8c8.tar.gz coreclr-8cc7e35dd0a625a3b883703387291739a148e8c8.tar.bz2 coreclr-8cc7e35dd0a625a3b883703387291739a148e8c8.zip |
Replace array type handle with method table in arguments of array allocation helpers (#12369)
* Remove direct usage of type handle in JIT_NewArr1, with except of retrieving template method table.
* Assert that array type descriptor is loaded when array object's method table is set.
* Pass template method tables instead of array type descriptors to array allocation helpers.
Diffstat (limited to 'src/vm/arm')
-rw-r--r-- | src/vm/arm/asmconstants.h | 3 | ||||
-rw-r--r-- | src/vm/arm/patchedcode.asm | 42 | ||||
-rw-r--r-- | src/vm/arm/stubs.cpp | 4 |
3 files changed, 11 insertions, 38 deletions
diff --git a/src/vm/arm/asmconstants.h b/src/vm/arm/asmconstants.h index 41597b2dbe..704fa28556 100644 --- a/src/vm/arm/asmconstants.h +++ b/src/vm/arm/asmconstants.h @@ -110,9 +110,6 @@ ASMCONSTANTS_C_ASSERT(SIZEOF__ArrayOfValueType == ObjSizeOf(ArrayBase)); #define ArrayBase__m_NumComponents 0x4 ASMCONSTANTS_C_ASSERT(ArrayBase__m_NumComponents == offsetof(ArrayBase, m_NumComponents)); -#define ArrayTypeDesc__m_TemplateMT 0x4 -ASMCONSTANTS_C_ASSERT(ArrayTypeDesc__m_TemplateMT == offsetof(ArrayTypeDesc, m_TemplateMT)); - #define ArrayTypeDesc__m_Arg 0x8 ASMCONSTANTS_C_ASSERT(ArrayTypeDesc__m_Arg == offsetof(ArrayTypeDesc, m_Arg)); diff --git a/src/vm/arm/patchedcode.asm b/src/vm/arm/patchedcode.asm index 2ef175ea56..9fdd60961d 100644 --- a/src/vm/arm/patchedcode.asm +++ b/src/vm/arm/patchedcode.asm @@ -63,17 +63,6 @@ $label TEXTAREA - MACRO - FIX_INDIRECTION $Reg, $label -#ifdef FEATURE_PREJIT - tst $Reg, #1 - beq $label - ldr $Reg, [$Reg, #-1] -$label -#endif - MEND - - ; ------------------------------------------------------------------ ; Start of the writeable code region LEAF_ENTRY JIT_PatchedCodeStart @@ -336,11 +325,11 @@ AllocFailed3 LEAF_END -; HCIMPL2(Object*, JIT_NewArr1, CORINFO_CLASS_HANDLE arrayTypeHnd_, INT_PTR size) +; HCIMPL2(Object*, JIT_NewArr1VC_MP_InlineGetThread, CORINFO_CLASS_HANDLE arrayMT, INT_PTR size) ;--------------------------------------------------------------------------- -; IN: r0: type descriptor which contains the (shared) array method table and the element type. +; IN: r0: a (shared) array method table, which contains the element type. ; IN: r1: number of array elements -;; OUT: r0: address of newly allocated string +;; OUT: r0: address of newly allocated object LEAF_ENTRY JIT_NewArr1VC_MP_InlineGetThread @@ -358,13 +347,8 @@ AllocFailed3 cmp r1, #MAX_FAST_ALLOCATE_ARRAY_VC_SIZE bhs OverSizedArray3 - ;load MethodTable from ArrayTypeDesc - ldr r3, [r0, #ArrayTypeDesc__m_TemplateMT - 2] - - FIX_INDIRECTION r3, label1 - ;get element size - stored in low 16bits of m_dwFlags - ldrh r12, [r3, #MethodTable__m_dwFlags] + ldrh r12, [r0, #MethodTable__m_dwFlags] ; getting size of object to allocate @@ -398,11 +382,7 @@ AllocFailed3 str r1, [r2, #ArrayBase__m_NumComponents] ;store methodtable - ldr r3, [r0, #ArrayTypeDesc__m_TemplateMT - 2] - - FIX_INDIRECTION r3, label2 - - str r3, [r2] + str r0, [r2] ;copy return value mov r0, r2 @@ -426,11 +406,11 @@ OverSizedArray3 -; HCIMPL2(Object*, JIT_NewArr1, CORINFO_CLASS_HANDLE arrayTypeHnd_, INT_PTR size) +; HCIMPL2(Object*, JIT_NewArr1OBJ_MP_InlineGetThread, CORINFO_CLASS_HANDLE arrayMT, INT_PTR size) ;--------------------------------------------------------------------------- -; IN: r0: type descriptor which contains the (shared) array method table and the element type. +; IN: r0: a (shared) array method table, which contains the element type. ; IN: r1: number of array elements -;; OUT: r0: address of newly allocated string +;; OUT: r0: address of newly allocated object LEAF_ENTRY JIT_NewArr1OBJ_MP_InlineGetThread @@ -466,11 +446,7 @@ OverSizedArray3 str r1, [r2, #ArrayBase__m_NumComponents] ;store methodtable - ldr r3, [r0, #ArrayTypeDesc__m_TemplateMT - 2] - - FIX_INDIRECTION r3, label3 - - str r3, [r2] + str r0, [r2] ;copy return value mov r0, r2 diff --git a/src/vm/arm/stubs.cpp b/src/vm/arm/stubs.cpp index 7cc937e99a..2e8bb19d49 100644 --- a/src/vm/arm/stubs.cpp +++ b/src/vm/arm/stubs.cpp @@ -2560,9 +2560,9 @@ static const LPVOID InlineGetThreadLocations[] = { //EXTERN_C Object* JIT_TrialAllocSFastMP(CORINFO_CLASS_HANDLE typeHnd_); Object* JIT_TrialAllocSFastMP(CORINFO_CLASS_HANDLE typeHnd_); -EXTERN_C Object* JIT_NewArr1OBJ_MP(CORINFO_CLASS_HANDLE arrayTypeHnd_, INT_PTR size); +EXTERN_C Object* JIT_NewArr1OBJ_MP(CORINFO_CLASS_HANDLE arrayMT, INT_PTR size); EXTERN_C Object* AllocateStringFastMP(CLR_I4 cch); -EXTERN_C Object* JIT_NewArr1VC_MP(CORINFO_CLASS_HANDLE arrayTypeHnd_, INT_PTR size); +EXTERN_C Object* JIT_NewArr1VC_MP(CORINFO_CLASS_HANDLE arrayMT, INT_PTR size); EXTERN_C Object* JIT_BoxFastMP(CORINFO_CLASS_HANDLE type, void* unboxedData); |