1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
// ==++==
//
//
// ==--==
#include "unixasmmacros.inc"
#include "asmconstants.h"
.syntax unified
.thumb
// ------------------------------------------------------------------
// Start of the writeable code region
LEAF_ENTRY JIT_PatchedCodeStart, _TEXT
bx lr
LEAF_END JIT_PatchedCodeStart, _TEXT
// ------------------------------------------------------------------
// Optimized TLS getters
LEAF_ENTRY GetTLSDummy, _TEXT
mov r0, #0
bx lr
LEAF_END GetTLSDummy, _TEXT
.align 4
LEAF_ENTRY ClrFlsGetBlock, _TEXT
// This will be overwritten at runtime with optimized ClrFlsGetBlock implementation
b C_FUNC(GetTLSDummy)
// Just allocate space that will be filled in at runtime
.space (TLS_GETTER_MAX_SIZE_ASM - 2)
LEAF_END ClrFlsGetBlock, _TEXT
// ------------------------------------------------------------------
// GC write barrier support.
//
// GC Write barriers are defined in asmhelpers.asm. The following functions are used to define
// patchable location where the write-barriers are copied over at runtime
LEAF_ENTRY JIT_PatchedWriteBarrierStart, _TEXT
LEAF_END JIT_PatchedWriteBarrierStart, _TEXT
// These write barriers are overwritten on the fly
// See ValidateWriteBarriers on how the sizes of these should be calculated
.align 4
LEAF_ENTRY JIT_WriteBarrier, _TEXT
.space (0x84)
LEAF_END_MARKED JIT_WriteBarrier, _TEXT
.align 4
LEAF_ENTRY JIT_CheckedWriteBarrier, _TEXT
.space (0x9C)
LEAF_END_MARKED JIT_CheckedWriteBarrier, _TEXT
.align 4
LEAF_ENTRY JIT_ByRefWriteBarrier, _TEXT
.space (0xA0)
LEAF_END_MARKED JIT_ByRefWriteBarrier , _TEXT
LEAF_ENTRY JIT_PatchedWriteBarrierLast, _TEXT
LEAF_END JIT_PatchedWriteBarrierLast, _TEXT
// ------------------------------------------------------------------
// End of the writeable code region
LEAF_ENTRY JIT_PatchedCodeLast, _TEXT
bx lr
LEAF_END JIT_PatchedCodeLast, _TEXT
|