[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
This commit is contained in:
Elvina Yakubova 2022-07-06 08:19:22 +03:00
parent 484b4f3579
commit 35155a0716

View 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