about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-01-31 16:36:10 +0800
committerGitHub <noreply@github.com>2018-01-31 16:36:10 +0800
commit6c0d5f5826ad3e8a67442d4976535b035a109c3f (patch)
treeed139c6233840169afc01a6ac62fbb76231454d6
parent33d175f74d588235751302a8dbb6350d893bbff0 (diff)
parentd8e4142bd442c53b6ddc79ea0dd2d90cf550462e (diff)
downloadrust-6c0d5f5826ad3e8a67442d4976535b035a109c3f.tar.gz
rust-6c0d5f5826ad3e8a67442d4976535b035a109c3f.zip
Rollup merge of #47875 - jcowgill:mips-clobber-at, r=rkruppe
rustc_trans: clobber $1 (aka $at) on mips

This copies what clang does. There is a long explanation as to why this is needed in the clang source (tools/clang/lib/Basic/Targets/Mips.h).
-rw-r--r--src/librustc_trans/asm.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/librustc_trans/asm.rs b/src/librustc_trans/asm.rs
index c7be0c4e67d..751f8148a2a 100644
--- a/src/librustc_trans/asm.rs
+++ b/src/librustc_trans/asm.rs
@@ -59,8 +59,9 @@ pub fn trans_inline_asm<'a, 'tcx>(
     // Default per-arch clobbers
     // Basically what clang does
     let arch_clobbers = match &bx.sess().target.target.arch[..] {
-        "x86" | "x86_64" => vec!["~{dirflag}", "~{fpsr}", "~{flags}"],
-        _                => Vec::new()
+        "x86" | "x86_64"  => vec!["~{dirflag}", "~{fpsr}", "~{flags}"],
+        "mips" | "mips64" => vec!["~{$1}"],
+        _                 => Vec::new()
     };
 
     let all_constraints =