我正在将一些旧的汇编代码移植到Rust,我需要通过asm!
宏调用它。然而,汇编代码依赖于存储在C头文件中的一些常量。我希望保持类似,在Rust中定义常量,并在asm
宏中拥有常量的名称。
传统C标头:
#define HCR_VALUE 0xffff0000
旧版ASM文件:
.func
...
ldr x0, =HCR_VALUE
...
rust eclipse 代码:
一个二个一个一个
构建应用程序时会出现链接器错误:
lld-link: error: undefined symbol: HCR_VALUE
2条答案
按热度按时间gg0vcinb1#
您需要使用适当的约束传递常量,如下所示:
正确的约束取决于体系结构;在RISCCPU上,不是所有的常量都可以表示为立即数。2所以你可能不得不使用寄存器约束,并让LLVM在那里具体化常量。
vhmi4jdf2#
当前的答案
asm
样式已经过时了,取而代之的是一种更像rustacean的语法。然而,汇编上的常量仍然隐藏在一个特性标志后面,并且如果我没记错的话,只在nightly中使用。只需在主文件的顶部添加#![feature(asm_const)]
就可以使用这个惊人的特性。更多信息请参见this issue
或者没有常数
这可能会产生与上面相同的编译结果。