aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/StructReturn.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2015-04-28 11:21:59 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2015-04-28 11:21:59 +0200
commitb04bb783badb9051c62b26fb1858f916d0e4ccd0 (patch)
treec102a6ccdcfad8b4b3a76cffc2019742232a7cb3 /cparser/StructReturn.ml
parent3c6f5343e0e64b273658b6b3508a8dd6c29b8cef (diff)
downloadcompcert-b04bb783badb9051c62b26fb1858f916d0e4ccd0.tar.gz
compcert-b04bb783badb9051c62b26fb1858f916d0e4ccd0.zip
Extended inline asm: handle missing cases.
Bitfields: better translation of initializers and compound literals; run this pass before unblocking. Transform.stmt: extend with ability to treat unblocked code. test/regression: more bitfield tests.
Diffstat (limited to 'cparser/StructReturn.ml')
-rw-r--r--cparser/StructReturn.ml6
1 files changed, 5 insertions, 1 deletions
diff --git a/cparser/StructReturn.ml b/cparser/StructReturn.ml
index 8bfc6954..660f1d9b 100644
--- a/cparser/StructReturn.ml
+++ b/cparser/StructReturn.ml
@@ -423,6 +423,7 @@ let transf_decl env (sto, id, ty, init) =
let transf_funbody env body optres =
let transf_expr ctx e = transf_expr env ctx e in
+let transf_asm_operand (lbl, cstr, e) = (lbl, cstr, transf_expr Val e) in
(* Function returns:
return kind scalar -> return e
@@ -484,7 +485,10 @@ let rec transf_stmt s =
{s with sdesc = Sblock(List.map transf_stmt sl)}
| Sdecl d ->
{s with sdesc = Sdecl(transf_decl env d)}
- | Sasm _ -> s
+ | Sasm(attr, template, outputs, inputs, clob) ->
+ {s with sdesc = Sasm(attr, template,
+ List.map transf_asm_operand outputs,
+ List.map transf_asm_operand inputs, clob)}
in
transf_stmt body