source: src/ERTLptr/ERTLtoERTLptr.ma @ 2592

Last change on this file since 2592 was 2592, checked in by piccolo, 7 years ago

main lemma of ERTLptr in place

File size: 4.2 KB
Line 
1(**************************************************************************)
2(*       ___                                                              *)
3(*      ||M||                                                             *)
4(*      ||A||       A project by Andrea Asperti                           *)
5(*      ||T||                                                             *)
6(*      ||I||       Developers:                                           *)
7(*      ||T||         The HELM team.                                      *)
8(*      ||A||         http://helm.cs.unibo.it                             *)
9(*      \   /                                                             *)
10(*       \ /        This file is distributed under the terms of the       *)
11(*        v         GNU General Public License Version 2                  *)
12(*                                                                        *)
13(**************************************************************************)
14
15include "ERTL/ERTL.ma".
16include "ERTLptr/ERTLptr.ma".
17include "joint/TranslateUtils.ma".
18 
19definition translate_step_seq :
20∀globals.(joint_seq ERTL globals) → (joint_seq ERTLptr globals) ≝
21λglobals,s.
22match s with
23[COMMENT s ⇒ COMMENT ERTLptr … s
24|COST_LABEL c ⇒ COST_LABEL ERTLptr … c
25|MOVE a  ⇒ MOVE ERTLptr … a
26|POP a ⇒ POP ERTLptr … a
27|PUSH a ⇒ PUSH ERTLptr … a
28|ADDRESS i H reg1 reg2 ⇒ ADDRESS ERTLptr … i H reg1 reg2
29|OPACCS op reg1 reg2 reg3 reg4 ⇒ OPACCS ERTLptr … op reg1 reg2 reg3 reg4
30|OP1 op reg1 reg2 ⇒ OP1 ERTLptr … op reg1 reg2
31|OP2 op reg1 reg2 arg ⇒ OP2 ERTLptr … op reg1 reg2 arg
32|CLEAR_CARRY ⇒ CLEAR_CARRY ERTLptr ?
33|SET_CARRY ⇒ SET_CARRY ERTLptr ?
34|LOAD reg1 reg2 reg3 ⇒ LOAD ERTLptr … reg1 reg2 reg3
35|STORE arg1 arg2 reg ⇒ STORE ERTLptr … arg1 arg2 reg
36|extension_seq s ⇒ extension_seq ERTLptr … (ertlptr_ertl s)
37].
38
39
40(* PAOLO: implement the b_graph_translate2 that expects functions that
41   return not (list instr * instr) but (list (label → instr) * instr) *)
42definition translate_step:
43 ∀globals.
44 label
45  →joint_step ERTL globals
46   →bind_seq_block ERTLptr globals (joint_step ERTLptr globals) ≝
47 λglobals.λl.λs.
48match s with
49[ CALL called args dest ⇒
50    match called with
51    [inl id ⇒ bret … 〈[ ],CALL ERTLptr ? (inl … id) args dest〉
52    |inr dest1 ⇒ νreg in bret … 〈[extension_seq ERTLptr ? (LOW_ADDRESS reg ?);
53                                  PUSH … (Reg … reg);
54                                  extension_seq ERTLptr ? (HIGH_ADDRESS reg ?);
55                                  PUSH … (Reg … reg)],CALL ERTLptr ? (inr … dest1) args dest〉
56    ]
57| COND reg l ⇒ bret … 〈[],COND ERTLptr ? reg l〉
58| step_seq x ⇒ bret … 〈[],step_seq ERTLptr ? (translate_step_seq … x)〉
59].
60cases daemon (*TO BE COMPLETED *)
61qed.
62
63definition joint_fin_step_id: joint_fin_step ERTL → joint_fin_step ERTLptr ≝
64λs.
65match s with
66[GOTO l ⇒ GOTO ERTLptr … l
67|RETURN  ⇒ RETURN ERTLptr
68|TAILCALL H arg arg' ⇒ TAILCALL ERTLptr … H arg arg'
69].
70
71
72(*CSC: cut&paste from RTLtoERTL up to ERTLptr :-( keep just one copy*)
73definition ertl_fresh_reg:
74 ∀globals.freshT ERTLptr globals register ≝
75  λglobals,def.
76    let 〈r, runiverse〉 ≝ fresh … (joint_if_runiverse … def) in
77    〈set_locals ?? (set_runiverse ?? def runiverse)(r::joint_if_locals ?? def), r〉.
78
79definition translate_internal :  ∀globals: list ident.
80  joint_closed_internal_function ERTL globals →
81  joint_closed_internal_function ERTLptr globals ≝
82  λglobals,int_fun.
83  (* initialize internal function *)
84  let init ≝ init_graph_if ERTLptr globals
85    (joint_if_luniverse … int_fun)
86    (joint_if_runiverse … int_fun)
87    (joint_if_result … int_fun)
88    (joint_if_params … int_fun)
89    (joint_if_locals … int_fun)
90    (joint_if_stacksize … int_fun)
91    (joint_if_entry … int_fun)
92    (joint_if_exit … int_fun) in
93  b_graph_translate …
94    (ertl_fresh_reg …)
95    init
96    (translate_step …)
97    (λ_.λstep.bret ?? 〈[],joint_fin_step_id step〉)
98    int_fun.
99cases daemon.
100qed.
101
102definition ertl_to_ertlptr: ertl_program → ertlptr_program ≝
103  λp.transform_program … p (λvarnames. transf_fundef … (translate_internal varnames)).
Note: See TracBrowser for help on using the repository browser.