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
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