|
6 | 6 | TEXTAREA |
7 | 7 |
|
8 | 8 | EXTERN RhpCidResolve |
9 | | - EXTERN RhpUniversalTransitionReturnResult |
| 9 | + EXTERN RhpUniversalTransitionTailCall |
10 | 10 |
|
11 | | - NESTED_ENTRY RhpResolveInterfaceMethodFast, _TEXT |
| 11 | + LEAF_ENTRY RhpResolveInterfaceMethodFast, _TEXT |
12 | 12 |
|
13 | 13 | ;; Load the MethodTable from the object instance in x0. |
14 | 14 | ;; Trigger an AV if we're dispatching on a null this. |
|
17 | 17 | ;; to a NullReferenceException at the callsite. |
18 | 18 | ldr x12, [x0] |
19 | 19 |
|
20 | | - ;; x11 currently contains the indirection cell address. |
21 | | - ;; load x13 to point to the cache block. |
22 | | - ldr x13, [x11, #OFFSETOF__InterfaceDispatchCell__m_pCache] |
23 | | - and x14, x13, #IDC_CACHE_POINTER_MASK |
24 | | - cbnz x14, RhpResolveInterfaceMethodFast_SlowPath |
25 | | - |
26 | | - add x14, x13, #OFFSETOF__InterfaceDispatchCache__m_rgEntries |
27 | | - ldr x15, [x14] |
28 | | - cmp x15, x12 |
29 | | - bne RhpResolveInterfaceMethodFast_Polymorphic |
30 | | - ldur x15, [x14, #8] |
31 | | - ret |
32 | | - |
33 | | -RhpResolveInterfaceMethodFast_Polymorphic |
34 | | - ldr w13, [x13, #OFFSETOF__InterfaceDispatchCache__m_cEntries] |
35 | | - |
36 | | -RhpResolveInterfaceMethodFast_NextEntry |
37 | | - add x14, x14, #SIZEOF__InterfaceDispatchCacheEntry |
38 | | - sub w13, w13, #1 |
39 | | - cmp w13, #0 |
40 | | - beq RhpResolveInterfaceMethodFast_SlowPath |
41 | | - |
42 | | - ldr x15, [x14] |
43 | | - cmp x15, x12 |
44 | | - bne RhpResolveInterfaceMethodFast_NextEntry |
45 | | - |
46 | | - ldur x15, [x14, #8] |
47 | | - ret |
48 | | - |
49 | 20 | RhpResolveInterfaceMethodFast_SlowPath |
50 | 21 | ldr xip0, =RhpCidResolve |
51 | 22 | mov xip1, x11 |
52 | | - b RhpUniversalTransitionReturnResult |
| 23 | + b RhpUniversalTransitionTailCall |
53 | 24 |
|
54 | | - NESTED_END RhpResolveInterfaceMethodFast |
| 25 | + LEAF_END RhpResolveInterfaceMethodFast |
55 | 26 |
|
56 | 27 | END |
0 commit comments