2

次のコードを想定します。

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

Clang コンパイラは lock プレフィックスをサポートしていません (まだ?)。私は今何をすべきですか?

4

2 に答える 2

5

統合アセンブラは、まだ個別のステートメントではない接頭辞を認識しません。回避策として、「;」を追加することもできます。「ロック」の後。ただし、他のコメントが指摘しているように、可能な限りビルトインを使用することをお勧めします。

于 2010-05-30T05:02:21.763 に答える
4

ビルトインを使用しないのはなぜですか...?

static inlint void inc(int64_t* atomic) {
   __sync_add_and_fetch_8(atomic, 1);
}
于 2010-05-29T17:59:58.190 に答える