@@ -21,19 +21,17 @@ use middle::trans::common::*;
2121use middle:: ty;
2222
2323use syntax:: ast;
24- use syntax:: ast:: * ;
2524
2625// Take an inline assembly expression and splat it out via LLVM
27- pub fn trans_inline_asm( bcx : block , asm : @~str , ins : & [ ( @~str , @expr) ] , outs : & [ ( @~str , @expr) ] ,
28- clobs : @~str , volatile : bool , alignstack : bool ) -> block {
26+ pub fn trans_inline_asm( bcx : block , ia : & ast:: inline_asm ) -> block {
2927
3028 let mut bcx = bcx;
3129 let mut constraints = ~[ ] ;
3230 let mut cleanups = ~[ ] ;
3331 let mut aoutputs = ~[ ] ;
3432
3533 // Prepare the output operands
36- let outputs = do outs . map |& ( c, out) | {
34+ let outputs = do ia . outputs . map |& ( c, out) | {
3735 constraints. push ( copy * c) ;
3836
3937 let aoutty = ty:: arg {
@@ -66,7 +64,7 @@ pub fn trans_inline_asm(bcx: block, asm: @~str, ins: &[(@~str, @expr)], outs: &[
6664 cleanups.clear();
6765
6866 // Now the input operands
69- let inputs = do ins .map |&(c, in)| {
67+ let inputs = do ia.inputs .map |&(c, in)| {
7068 constraints.push(copy *c);
7169
7270 let inty = ty::arg {
@@ -87,10 +85,10 @@ pub fn trans_inline_asm(bcx: block, asm: @~str, ins: &[(@~str, @expr)], outs: &[
8785 let mut constraints = str::connect(constraints, " , ");
8886
8987 // Add the clobbers to our constraints list
90- if *clobs != ~" " && constraints != ~" " {
91- constraints += ~" , " + *clobs ;
88+ if *ia.clobbers != ~" " && constraints != ~" " {
89+ constraints += ~" , " + *ia.clobbers ;
9290 } else {
93- constraints += *clobs ;
91+ constraints += *ia.clobbers ;
9492 }
9593
9694 debug!(" Asm Constraints : %?" , constraints) ;
@@ -106,10 +104,10 @@ pub fn trans_inline_asm(bcx: block, asm: @~str, ins: &[(@~str, @expr)], outs: &[
106104 T_struct ( outputs. map ( |o| val_ty ( * o) ) )
107105 } ;
108106
109- let r = do str:: as_c_str ( * asm) |a| {
107+ let r = do str:: as_c_str ( * ia . asm ) |a| {
110108 do str:: as_c_str ( constraints) |c| {
111109 // XXX: Allow selection of at&t or intel
112- InlineAsmCall ( bcx, a, c, inputs, output, volatile, alignstack, lib:: llvm:: AD_ATT )
110+ InlineAsmCall ( bcx, a, c, inputs, output, ia . volatile , ia . alignstack , lib:: llvm:: AD_ATT )
113111 }
114112 } ;
115113
0 commit comments