Add memory fences to ByRefAssignRef on Unix ARM64 (#72919)
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Thu, 28 Jul 2022 00:19:57 +0000 (09:19 +0900)
committerGitHub <noreply@github.com>
Thu, 28 Jul 2022 00:19:57 +0000 (09:19 +0900)
src/coreclr/nativeaot/Runtime/arm/WriteBarriers.S
src/coreclr/nativeaot/Runtime/arm64/WriteBarriers.S

index 478561f..1db0dbd 100644 (file)
@@ -323,6 +323,9 @@ LEAF_END RhpCheckedXchg, _TEXT
 //      r2, r3: trashed
 //
 LEAF_ENTRY RhpByRefAssignRef, _TEXT
+          // See comment in RhpAssignRef
+          dmb
+
           ldr          r2, [r1]
           str          r2, [r0]
 
index 0aaa025..b027376 100644 (file)
@@ -361,13 +361,13 @@ LEAF_END RhpCheckedAssignRefArm64, _TEXT
 //   x17  : trashed (ip1) if FEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP
 //
 LEAF_ENTRY RhpByRefAssignRefArm64, _TEXT
-    ldr x15, [x13]
-    str x15, [x14]
+    ldr     x15, [x13]
+    stlr    x15, [x14]
 
     INSERT_CHECKED_WRITE_BARRIER_CORE x14, x15, 12, X15
 
-    add X13, x13, #8
-    add x14, x14, #8
+    add     X13, x13, #8
+    add     x14, x14, #8
 
     ret
 LEAF_END RhpByRefAssignRefArm64, _TEXT