summaryrefslogtreecommitdiff
path: root/src/vm/arm
diff options
context:
space:
mode:
authorRuben Ayrapetyan <ruben-ayrapetyan@users.noreply.github.com>2017-06-27 00:18:19 +0300
committerJan Kotas <jkotas@microsoft.com>2017-06-26 14:18:19 -0700
commit8cc7e35dd0a625a3b883703387291739a148e8c8 (patch)
tree33ea4e95260aba8be3bc63f6ec789dea8c4a9bc0 /src/vm/arm
parent959dacc9f0b09eb9f8c418eabb1b9180ceb6f5ac (diff)
downloadcoreclr-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.h3
-rw-r--r--src/vm/arm/patchedcode.asm42
-rw-r--r--src/vm/arm/stubs.cpp4
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);