]> git.lizzy.rs Git - rust.git/commitdiff
libsyntax: Allow selecting intel style asm.
authorLuqman Aden <me@luqman.ca>
Wed, 27 Mar 2013 21:42:19 +0000 (14:42 -0700)
committerLuqman Aden <me@luqman.ca>
Wed, 27 Mar 2013 22:41:58 +0000 (15:41 -0700)
src/librustc/middle/trans/asm.rs
src/libsyntax/ast.rs
src/libsyntax/ext/asm.rs
src/libsyntax/fold.rs

index a658908f9781a8b9bb8e32f19f3a3ec5456276f4..5ad7299e1e54f48b552379bae760d95ae3e9a2af 100644 (file)
@@ -104,10 +104,15 @@ pub fn trans_inline_asm(bcx: block, ia: &ast::inline_asm) -> block {
         T_struct(outputs.map(|o| val_ty(*o)))
     };
 
+    let dialect = match ia.dialect {
+        ast::asm_att   => lib::llvm::AD_ATT,
+        ast::asm_intel => lib::llvm::AD_Intel
+    };
+
     let r = do str::as_c_str(*ia.asm) |a| {
         do str::as_c_str(constraints) |c| {
             // XXX: Allow selection of at&t or intel
-            InlineAsmCall(bcx, a, c, inputs, output, ia.volatile, ia.alignstack, lib::llvm::AD_ATT)
+            InlineAsmCall(bcx, a, c, inputs, output, ia.volatile, ia.alignstack, dialect)
         }
     };
 
index 05c5f447993d75cbdd0068df38549879caaa619e..c70288902a398afdebee853850503083788d11c9 100644 (file)
@@ -934,6 +934,14 @@ fn iter_bytes(&self, +lsb0: bool, f: to_bytes::Cb) {
     }
 }
 
+#[auto_encode]
+#[auto_decode]
+#[deriving(Eq)]
+pub enum asm_dialect {
+    asm_att,
+    asm_intel
+}
+
 #[auto_encode]
 #[auto_decode]
 #[deriving(Eq)]
@@ -943,7 +951,8 @@ pub struct inline_asm {
     inputs: ~[(@~str, @expr)],
     outputs: ~[(@~str, @expr)],
     volatile: bool,
-    alignstack: bool
+    alignstack: bool,
+    dialect: asm_dialect
 }
 
 #[auto_encode]
index c3faf4f1e09455094ce661d5bc2ccb990482865e..b070948d4059fb63ff3dd901cee6e0263fff2b0c 100644 (file)
@@ -53,6 +53,7 @@ pub fn expand_asm(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree])
     let mut cons = ~"";
     let mut volatile = false;
     let mut alignstack = false;
+    let mut dialect = ast::asm_att;
 
     let mut state = Asm;
     loop outer: {
@@ -125,6 +126,8 @@ pub fn expand_asm(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree])
                     volatile = true;
                 } else if option == ~"alignstack" {
                     alignstack = true;
+                } else if option == ~"intel" {
+                    dialect = ast::asm_intel;
                 }
 
                 if *p.token == token::COMMA {
@@ -169,7 +172,8 @@ pub fn expand_asm(cx: @ext_ctxt, sp: span, tts: &[ast::token_tree])
             inputs: inputs,
             outputs: outputs,
             volatile: volatile,
-            alignstack: alignstack
+            alignstack: alignstack,
+            dialect: dialect
         }),
         span: sp
     })
index 6ba629a24e1e4385da031374eb031604385238a3..e54c495323f4ef5c4c8d19fc788bfc98e9ee20ab 100644 (file)
@@ -561,12 +561,9 @@ fn fold_field_(field: field, fld: @ast_fold) -> field {
         }
         expr_inline_asm(a) => {
             expr_inline_asm(inline_asm {
-                asm: a.asm,
-                clobbers: a.clobbers,
                 inputs: a.inputs.map(|&(c, in)| (c, fld.fold_expr(in))),
                 outputs: a.outputs.map(|&(c, out)| (c, fld.fold_expr(out))),
-                volatile: a.volatile,
-                alignstack: a.alignstack
+                .. a
             })
         }
         expr_mac(ref mac) => expr_mac(fold_mac((*mac))),