From 35155a0716784c54b9d0113bce3f12c62af91a70 Mon Sep 17 00:00:00 2001 From: Elvina Yakubova Date: Wed, 6 Jul 2022 08:19:22 +0300 Subject: [PATCH] [BOLT] Change mutex implementation 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 | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/bolt/runtime/common.h b/bolt/runtime/common.h index f13cde9..b1e39e5 100644 --- a/bolt/runtime/common.h +++ b/bolt/runtime/common.h @@ -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 -- 2.7.4