Clang не поддерживает префикс блокировки. Как мне обойти? - PullRequest
2 голосов
/ 29 мая 2010

Примите этот код:

  static inline void inc(int64_t* atomic)
  {
    __asm__ __volatile__
    (
      "lock incq %0\n"
        : "=m" (*atomic)
        : "m" (*atomic)
    );
  }

Компилятор Clang не поддерживает префикс блокировки (пока?). Что мне теперь делать?

Ответы [ 2 ]

5 голосов
/ 30 мая 2010

Интегрированный ассемблер не понимает префиксы, которые еще не являются отдельными операторами. В качестве обходного пути вы также можете просто добавить «;» после "блокировки". Но, как отмечается в другом комментарии, вам лучше использовать встроенные модули, когда это возможно.

4 голосов
/ 29 мая 2010

Почему бы не использовать встроенные модули ...?

static inlint void inc(int64_t* atomic) {
   __sync_add_and_fetch_8(atomic, 1);
}
...