static bool tsl(volatile bool & lock) {
  /*
  register bool old = 1;
  ASMV("xchg %0, %2" : "=a"(old): "a"(old), "m"(lock)); return old;
  */
  
  register bool old = lock;
  int *a = (int*)&lock;
  
  ASMV("bts %0, 0"
       :"=a" (a[0])
       :);
  
  return old;
}