浏览代码

Always inline the locks.

Andreas Kling 6 年之前
父节点
当前提交
b4da4e8fbd
共有 1 个文件被更改,包括 8 次插入7 次删除
  1. 8 7
      AK/Lock.h

+ 8 - 7
AK/Lock.h

@@ -26,16 +26,17 @@ static inline dword CAS(volatile dword* mem, dword newval, dword oldval)
         "cmpxchgl %2, %1"
         "cmpxchgl %2, %1"
         :"=a"(ret), "+m"(*mem)
         :"=a"(ret), "+m"(*mem)
         :"r"(newval), "0"(oldval)
         :"r"(newval), "0"(oldval)
-        :"memory");
+        :"cc", "memory");
     return ret;
     return ret;
 }
 }
 
 
+// FIXME: Rename to YieldingLock?
 class SpinLock {
 class SpinLock {
 public:
 public:
     SpinLock() { }
     SpinLock() { }
     ~SpinLock() { }
     ~SpinLock() { }
 
 
-    void lock(const char* func = nullptr)
+    ALWAYS_INLINE void lock(const char* func = nullptr)
     {
     {
         (void)func;
         (void)func;
 #ifdef DEBUG_LOCKS
 #ifdef DEBUG_LOCKS
@@ -56,7 +57,7 @@ public:
         }
         }
     }
     }
 
 
-    void unlock(const char* func = nullptr)
+    ALWAYS_INLINE void unlock(const char* func = nullptr)
     {
     {
         (void)func;
         (void)func;
         // barrier();
         // barrier();
@@ -79,10 +80,10 @@ private:
 
 
 class Locker {
 class Locker {
 public:
 public:
-    explicit Locker(SpinLock& l, const char* func) : m_lock(l), m_func(func) { lock(); }
-    ~Locker() { unlock(); }
-    void unlock() { m_lock.unlock(m_func); }
-    void lock() { m_lock.lock(m_func); }
+    ALWAYS_INLINE explicit Locker(SpinLock& l, const char* func) : m_lock(l), m_func(func) { lock(); }
+    ALWAYS_INLINE ~Locker() { unlock(); }
+    ALWAYS_INLINE void unlock() { m_lock.unlock(m_func); }
+    ALWAYS_INLINE void lock() { m_lock.lock(m_func); }
 
 
 private:
 private:
     SpinLock& m_lock;
     SpinLock& m_lock;