[BOLT] Change mutex implementation
authorElvina Yakubova <elvina.yakubova@huawei.com>
Wed, 6 Jul 2022 05:19:22 +0000 (08:19 +0300)
committerElvina Yakubova <elvina.yakubova@huawei.com>
Wed, 6 Jul 2022 05:19:54 +0000 (08:19 +0300)
Changed acquire implemetaion to __atomic_test_and_set() and release
to __atomic_clear() so it eliminates inline asm usage and is arch
independent.

Elvina Yakubova,
Advanced Software Technology Lab, Huawei

Reviewers: yota9, maksfb, rafauler

Differential Revision: https://reviews.llvm.org/D129162

bolt/runtime/common.h

index f13cde9..b1e39e5 100644 (file)
@@ -468,17 +468,12 @@ void assert(bool Assertion, const char *Msg) {
   reportError(Buf, Ptr - Buf);
 }
 
-/// 1B mutex accessed by lock xchg
 class Mutex {
   volatile bool InUse{false};
 
 public:
-  bool acquire() {
-    bool Result = true;
-    asm volatile("lock; xchg %0, %1" : "+m"(InUse), "=r"(Result) : : "cc");
-    return !Result;
-  }
-  void release() { InUse = false; }
+  bool acquire() { return !__atomic_test_and_set(&InUse, __ATOMIC_ACQUIRE); }
+  void release() { __atomic_clear(&InUse, __ATOMIC_RELEASE); }
 };
 
 /// RAII wrapper for Mutex