gpt4 book ai didi

c++ - 在 Android NDK 项目中使用内联 ARM asm

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:23 28 4
gpt4 key购买 nike

我正在使用 Android NDK 做一个小项目,我必须为 ARM 架构插入一些 asm 代码。

除了 asm 之外的一切都工作正常,但 asm 代码告诉我

Operand 1 should be an integer register

编译像这样的简单代码时

asm("mov r0, r0");


那么,问题是什么?我的计算机是否正在尝试针对 x86_64 而不是 ARM 进行编译?如果是这样,我应该如何更改它?

此外,我已经尝试了 x86_64 等效 arm("mov rax, rax"); 但错误是相同的。

最佳答案

您的所有 C 源代码都针对您的 APP_ABI 中提到的每个体系结构进行了编译。因此,毫无疑问为什么 x64 编译器无法理解 ARM 汇编,反之亦然。

不要使用内联汇编。最好将所有汇编内容放入专用的 *.S 源中,这将由 as 处理(NDK 工具链拥有它)。该程序集源应放置在适当的文件夹中,如 arch-arm/arch-x86/。然后你应该将它们正确地添加到 Android.mk 中:

LOCAL_SRC_FILES := arch-$(TARGET_ARCH)/my_awesome_code.S

$(TARGET_ARCH) 有助于以正确且轻松的方式解析到适当源的路径。

附言与内联汇编相比,独立汇编还为您提供了更多的能力。这是避免使用内联汇编的另一个原因。此外,内联汇编语法因编译器而异,因为它不是标准的一部分。

关于c++ - 在 Android NDK 项目中使用内联 ARM asm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com