From 1e24932c5f5badcca3125b9c4c0df2ac113532bf Mon Sep 17 00:00:00 2001 From: xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> Date: Wed, 3 Mar 2010 13:16:21 +0000 Subject: [PATCH] Suppressed Init_pointer, now useless. Improved printing of strings in generated .s git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1274 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- Makefile | 1 + arm/PrintAsm.ml | 18 +---------------- cfrontend/PrintCsyntax.ml | 4 ---- common/AST.v | 3 +-- common/Mem.v | 4 ---- powerpc/PrintAsm.ml | 42 ++++++++++++++++++++------------------- 6 files changed, 25 insertions(+), 47 deletions(-) diff --git a/Makefile b/Makefile index 856d7773e..c9a61d723 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,7 @@ COQEXEC=coqtop $(INCLUDES) -batch -load-vernac-source OCAMLBUILD=ocamlbuild OCB_OPTIONS=\ + -j 2 \ -no-hygiene \ -no-links \ -I extraction $(INCLUDES) diff --git a/arm/PrintAsm.ml b/arm/PrintAsm.ml index 25d9db2ef..64f8be2ed 100644 --- a/arm/PrintAsm.ml +++ b/arm/PrintAsm.ml @@ -459,8 +459,6 @@ let print_fundef oc (Coq_pair(name, defn)) = (* Data *) -let init_data_queue = ref [] - let print_init oc = function | Init_int8 n -> fprintf oc " .byte %ld\n" (camlint_of_coqint n) @@ -481,23 +479,9 @@ let print_init oc = function if n > 0l then fprintf oc " .space %ld\n" n | Init_addrof(symb, ofs) -> fprintf oc " .word %a\n" print_symb_ofs (symb, ofs) - | Init_pointer id -> - let lbl = new_label() in - fprintf oc " .word .L%d\n" lbl; - init_data_queue := (lbl, id) :: !init_data_queue let print_init_data oc id = - init_data_queue := []; - List.iter (print_init oc) id; - let rec print_remainder () = - match !init_data_queue with - | [] -> () - | (lbl, id) :: rem -> - init_data_queue := rem; - fprintf oc ".L%d:\n" lbl; - List.iter (print_init oc) id; - print_remainder() - in print_remainder() + List.iter (print_init oc) id let print_var oc (Coq_pair(Coq_pair(name, init_data), _)) = match init_data with diff --git a/cfrontend/PrintCsyntax.ml b/cfrontend/PrintCsyntax.ml index fa1d04825..0388c2eb1 100644 --- a/cfrontend/PrintCsyntax.ml +++ b/cfrontend/PrintCsyntax.ml @@ -383,10 +383,6 @@ let print_init p = function if ofs = 0l then fprintf p "&%s,@ " (extern_atom symb) else fprintf p "(void *)((char *)&%s + %ld),@ " (extern_atom symb) ofs - | Init_pointer id -> - match string_of_init id with - | None -> fprintf p "/* pointer to other init*/,@ " - | Some s -> fprintf p "%a,@ " print_escaped_string s let print_globvar p (Coq_pair(Coq_pair(id, init), ty)) = match init with diff --git a/common/AST.v b/common/AST.v index 13e84dd8f..2d2027602 100644 --- a/common/AST.v +++ b/common/AST.v @@ -91,8 +91,7 @@ Inductive init_data: Type := | Init_float32: float -> init_data | Init_float64: float -> init_data | Init_space: Z -> init_data - | Init_addrof: ident -> int -> init_data (**r address of symbol + offset *) - | Init_pointer: list init_data -> init_data. + | Init_addrof: ident -> int -> init_data. (**r address of symbol + offset *) (** Whole programs consist of: - a collection of function definitions (name and description); diff --git a/common/Mem.v b/common/Mem.v index 65108288d..252ee2911 100644 --- a/common/Mem.v +++ b/common/Mem.v @@ -571,9 +571,6 @@ Fixpoint contents_init_data (pos: Z) (id: list init_data) {struct id}: contentma | Init_addrof s n :: id' => (* Not handled properly yet *) contents_init_data (pos + 4) id' - | Init_pointer x :: id' => - (* Not handled properly yet *) - contents_init_data (pos + 4) id' end. Definition size_init_data (id: init_data) : Z := @@ -585,7 +582,6 @@ Definition size_init_data (id: init_data) : Z := | Init_float64 _ => 8 | Init_space n => Zmax n 0 | Init_addrof _ _ => 4 - | Init_pointer _ => 4 end. Definition size_init_data_list (id: list init_data): Z := diff --git a/powerpc/PrintAsm.ml b/powerpc/PrintAsm.ml index 8bf40a97d..10170f9e7 100644 --- a/powerpc/PrintAsm.ml +++ b/powerpc/PrintAsm.ml @@ -661,8 +661,6 @@ let record_extfun (Coq_pair(name, defn)) = if function_needs_stub name then stubbed_functions := IdentSet.add name !stubbed_functions -let init_data_queue = ref [] - let print_init oc = function | Init_int8 n -> fprintf oc " .byte %ld\n" (camlint_of_coqint n) @@ -684,23 +682,27 @@ let print_init oc = function | Init_addrof(symb, ofs) -> fprintf oc " .long %a\n" symbol_offset (symb, camlint_of_coqint ofs) - | Init_pointer id -> - let lbl = new_label() in - fprintf oc " .long %a\n" label lbl; - init_data_queue := (lbl, id) :: !init_data_queue - -let print_init_data oc id = - init_data_queue := []; - List.iter (print_init oc) id; - let rec print_remainder () = - match !init_data_queue with - | [] -> () - | (lbl, id) :: rem -> - init_data_queue := rem; - fprintf oc "%a:\n" label lbl; - List.iter (print_init oc) id; - print_remainder() - in print_remainder() + +let print_init_char oc = function + | Init_int8 n -> + let c = Int32.to_int (camlint_of_coqint n) in + if c >= 32 && c <= 126 && c <> Char.code '\"' && c <> Char.code '\\' + then output_char oc (Char.chr c) + else fprintf oc "\\%03o" c + | _ -> + assert false + +let re_string_literal = Str.regexp "__stringlit_[0-9]+" + +let print_init_data oc name id = + if Str.string_match re_string_literal (extern_atom name) 0 + && List.for_all (function Init_int8 _ -> true | _ -> false) id + then begin + fprintf oc " .ascii \""; + List.iter (print_init_char oc) id; + fprintf oc "\"\n" + end else + List.iter (print_init oc) id let print_var oc (Coq_pair(Coq_pair(name, init_data), _)) = match init_data with @@ -721,7 +723,7 @@ let print_var oc (Coq_pair(Coq_pair(name, init_data), _)) = if not (C2Clight.atom_is_static name) then fprintf oc " .globl %a\n" symbol name; fprintf oc "%a:\n" symbol name; - print_init_data oc init_data + print_init_data oc name init_data let print_program oc p = stubbed_functions := IdentSet.empty; -- GitLab