【问题标题】:Unknown register name "q0" in asm (arm64)asm(arm64)中的未知寄存器名称“q0”
【发布时间】:2013-11-14 17:26:17
【问题描述】:

我目前正在尝试为新的 arm64 架构编译我的库。我有一堆 NEON 组件,但我收到了一个错误

asm 中的未知寄存器名称“q0”。

即使我写得这么简单:

asm (
     ""
     :
     :
     : "q0", "q1", "q2", "q3"
     );

我认为 arm64 支持 NEON。我错过了什么吗?

【问题讨论】:

    标签: ios llvm xcode5 neon arm64


    【解决方案1】:

    “v0”:

    scanon$ cat bar.c
    int foo(void) {
      __asm__("":::"q0");
      return 0;
    }
    scanon$ xcrun -sdk iphoneos clang bar.c -arch arm64 -c
    bar.c:2:16: error: unknown register name 'q0' in asm
      __asm__("":::"q0");
                   ^
    1 error generated.
    scanon$ cat foo.c
    int foo(void) {
      __asm__("":::"v0");
      return 0;
    }
    scanon$ xcrun -sdk iphoneos clang foo.c -arch arm64 -c
    scanon$
    

    arm64 是一个新的 ISA。实际的 NEON 指令和寄存器布局是全新的。您将需要为新架构重新编写或调整汇编代码。

    【讨论】:

    • 请发布您正在编译的实际代码和完整的错误消息。然而,正如我所指出的,arm32 程序集需要针对 arm64 进行大量修改。
    • 我已经这样做了。一个带有clobber列表的空asm,错误是Asm中的未知寄存器名称“q0”
    • ……如果你使用“v0”而不是“q0”,就像我的回答一样?
    • (心理调试:)当 Xcode 尝试为 armv7(或 armv7s)构建您的 now-arm64 程序集时,您会收到“v0”错误。您需要为 arm32 和 arm64 单独组装。它们是不同的 ISA。
    • 这是您一直在寻找的。您可能需要在 ARM.com 上登录才能下载:silver.arm.com/download/ARM_and_AMBA_Architecture/…
    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多