写入内联 x86_64 程序集时,内联 asm 约束 'i' 的操作数无效
Invalid operand for inline asm constraint 'i' when writing inline x86_64 assembly
下面的代码在 4 月份(Rust 版本 ~1.6)时构建得很好,但现在不行了。
#![feature(asm)]
enum MyEnum { One = 1 }
fn main() {
unsafe {
asm!("nop" : : "i" (MyEnum::One as isize) : : ); // broken
}
}
错误消息并未指出可能导致此问题的任何明显变化。
"i"
约束的值必须是编译时常量,而您提供的不是编译时常量。如果将加法移动到 Rust 中,则可以使用寄存器以及使用约束 "ri"
.
的常量
为了内联汇编器的目的,某些东西是否是常量可能会受到优化选项的影响。
下面的代码在 4 月份(Rust 版本 ~1.6)时构建得很好,但现在不行了。
#![feature(asm)]
enum MyEnum { One = 1 }
fn main() {
unsafe {
asm!("nop" : : "i" (MyEnum::One as isize) : : ); // broken
}
}
错误消息并未指出可能导致此问题的任何明显变化。
"i"
约束的值必须是编译时常量,而您提供的不是编译时常量。如果将加法移动到 Rust 中,则可以使用寄存器以及使用约束 "ri"
.
为了内联汇编器的目的,某些东西是否是常量可能会受到优化选项的影响。