Skip to content
Snippets Groups Projects
Commit c7943482 authored by xleroy's avatar xleroy
Browse files

Ajout d'un type-checker (non certifie) pour Cminor

git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@51 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
parent 28e9b3e7
No related branches found
No related tags found
No related merge requests found
(* A type-checker for Cminor *)
open Printf
open Datatypes
open CList
open Camlcoq
open AST
open Op
open Cminor
exception Error of string
let name_of_typ = function Tint -> "int" | Tfloat -> "float"
type ty = Base of typ | Var of ty option ref
let newvar () = Var (ref None)
let tint = Base Tint
let tfloat = Base Tfloat
let ty_of_typ = function Tint -> tint | Tfloat -> tfloat
let rec ty_of_sig_args = function
| Coq_nil -> []
| Coq_cons(t, l) -> ty_of_typ t :: ty_of_sig_args l
let rec repr t =
match t with
| Base _ -> t
| Var r -> match !r with None -> t | Some t' -> repr t'
let unify t1 t2 =
match (repr t1, repr t2) with
| Base b1, Base b2 ->
if b1 <> b2 then
raise (Error (sprintf "Expected type %s, actual type %s\n"
(name_of_typ b1) (name_of_typ b2)))
| Base b, Var r -> r := Some (Base b)
| Var r, Base b -> r := Some (Base b)
| Var r1, Var r2 -> r1 := Some (Var r2)
let unify_list l1 l2 =
let ll1 = List.length l1 and ll2 = List.length l2 in
if ll1 <> ll2 then
raise (Error (sprintf "Arity mismatch: expected %d, actual %d\n" ll1 ll2));
List.iter2 unify l1 l2
let type_var env id =
try
List.assoc id env
with Not_found ->
raise (Error (sprintf "Unbound variable %s\n" (extern_atom id)))
let type_letvar env n =
let n = camlint_of_nat n in
try
List.nth env n
with Not_found ->
raise (Error (sprintf "Unbound let variable #%d\n" n))
let name_of_comparison = function
| Ceq -> "eq"
| Cne -> "ne"
| Clt -> "lt"
| Cle -> "le"
| Cgt -> "gt"
| Cge -> "ge"
let type_condition = function
| Ccomp _ -> [tint;tint]
| Ccompu _ -> [tint;tint]
| Ccompimm _ -> [tint]
| Ccompuimm _ -> [tint]
| Ccompf _ -> [tfloat;tfloat]
| Cnotcompf _ -> [tfloat;tfloat]
| Cmaskzero _ -> [tint]
| Cmasknotzero _ -> [tint]
let name_of_condition = function
| Ccomp c -> sprintf "comp %s" (name_of_comparison c)
| Ccompu c -> sprintf "compu %s" (name_of_comparison c)
| Ccompimm(c, n) -> sprintf "compimm %s %ld" (name_of_comparison c) (camlint_of_coqint n)
| Ccompuimm(c, n) -> sprintf "compuimm %s %ld" (name_of_comparison c) (camlint_of_coqint n)
| Ccompf c -> sprintf "compf %s" (name_of_comparison c)
| Cnotcompf c -> sprintf "notcompf %s" (name_of_comparison c)
| Cmaskzero n -> sprintf "maskzero %ld" (camlint_of_coqint n)
| Cmasknotzero n -> sprintf "masknotzero %ld" (camlint_of_coqint n)
let type_operation = function
| Omove -> let v = newvar() in [v], v
| Ointconst _ -> [], tint
| Ofloatconst _ -> [], tfloat
| Oaddrsymbol _ -> [], tint
| Oaddrstack _ -> [], tint
| Oundef -> [], newvar()
| Ocast8signed -> [tint], tint
| Ocast16signed -> [tint], tint
| Oadd -> [tint;tint], tint
| Oaddimm _ -> [tint], tint
| Osub -> [tint;tint], tint
| Osubimm _ -> [tint], tint
| Omul -> [tint;tint], tint
| Omulimm _ -> [tint], tint
| Odiv -> [tint;tint], tint
| Odivu -> [tint;tint], tint
| Oand -> [tint;tint], tint
| Oandimm _ -> [tint], tint
| Oor -> [tint;tint], tint
| Oorimm _ -> [tint], tint
| Oxor -> [tint;tint], tint
| Oxorimm _ -> [tint], tint
| Onand -> [tint;tint], tint
| Onor -> [tint;tint], tint
| Onxor -> [tint;tint], tint
| Oshl -> [tint;tint], tint
| Oshr -> [tint;tint], tint
| Oshrimm _ -> [tint], tint
| Oshrximm _ -> [tint], tint
| Oshru -> [tint;tint], tint
| Orolm _ -> [tint], tint
| Onegf -> [tfloat], tfloat
| Oabsf -> [tfloat], tfloat
| Oaddf -> [tfloat;tfloat], tfloat
| Osubf -> [tfloat;tfloat], tfloat
| Omulf -> [tfloat;tfloat], tfloat
| Odivf -> [tfloat;tfloat], tfloat
| Omuladdf -> [tfloat;tfloat;tfloat], tfloat
| Omulsubf -> [tfloat;tfloat;tfloat], tfloat
| Osingleoffloat -> [tfloat], tfloat
| Ointoffloat -> [tfloat], tint
| Ofloatofint -> [tint], tfloat
| Ofloatofintu -> [tint], tfloat
| Ocmp c -> type_condition c, tint
let name_of_operation = function
| Omove -> "move"
| Ointconst n -> sprintf "intconst %ld" (camlint_of_coqint n)
| Ofloatconst n -> sprintf "floatconst %g" n
| Oaddrsymbol (s, ofs) -> sprintf "addrsymbol %s %ld" (extern_atom s) (camlint_of_coqint ofs)
| Oaddrstack n -> sprintf "addrstack %ld" (camlint_of_coqint n)
| Oundef -> "undef"
| Ocast8signed -> "cast8signed"
| Ocast16signed -> "cast16signed"
| Oadd -> "add"
| Oaddimm n -> sprintf "addimm %ld" (camlint_of_coqint n)
| Osub -> "sub"
| Osubimm n -> sprintf "subimm %ld" (camlint_of_coqint n)
| Omul -> "mul"
| Omulimm n -> sprintf "mulimm %ld" (camlint_of_coqint n)
| Odiv -> "div"
| Odivu -> "divu"
| Oand -> "and"
| Oandimm n -> sprintf "andimm %ld" (camlint_of_coqint n)
| Oor -> "or"
| Oorimm n -> sprintf "orimm %ld" (camlint_of_coqint n)
| Oxor -> "xor"
| Oxorimm n -> sprintf "xorimm %ld" (camlint_of_coqint n)
| Onand -> "nand"
| Onor -> "nor"
| Onxor -> "nxor"
| Oshl -> "shl"
| Oshr -> "shr"
| Oshrimm n -> sprintf "shrimm %ld" (camlint_of_coqint n)
| Oshrximm n -> sprintf "shrximm %ld" (camlint_of_coqint n)
| Oshru -> "shru"
| Orolm(n, m) -> sprintf "rolm %ld %ld" (camlint_of_coqint n) (camlint_of_coqint m)
| Onegf -> "negf"
| Oabsf -> "absf"
| Oaddf -> "addf"
| Osubf -> "subf"
| Omulf -> "mulf"
| Odivf -> "divf"
| Omuladdf -> "muladdf"
| Omulsubf -> "mulsubf"
| Osingleoffloat -> "singleoffloat"
| Ointoffloat -> "intoffloat"
| Ofloatofint -> "floatofint"
| Ofloatofintu -> "floatofintu"
| Ocmp c -> name_of_condition c
let type_addressing = function
| Aindexed _ -> [tint]
| Aindexed2 -> [tint;tint]
| Aglobal _ -> []
| Abased _ -> [tint]
| Ainstack _ -> []
let name_of_addressing = function
| Aindexed n -> sprintf "indexed %ld" (camlint_of_coqint n)
| Aindexed2 -> sprintf "indexed2"
| Aglobal(s, ofs) -> sprintf "global %s %ld" (extern_atom s) (camlint_of_coqint ofs)
| Abased(s, ofs) -> sprintf "based %s %ld" (extern_atom s) (camlint_of_coqint ofs)
| Ainstack n -> sprintf "instack %ld" (camlint_of_coqint n)
let type_chunk = function
| Mint8signed -> tint
| Mint8unsigned -> tint
| Mint16signed -> tint
| Mint16unsigned -> tint
| Mint32 -> tint
| Mfloat32 -> tfloat
| Mfloat64 -> tfloat
let name_of_chunk = function
| Mint8signed -> "int8signed"
| Mint8unsigned -> "int8unsigned"
| Mint16signed -> "int16signed"
| Mint16unsigned -> "int16unsigned"
| Mint32 -> "int32"
| Mfloat32 -> "float32"
| Mfloat64 -> "float64"
let rec type_expr env lenv e =
match e with
| Evar id ->
type_var env id
| Eassign(id, e1) ->
let tid = type_var env id in
let te1 = type_expr env lenv e1 in
begin try
unify tid te1
with Error s ->
raise (Error (sprintf "In assignment to %s:\n%s" (extern_atom id) s))
end;
tid
| Eop(op, el) ->
let tel = type_exprlist env lenv el in
let (targs, tres) = type_operation op in
begin try
unify_list targs tel
with Error s ->
raise (Error (sprintf "In application of operator %s:\n%s"
(name_of_operation op) s))
end;
tres
| Eload(chunk, addr, el) ->
let tel = type_exprlist env lenv el in
begin try
unify_list (type_addressing addr) tel
with Error s ->
raise (Error (sprintf "In load %s %s:\n%s"
(name_of_chunk chunk) (name_of_addressing addr) s))
end;
type_chunk chunk
| Estore(chunk, addr, el, e1) ->
let tel = type_exprlist env lenv el in
let te1 = type_expr env lenv e1 in
begin try
unify_list (type_addressing addr) tel;
unify (type_chunk chunk) te1
with Error s ->
raise (Error (sprintf "In store %s %s:\n%s"
(name_of_chunk chunk) (name_of_addressing addr) s))
end;
te1
| Ecall(sg, e1, el) ->
let te1 = type_expr env lenv e1 in
let tel = type_exprlist env lenv el in
begin try
unify tint te1;
unify_list (ty_of_sig_args sg.sig_args) tel
with Error s ->
raise (Error (sprintf "In call:\n%s" s))
end;
begin match sg.sig_res with
| None -> tint (*???*)
| Some t -> ty_of_typ t
end
| Econdition(e1, e2, e3) ->
type_condexpr env lenv e1;
let te2 = type_expr env lenv e2 in
let te3 = type_expr env lenv e3 in
begin try
unify te2 te3
with Error s ->
raise (Error (sprintf "In conditional expression:\n%s" s))
end;
te2
| Elet(e1, e2) ->
let te1 = type_expr env lenv e1 in
let te2 = type_expr env (te1 :: lenv) e2 in
te2
| Eletvar n ->
type_letvar lenv n
and type_exprlist env lenv el =
match el with
| Enil -> []
| Econs (e1, et) ->
let te1 = type_expr env lenv e1 in
let tet = type_exprlist env lenv et in
(te1 :: tet)
and type_condexpr env lenv ce =
match ce with
| CEtrue -> ()
| CEfalse -> ()
| CEcond(c, el) ->
let tel = type_exprlist env lenv el in
begin try
unify_list (type_condition c) tel
with Error s ->
raise (Error (sprintf "In condition %s:\n%s" (name_of_condition c) s))
end
| CEcondition(ce1, ce2, ce3) ->
type_condexpr env lenv ce1;
type_condexpr env lenv ce2;
type_condexpr env lenv ce3
let rec type_stmt env blk ret s =
match s with
| Sskip -> ()
| Sexpr e ->
ignore (type_expr env [] e)
| Sseq(s1, s2) ->
type_stmt env blk ret s1;
type_stmt env blk ret s2
| Sifthenelse(ce, s1, s2) ->
type_condexpr env [] ce;
type_stmt env blk ret s1;
type_stmt env blk ret s2
| Sloop s1 ->
type_stmt env blk ret s1
| Sblock s1 ->
type_stmt env (blk + 1) ret s1
| Sexit n ->
if camlint_of_nat n >= blk then
raise (Error (sprintf "Bad exit(%d)\n" (camlint_of_nat n)))
| Sswitch(e, cases, deflt) ->
unify (type_expr env [] e) tint
| Sreturn None ->
begin match ret with
| None -> ()
| Some tret -> raise (Error ("return without argument"))
end
| Sreturn (Some e) ->
begin match ret with
| None -> raise (Error "return with argument")
| Some tret ->
begin try
unify (type_expr env [] e) (ty_of_typ tret)
with Error s ->
raise (Error (sprintf "In return:\n%s" s))
end
end
let rec env_of_vars idl =
match idl with
| Coq_nil -> []
| Coq_cons(id1, idt) -> (id1, newvar()) :: env_of_vars idt
let type_function (Coq_pair (id, f)) =
try
type_stmt
(env_of_vars f.fn_vars @ env_of_vars f.fn_params)
0 f.fn_sig.sig_res f.fn_body
with Error s ->
raise (Error (sprintf "In function %s:\n%s" (extern_atom id) s))
let type_program p =
coqlist_iter type_function p.prog_funct; p
exception Error of string
val type_program: Cminor.program -> Cminor.program
...@@ -19,6 +19,10 @@ let camlint_of_z = function ...@@ -19,6 +19,10 @@ let camlint_of_z = function
let camlint_of_coqint : Integers.int -> int32 = camlint_of_z let camlint_of_coqint : Integers.int -> int32 = camlint_of_z
let rec camlint_of_nat = function
| O -> 0
| S n -> camlint_of_nat n + 1
let rec nat_of_camlint n = let rec nat_of_camlint n =
assert (n >= 0l); assert (n >= 0l);
if n = 0l then O else S (nat_of_camlint (Int32.sub n 1l)) if n = 0l then O else S (nat_of_camlint (Int32.sub n 1l))
...@@ -57,7 +61,7 @@ let extern_atom a = ...@@ -57,7 +61,7 @@ let extern_atom a =
try try
Hashtbl.find string_of_atom a Hashtbl.find string_of_atom a
with Not_found -> with Not_found ->
"<unknown atom>" Printf.sprintf "<unknown atom %ld>" (camlint_of_positive a)
(* Lists *) (* Lists *)
......
...@@ -6,7 +6,9 @@ let process_cminor_file sourcename = ...@@ -6,7 +6,9 @@ let process_cminor_file sourcename =
let ic = open_in sourcename in let ic = open_in sourcename in
let lb = Lexing.from_channel ic in let lb = Lexing.from_channel ic in
try try
match Main.transf_cminor_program (CMparser.prog CMlexer.token lb) with match Main.transf_cminor_program
(CMtypecheck.type_program
(CMparser.prog CMlexer.token lb)) with
| None -> | None ->
eprintf "Compiler failure\n"; eprintf "Compiler failure\n";
exit 2 exit 2
...@@ -22,6 +24,10 @@ let process_cminor_file sourcename = ...@@ -22,6 +24,10 @@ let process_cminor_file sourcename =
eprintf "File %s, character %d: %s\n" eprintf "File %s, character %d: %s\n"
sourcename (Lexing.lexeme_start lb) msg; sourcename (Lexing.lexeme_start lb) msg;
exit 2 exit 2
| CMtypecheck.Error msg ->
eprintf "File %s, type-checking error:\n%s"
sourcename msg;
exit 2
let process_file filename = let process_file filename =
if Filename.check_suffix filename ".cm" then if Filename.check_suffix filename ".cm" then
......
../caml/Allocationaux.cmi: Locations.cmi Datatypes.cmi ../caml/Allocationaux.cmi: Locations.cmi Datatypes.cmi
../caml/CMlexer.cmi: ../caml/CMparser.cmi ../caml/CMlexer.cmi: ../caml/CMparser.cmi
../caml/CMparser.cmi: Cminor.cmi AST.cmi ../caml/CMparser.cmi: Cminor.cmi AST.cmi
../caml/CMtypecheck.cmi: Cminor.cmi
../caml/Coloringaux.cmi: Registers.cmi RTLtyping.cmi RTL.cmi Locations.cmi \ ../caml/Coloringaux.cmi: Registers.cmi RTLtyping.cmi RTL.cmi Locations.cmi \
InterfGraph.cmi InterfGraph.cmi
../caml/PrintPPC.cmi: PPC.cmi ../caml/PrintPPC.cmi: PPC.cmi
...@@ -22,6 +23,10 @@ ...@@ -22,6 +23,10 @@
../caml/CMparser.cmx: Op.cmx Integers.cmx Datatypes.cmx Cminor.cmx \ ../caml/CMparser.cmx: Op.cmx Integers.cmx Datatypes.cmx Cminor.cmx \
Cmconstr.cmx ../caml/Camlcoq.cmx CList.cmx BinPos.cmx BinInt.cmx AST.cmx \ Cmconstr.cmx ../caml/Camlcoq.cmx CList.cmx BinPos.cmx BinInt.cmx AST.cmx \
../caml/CMparser.cmi ../caml/CMparser.cmi
../caml/CMtypecheck.cmo: Op.cmi Datatypes.cmi Cminor.cmi ../caml/Camlcoq.cmo \
CList.cmi AST.cmi ../caml/CMtypecheck.cmi
../caml/CMtypecheck.cmx: Op.cmx Datatypes.cmx Cminor.cmx ../caml/Camlcoq.cmx \
CList.cmx AST.cmx ../caml/CMtypecheck.cmi
../caml/Coloringaux.cmo: Registers.cmi RTLtyping.cmi RTL.cmi Maps.cmi \ ../caml/Coloringaux.cmo: Registers.cmi RTLtyping.cmi RTL.cmi Maps.cmi \
Locations.cmi InterfGraph.cmi Datatypes.cmi Conventions.cmi \ Locations.cmi InterfGraph.cmi Datatypes.cmi Conventions.cmi \
../caml/Camlcoq.cmo BinPos.cmi BinInt.cmi AST.cmi ../caml/Coloringaux.cmi ../caml/Camlcoq.cmo BinPos.cmi BinInt.cmi AST.cmi ../caml/Coloringaux.cmi
...@@ -31,9 +36,9 @@ ...@@ -31,9 +36,9 @@
../caml/Floataux.cmo: ../caml/Camlcoq.cmo AST.cmi ../caml/Floataux.cmo: ../caml/Camlcoq.cmo AST.cmi
../caml/Floataux.cmx: ../caml/Camlcoq.cmx AST.cmx ../caml/Floataux.cmx: ../caml/Camlcoq.cmx AST.cmx
../caml/Main2.cmo: ../caml/PrintPPC.cmi Main.cmi Datatypes.cmi \ ../caml/Main2.cmo: ../caml/PrintPPC.cmi Main.cmi Datatypes.cmi \
../caml/CMparser.cmi ../caml/CMlexer.cmi ../caml/CMtypecheck.cmi ../caml/CMparser.cmi ../caml/CMlexer.cmi
../caml/Main2.cmx: ../caml/PrintPPC.cmx Main.cmx Datatypes.cmx \ ../caml/Main2.cmx: ../caml/PrintPPC.cmx Main.cmx Datatypes.cmx \
../caml/CMparser.cmx ../caml/CMlexer.cmx ../caml/CMtypecheck.cmx ../caml/CMparser.cmx ../caml/CMlexer.cmx
../caml/PrintPPC.cmo: PPC.cmi Datatypes.cmi ../caml/Camlcoq.cmo CList.cmi \ ../caml/PrintPPC.cmo: PPC.cmi Datatypes.cmi ../caml/Camlcoq.cmo CList.cmi \
AST.cmi ../caml/PrintPPC.cmi AST.cmi ../caml/PrintPPC.cmi
../caml/PrintPPC.cmx: PPC.cmx Datatypes.cmx ../caml/Camlcoq.cmx CList.cmx \ ../caml/PrintPPC.cmx: PPC.cmx Datatypes.cmx ../caml/Camlcoq.cmx CList.cmx \
...@@ -54,8 +59,8 @@ Cmconstr.cmi: Specif.cmi Op.cmi Integers.cmi Datatypes.cmi Compare_dec.cmi \ ...@@ -54,8 +59,8 @@ Cmconstr.cmi: Specif.cmi Op.cmi Integers.cmi Datatypes.cmi Compare_dec.cmi \
Cminorgen.cmi: Zmin.cmi Specif.cmi Op.cmi Mem.cmi Maps.cmi Integers.cmi \ Cminorgen.cmi: Zmin.cmi Specif.cmi Op.cmi Mem.cmi Maps.cmi Integers.cmi \
Datatypes.cmi Csharpminor.cmi Coqlib.cmi Cminor.cmi Cmconstr.cmi \ Datatypes.cmi Csharpminor.cmi Coqlib.cmi Cminor.cmi Cmconstr.cmi \
CList.cmi BinPos.cmi BinInt.cmi AST.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi
Cminor.cmi: Values.cmi Op.cmi Maps.cmi Globalenvs.cmi Datatypes.cmi CList.cmi \ Cminor.cmi: Values.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \
BinInt.cmi AST.cmi Datatypes.cmi CList.cmi BinInt.cmi AST.cmi
Coloring.cmi: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \ Coloring.cmi: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \
Locations.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi Conventions.cmi \ Locations.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi Conventions.cmi \
CList.cmi BinInt.cmi AST.cmi CList.cmi BinInt.cmi AST.cmi
...@@ -121,8 +126,8 @@ PPC.cmi: Values.cmi Specif.cmi Mem.cmi Integers.cmi Globalenvs.cmi Floats.cmi \ ...@@ -121,8 +126,8 @@ PPC.cmi: Values.cmi Specif.cmi Mem.cmi Integers.cmi Globalenvs.cmi Floats.cmi \
Datatypes.cmi Coqlib.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi Datatypes.cmi Coqlib.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi
Registers.cmi: Specif.cmi Maps.cmi Datatypes.cmi Coqlib.cmi CList.cmi \ Registers.cmi: Specif.cmi Maps.cmi Datatypes.cmi Coqlib.cmi CList.cmi \
BinPos.cmi AST.cmi BinPos.cmi AST.cmi
RTLgen.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi Datatypes.cmi \ RTLgen.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi Integers.cmi \
Coqlib.cmi Cminor.cmi CList.cmi BinPos.cmi AST.cmi Datatypes.cmi Coqlib.cmi Cminor.cmi CList.cmi BinPos.cmi AST.cmi
RTL.cmi: Values.cmi Registers.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \ RTL.cmi: Values.cmi Registers.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \
Datatypes.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi Datatypes.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi
RTLtyping.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi Datatypes.cmi \ RTLtyping.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi Datatypes.cmi \
...@@ -178,10 +183,10 @@ Cminorgen.cmo: Zmin.cmi Specif.cmi Sets.cmi Op.cmi Mem.cmi Maps.cmi \ ...@@ -178,10 +183,10 @@ Cminorgen.cmo: Zmin.cmi Specif.cmi Sets.cmi Op.cmi Mem.cmi Maps.cmi \
Cminorgen.cmx: Zmin.cmx Specif.cmx Sets.cmx Op.cmx Mem.cmx Maps.cmx \ Cminorgen.cmx: Zmin.cmx Specif.cmx Sets.cmx Op.cmx Mem.cmx Maps.cmx \
Integers.cmx Datatypes.cmx Csharpminor.cmx Coqlib.cmx Cminor.cmx \ Integers.cmx Datatypes.cmx Csharpminor.cmx Coqlib.cmx Cminor.cmx \
Cmconstr.cmx CList.cmx BinPos.cmx BinInt.cmx AST.cmx Cminorgen.cmi Cmconstr.cmx CList.cmx BinPos.cmx BinInt.cmx AST.cmx Cminorgen.cmi
Cminor.cmo: Values.cmi Op.cmi Maps.cmi Globalenvs.cmi Datatypes.cmi CList.cmi \ Cminor.cmo: Values.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \
BinInt.cmi AST.cmi Cminor.cmi Datatypes.cmi CList.cmi BinInt.cmi AST.cmi Cminor.cmi
Cminor.cmx: Values.cmx Op.cmx Maps.cmx Globalenvs.cmx Datatypes.cmx CList.cmx \ Cminor.cmx: Values.cmx Op.cmx Maps.cmx Integers.cmx Globalenvs.cmx \
BinInt.cmx AST.cmx Cminor.cmi Datatypes.cmx CList.cmx BinInt.cmx AST.cmx Cminor.cmi
Coloring.cmo: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \ Coloring.cmo: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \
Locations.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi Conventions.cmi \ Locations.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi Conventions.cmi \
../caml/Coloringaux.cmi CList.cmi BinInt.cmi AST.cmi Coloring.cmi ../caml/Coloringaux.cmi CList.cmi BinInt.cmi AST.cmi Coloring.cmi
...@@ -337,11 +342,11 @@ Registers.cmo: Specif.cmi Sets.cmi Maps.cmi Datatypes.cmi Coqlib.cmi \ ...@@ -337,11 +342,11 @@ Registers.cmo: Specif.cmi Sets.cmi Maps.cmi Datatypes.cmi Coqlib.cmi \
Registers.cmx: Specif.cmx Sets.cmx Maps.cmx Datatypes.cmx Coqlib.cmx \ Registers.cmx: Specif.cmx Sets.cmx Maps.cmx Datatypes.cmx Coqlib.cmx \
CList.cmx BinPos.cmx AST.cmx Registers.cmi CList.cmx BinPos.cmx AST.cmx Registers.cmi
RTLgen.cmo: Specif.cmi Registers.cmi ../caml/RTLgenaux.cmo RTL.cmi Op.cmi \ RTLgen.cmo: Specif.cmi Registers.cmi ../caml/RTLgenaux.cmo RTL.cmi Op.cmi \
Maps.cmi Datatypes.cmi Coqlib.cmi Cminor.cmi CList.cmi BinPos.cmi AST.cmi \ Maps.cmi Integers.cmi Datatypes.cmi Coqlib.cmi Cminor.cmi CList.cmi \
RTLgen.cmi BinPos.cmi AST.cmi RTLgen.cmi
RTLgen.cmx: Specif.cmx Registers.cmx ../caml/RTLgenaux.cmx RTL.cmx Op.cmx \ RTLgen.cmx: Specif.cmx Registers.cmx ../caml/RTLgenaux.cmx RTL.cmx Op.cmx \
Maps.cmx Datatypes.cmx Coqlib.cmx Cminor.cmx CList.cmx BinPos.cmx AST.cmx \ Maps.cmx Integers.cmx Datatypes.cmx Coqlib.cmx Cminor.cmx CList.cmx \
RTLgen.cmi BinPos.cmx AST.cmx RTLgen.cmi
RTL.cmo: Values.cmi Registers.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \ RTL.cmo: Values.cmi Registers.cmi Op.cmi Maps.cmi Integers.cmi Globalenvs.cmi \
Datatypes.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi RTL.cmi Datatypes.cmi CList.cmi BinPos.cmi BinInt.cmi AST.cmi RTL.cmi
RTL.cmx: Values.cmx Registers.cmx Op.cmx Maps.cmx Integers.cmx Globalenvs.cmx \ RTL.cmx: Values.cmx Registers.cmx Op.cmx Maps.cmx Integers.cmx Globalenvs.cmx \
......
...@@ -20,7 +20,7 @@ FILES=\ ...@@ -20,7 +20,7 @@ FILES=\
Mach.ml Stacking.ml \ Mach.ml Stacking.ml \
PPC.ml PPCgen.ml \ PPC.ml PPCgen.ml \
Main.ml \ Main.ml \
../caml/CMparser.ml ../caml/CMlexer.ml \ ../caml/CMparser.ml ../caml/CMlexer.ml ../caml/CMtypecheck.ml \
../caml/PrintPPC.ml ../caml/Main2.ml ../caml/PrintPPC.ml ../caml/Main2.ml
EXTRACTEDFILES:=$(filter-out ../caml/%, $(FILES)) EXTRACTEDFILES:=$(filter-out ../caml/%, $(FILES))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment