aboutsummaryrefslogtreecommitdiffstats
path: root/ia32
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2015-04-17 16:30:43 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2015-04-17 16:30:43 +0200
commit1b5db339bb05f773a6a132be4c0b8cea54d50461 (patch)
tree5c7c767bc107eca66fdf6795777821572c5ec5af /ia32
parent3d751c114fe4611a5b72e160127be09cf6c6cfec (diff)
downloadcompcert-1b5db339bb05f773a6a132be4c0b8cea54d50461.tar.gz
compcert-1b5db339bb05f773a6a132be4c0b8cea54d50461.zip
Experiment: support a subset of GCC's extended asm statements.
Diffstat (limited to 'ia32')
-rw-r--r--ia32/CBuiltins.ml4
-rw-r--r--ia32/TargetPrinter.ml5
2 files changed, 7 insertions, 2 deletions
diff --git a/ia32/CBuiltins.ml b/ia32/CBuiltins.ml
index 765f5b18..b1be612b 100644
--- a/ia32/CBuiltins.ml
+++ b/ia32/CBuiltins.ml
@@ -70,3 +70,7 @@ let builtins = {
let size_va_list = 4
let va_list_scalar = true
+
+(* Expand memory references inside extended asm statements. Used in C2C. *)
+
+let asm_mem_argument arg = Printf.sprintf "0(%s)" arg
diff --git a/ia32/TargetPrinter.ml b/ia32/TargetPrinter.ml
index 58b7aa37..7e9471a5 100644
--- a/ia32/TargetPrinter.ml
+++ b/ia32/TargetPrinter.ml
@@ -871,9 +871,10 @@ module Target(System: SYSTEM):TARGET =
(Int32.to_int (camlint_of_coqint al)) args
| EF_annot_val(txt, targ) ->
print_annot_val oc (extern_atom txt) args res
- | EF_inline_asm txt ->
+ | EF_inline_asm(txt, sg) ->
fprintf oc "%s begin inline assembly\n" comment;
- fprintf oc " %s\n" (extern_atom txt);
+ fprintf oc "\t";
+ PrintAnnot.print_inline_asm preg oc (extern_atom txt) sg args res;
fprintf oc "%s end inline assembly\n" comment
| _ ->
assert false