在gcc中,我们可以使用asm volatile("":::"memory");
但是我在Rust inline asm文档中找不到类似于"memory"的选项。
有没有办法实现相似的功能呢?
在gcc中,我们可以使用asm volatile("":::"memory");
但是我在Rust inline asm文档中找不到类似于"memory"的选项。
有没有办法实现相似的功能呢?
options(nomem)
来选择退出。
例如:链接。pub unsafe fn no_nomem() {
std::arch::asm!("");
}
pub unsafe fn nomem() {
std::arch::asm!("", options(nomem));
}
LLVM IR:
define void @_ZN7example8no_nomem17h95b023e6c43118daE() unnamed_addr #0 !dbg !5 {
call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags},~{memory}"(), !dbg !10, !srcloc !11
br label %bb1, !dbg !10
bb1: ; preds = %start
ret void, !dbg !12
}
define void @_ZN7example5nomem17hc75cf2d808290004E() unnamed_addr #0 !dbg !13 {
call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags}"() #1, !dbg !14, !srcloc !15
br label %bb1, !dbg !14
bb1: ; preds = %start
ret void, !dbg !16
}
没有nomem
的函数会发出~{memory}
屏障。