Clang 不支持 Lock 前缀。我该如何解决?

发布于 2024-09-03 03:04:29 字数 237 浏览 8 评论 0原文

假设此代码:

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

Clang 编译器不支持锁前缀(还?)。我现在该怎么办?

Assume this code:

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

The Clang compiler doesn't support the lock prefix (yet?). What shall I do now?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫负雪 2024-09-10 03:04:29

集成汇编器不理解还不是单独语句的前缀。作为解决方法,您也可以仅添加“;” “锁定”之后。但正如其他评论指出的那样,您最好尽可能使用内置函数。

The integrated assembler doesn't understand prefixes which aren't separate statements yet. As a workaround, you can also just add a ';' after "lock". But as the other comment notes, you are better off using built-ins whenever possible.

月牙弯弯 2024-09-10 03:04:29

为什么不使用内置的...?

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

Why not use the built-ins...?

static inlint void inc(int64_t* atomic) {
   __sync_add_and_fetch_8(atomic, 1);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文