Preserving ResolveCacheElem in X9
authorRama Krishnan Raghupathy <ramarag@microsoft.com>
Wed, 10 Aug 2016 22:02:35 +0000 (15:02 -0700)
committerRama Krishnan Raghupathy <ramarag@microsoft.com>
Wed, 10 Aug 2016 23:45:38 +0000 (16:45 -0700)
src/vm/arm64/asmconstants.h
src/vm/arm64/asmhelpers.asm

index 4edbbfc..87751d7 100644 (file)
@@ -147,5 +147,12 @@ ASMCONSTANTS_C_ASSERT(CONTEXT_Pc == offsetof(T_CONTEXT,Pc))
 ASMCONSTANTS_C_ASSERT(SIZEOF__FaultingExceptionFrame        == sizeof(FaultingExceptionFrame));
 ASMCONSTANTS_C_ASSERT(FaultingExceptionFrame__m_fFilterExecuted == offsetof(FaultingExceptionFrame, m_fFilterExecuted));
 
+#ifndef CROSSGEN_COMPILE
+#define ResolveCacheElem__target      0x10
+#define ResolveCacheElem__pNext       0x18
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__target == offsetof(ResolveCacheElem, target));
+ASMCONSTANTS_C_ASSERT(ResolveCacheElem__pNext == offsetof(ResolveCacheElem, pNext));
+#endif // CROSSGEN_COMPILE
+
 #undef ASMCONSTANTS_RUNTIME_ASSERT
 #undef ASMCONSTANTS_C_ASSERT
index 1369bd8..f6f4621 100644 (file)
@@ -1068,6 +1068,7 @@ FaultingExceptionFrame_FrameOffset        SETA  SIZEOF__GSCookie
 ;   x12       contains our contract the DispatchToken
 ; Must be preserved:
 ;   x0        contains the instance object ref that we are making an interface call on
+;   x9        Must point to a ResolveCacheElem [For Sanity]
 ;  [x1-x7]    contains any additional register arguments for the interface method
 ;
 ; Loaded from x0 
@@ -1093,7 +1094,7 @@ PROMOTE_CHAIN_FLAG  SETA  2
         
         ldr     x13, [x0]         ; retrieve the MethodTable from the object ref in x0
 MainLoop 
-        ldr     x9, [x9, #24]     ; x9 <= the next entry in the chain
+        ldr     x9, [x9, #ResolveCacheElem__pNext]     ; x9 <= the next entry in the chain
         cmp     x9, #0
         beq     Fail
 
@@ -1106,18 +1107,18 @@ MainLoop
         
 Success         
         ldr     x13, =g_dispatch_cache_chain_success_counter
-        ldr     x9, [x13]
-        subs    x9, x9, #1
-        str     x9, [x13]
+        ldr     x16, [x13]
+        subs    x16, x16, #1
+        str     x16, [x13]
         blt     Promote
 
-        ldr     x16, [x9, #16]    ; get the ImplTarget
+        ldr     x16, [x9, #ResolveCacheElem__target]    ; get the ImplTarget
         br      x16               ; branch to interface implemenation target
         
 Promote
                                   ; Move this entry to head postion of the chain
-        mov     x9, #256
-        str     x9, [x13]         ; be quick to reset the counter so we don't get a bunch of contending threads
+        mov     x16, #256
+        str     x16, [x13]         ; be quick to reset the counter so we don't get a bunch of contending threads
         orr     x11, x11, #PROMOTE_CHAIN_FLAG   ; set PROMOTE_CHAIN_FLAG 
 
 Fail