File tree Expand file tree Collapse file tree 4 files changed +14
-8
lines changed Expand file tree Collapse file tree 4 files changed +14
-8
lines changed Original file line number Diff line number Diff line change @@ -669,7 +669,8 @@ DynamicHelper DynamicHelperFrameFlags_ObjectArg | DynamicHelperFrameFlags_Object
669669
670670LEAF_ENTRY JIT_GetDynamicNonGCStaticBase_SingleAppDomain , _TEXT
671671 // If class is not initialized , bail to C ++ helper
672- ldr x1 , [ x0 , #OFFSETOF__DynamicStaticsInfo__m_pNonGCStatics ]
672+ add x1 , x0 , #OFFSETOF__DynamicStaticsInfo__m_pNonGCStatics
673+ ldar x1 , [ x1 ]
673674 tbnz x1 , # 0 , LOCAL_LABEL(JIT_GetDynamicNonGCStaticBase_SingleAppDomain_CallHelper)
674675 mov x0 , x1
675676 ret lr
@@ -684,7 +685,8 @@ LEAF_END JIT_GetDynamicNonGCStaticBase_SingleAppDomain, _TEXT
684685
685686LEAF_ENTRY JIT_GetDynamicGCStaticBase_SingleAppDomain , _TEXT
686687 // If class is not initialized , bail to C ++ helper
687- ldr x1 , [ x0 , #OFFSETOF__DynamicStaticsInfo__m_pGCStatics ]
688+ add x1 , x0 , #OFFSETOF__DynamicStaticsInfo__m_pGCStatics
689+ ldar x1 , [ x1 ]
688690 tbnz x1 , # 0 , LOCAL_LABEL(JIT_GetDynamicGCStaticBase_SingleAppDomain_CallHelper)
689691 mov x0 , x1
690692 ret lr
Original file line number Diff line number Diff line change @@ -1029,7 +1029,8 @@ Fail
10291029
10301030 LEAF_ENTRY JIT_GetDynamicNonGCStaticBase_SingleAppDomain
10311031 ; If class is not initialized, bail to C++ helper
1032- ldr x1 , [ x0 , #OFFSETOF__DynamicStaticsInfo__m_pNonGCStatics ]
1032+ add x1 , x0 , #OFFSETOF__DynamicStaticsInfo__m_pNonGCStatics
1033+ ldar x1 , [ x1 ]
10331034 tbnz x1 , # 0 , CallHelper1
10341035 mov x0 , x1
10351036 ret lr
@@ -1043,7 +1044,8 @@ CallHelper1
10431044
10441045 LEAF_ENTRY JIT_GetDynamicGCStaticBase_SingleAppDomain
10451046 ; If class is not initialized, bail to C++ helper
1046- ldr x1 , [ x0 , #OFFSETOF__DynamicStaticsInfo__m_pGCStatics ]
1047+ add x1 , x0 , #OFFSETOF__DynamicStaticsInfo__m_pGCStatics
1048+ ldar x1 , [ x1 ]
10471049 tbnz x1 , # 0 , CallHelper2
10481050 mov x0 , x1
10491051 ret lr
Original file line number Diff line number Diff line change @@ -950,6 +950,7 @@ LEAF_END setFPReturn, _TEXT
950950LEAF_ENTRY JIT_GetDynamicNonGCStaticBase_SingleAppDomain, _TEXT
951951 // If class is not initialized, bail to C++ helper
952952 ld.d $a1, $a0, OFFSETOF__DynamicStaticsInfo__m_pNonGCStatics
953+ dbar 0
953954 bnez $a1, LOCAL_LABEL(JIT_GetDynamicNonGCStaticBase_SingleAppDomain_CallHelper)
954955 ori $a0, $a1, 0
955956 jirl $r0, $ra, 0
@@ -965,6 +966,7 @@ LEAF_END JIT_GetDynamicNonGCStaticBase_SingleAppDomain, _TEXT
965966LEAF_ENTRY JIT_GetDynamicGCStaticBase_SingleAppDomain, _TEXT
966967 // If class is not initialized, bail to C++ helper
967968 ld.d $a1, $a0, OFFSETOF__DynamicStaticsInfo__m_pGCStatics
969+ dbar 0
968970 bnez $a1, LOCAL_LABEL(JIT_GetDynamicGCStaticBase_SingleAppDomain_CallHelper)
969971 ori $a0, $a1, 0
970972 jirl $r0, $ra, 0
Original file line number Diff line number Diff line change @@ -598,12 +598,12 @@ struct DynamicStaticsInfo
598598 TADDR m_pGCStatics; // Always access through helper methods to properly handle the ISCLASSNOTINITED bit
599599 TADDR m_pNonGCStatics; // Always access through helper methods to properly handle the ISCLASSNOTINITED bit
600600 PTR_MethodTable m_pMethodTable;
601- PTR_OBJECTREF GetGCStaticsPointer () { TADDR staticsVal = VolatileLoadWithoutBarrier (&m_pGCStatics); return dac_cast<PTR_OBJECTREF>(staticsVal & STATICSPOINTERMASK); }
602- PTR_BYTE GetNonGCStaticsPointer () { TADDR staticsVal = VolatileLoadWithoutBarrier (&m_pNonGCStatics); return dac_cast<PTR_BYTE>(staticsVal & STATICSPOINTERMASK); }
601+ PTR_OBJECTREF GetGCStaticsPointer () { TADDR staticsVal = VolatileLoad (&m_pGCStatics); return dac_cast<PTR_OBJECTREF>(staticsVal & STATICSPOINTERMASK); }
602+ PTR_BYTE GetNonGCStaticsPointer () { TADDR staticsVal = VolatileLoad (&m_pNonGCStatics); return dac_cast<PTR_BYTE>(staticsVal & STATICSPOINTERMASK); }
603603 PTR_OBJECTREF GetGCStaticsPointerAssumeIsInited () { TADDR staticsVal = m_pGCStatics; _ASSERTE (staticsVal != 0 ); _ASSERTE ((staticsVal & (ISCLASSNOTINITEDMASK)) == 0 ); return dac_cast<PTR_OBJECTREF>(staticsVal); }
604604 PTR_BYTE GetNonGCStaticsPointerAssumeIsInited () { TADDR staticsVal = m_pNonGCStatics; _ASSERTE (staticsVal != 0 ); _ASSERTE ((staticsVal & (ISCLASSNOTINITEDMASK)) == 0 ); return dac_cast<PTR_BYTE>(staticsVal); }
605- bool GetIsInitedAndGCStaticsPointerIfInited (PTR_OBJECTREF *ptrResult) { TADDR staticsVal = VolatileLoadWithoutBarrier (&m_pGCStatics); *ptrResult = dac_cast<PTR_OBJECTREF>(staticsVal); return !(staticsVal & ISCLASSNOTINITED); }
606- bool GetIsInitedAndNonGCStaticsPointerIfInited (PTR_BYTE *ptrResult) { TADDR staticsVal = VolatileLoadWithoutBarrier (&m_pNonGCStatics); *ptrResult = dac_cast<PTR_BYTE>(staticsVal); return !(staticsVal & ISCLASSNOTINITED); }
605+ bool GetIsInitedAndGCStaticsPointerIfInited (PTR_OBJECTREF *ptrResult) { TADDR staticsVal = VolatileLoad (&m_pGCStatics); *ptrResult = dac_cast<PTR_OBJECTREF>(staticsVal); return !(staticsVal & ISCLASSNOTINITED); }
606+ bool GetIsInitedAndNonGCStaticsPointerIfInited (PTR_BYTE *ptrResult) { TADDR staticsVal = VolatileLoad (&m_pNonGCStatics); *ptrResult = dac_cast<PTR_BYTE>(staticsVal); return !(staticsVal & ISCLASSNOTINITED); }
607607
608608 // This function sets the pointer portion of a statics pointer. It returns false if the statics value was already set.
609609 bool InterlockedUpdateStaticsPointer (bool isGC, TADDR newVal, bool isClassInitedByUpdatingStaticPointer)
You can’t perform that action at this time.
0 commit comments