librustc: add default per arch clobbers for asm.

This commit is contained in:
Luqman Aden 2013-03-27 15:37:28 -07:00
parent b867fe41de
commit 778f84524b

View file

@ -84,11 +84,18 @@ pub fn trans_inline_asm(bcx: block, ia: &ast::inline_asm) -> block {
let mut constraints = str::connect(constraints, ","); let mut constraints = str::connect(constraints, ",");
// Add the clobbers to our constraints list let mut clobbers = getClobbers();
if *ia.clobbers != ~"" && constraints != ~"" { if *ia.clobbers != ~"" && clobbers != ~"" {
constraints += ~"," + *ia.clobbers; clobbers = *ia.clobbers + ~"," + clobbers;
} else { } else {
constraints += *ia.clobbers; clobbers += *ia.clobbers;
};
// Add the clobbers to our constraints list
if clobbers != ~"" && constraints != ~"" {
constraints += ~"," + clobbers;
} else {
constraints += clobbers;
} }
debug!("Asm Constraints: %?", constraints); debug!("Asm Constraints: %?", constraints);
@ -131,3 +138,18 @@ pub fn trans_inline_asm(bcx: block, ia: &ast::inline_asm) -> block {
return bcx; return bcx;
} }
// Default per-arch clobbers
// Basically what clang does
#[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
fn getClobbers() -> ~str {
~""
}
#[cfg(target_arch = "x86")]
#[cfg(target_arch = "x86_64")]
fn getClobbers() -> ~str {
~"~{dirflag},~{fpsr},~{flags}"
}