【发布时间】:2017-10-23 14:07:27
【问题描述】:
我有一个函数,Rust/LLVM 的优化失败并导致恐慌(在发布版本中),而未优化的代码(调试版本)工作正常。如果我比较生成的汇编代码,我什至无法理解优化器试图完成什么。 (一个原因可能是这个函数使用了内联汇编器。)
有什么方法可以告诉 Rust 在优化过程中不理会某些功能,还是我必须关闭所有优化?
具体功能如下:
#[naked]
pub extern "C" fn dispatch_svc(){
Cpu::save_context();
let mut nr: u32 = 0;
unsafe {
asm!("ldr r0, [lr, #-4]
bic $0, r0, #0xff000000":"=r"(nr)::"r0":"volatile")
};
swi_service_routine(nr);
Cpu::restore_context_and_return();
}
【问题讨论】:
-
“我有一个函数,Rust/llvm 的优化失败并导致恐慌”你能给我们看看吗?
-
@E_net4:我已经编辑了这个问题。但是,我会对最初的问题感兴趣,即使有一种巧妙的方法可以避免这个特定功能出现问题。
-
正如 Matthias 在 this comment 中解释的那样,问题是实现不受支持的调用约定的一部分。
标签: optimization rust llvm-codegen