From 8cc7e35dd0a625a3b883703387291739a148e8c8 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Tue, 27 Jun 2017 00:18:19 +0300 Subject: 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. --- src/vm/arm/asmconstants.h | 3 --- src/vm/arm/patchedcode.asm | 42 +++++++++--------------------------------- src/vm/arm/stubs.cpp | 4 ++-- 3 files changed, 11 insertions(+), 38 deletions(-) (limited to 'src/vm/arm') 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); -- cgit v1.2.3