diff -r ead4d7bbf711 cpu-all.h
--- a/cpu-all.h	Tue May 30 13:32:07 2006 +0100
+++ b/cpu-all.h	Tue May 30 13:32:25 2006 +0100
@@ -820,6 +820,23 @@ int cpu_inl(CPUState *env, int addr);
 int cpu_inl(CPUState *env, int addr);
 #endif
 
+#if defined(__i386__) || defined(__x86_64__)
+static __inline__ void atomic_set_bit(long nr, volatile void *addr)
+{
+        __asm__ __volatile__(
+                "lock ; bts %1,%0"
+                :"=m" (*(volatile long *)addr)
+                :"dIr" (nr));
+}
+static __inline__ void atomic_clear_bit(long nr, volatile void *addr)
+{
+        __asm__ __volatile__(
+                "lock ; btr %1,%0"
+                :"=m" (*(volatile long *)addr)
+                :"dIr" (nr));
+}
+#endif
+
 /* memory API */
 
 extern uint64_t phys_ram_size;
