source: src/ERTLptr/ERTLtoERTLptr.ma @ 2675

Last change on this file since 2675 was 2675, checked in by tranquil, 7 years ago
  • a generic graph program transformation
File size: 3.3 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 seq_embed :
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
39definition translate_step:
40 ∀globals.
41 unit →
42 label
43  →joint_step ERTL globals
44   →bind_step_block ERTLptr globals ≝
45 λglobals.λ_.λl.λs.
46match s return λ_.bind_step_block ERTLptr globals with
47[ CALL called args dest ⇒
48    match called return λ_.bind_step_block ERTLptr globals with
49    [inl id ⇒ bret … 〈[ ], λ_.CALL ERTLptr ? (inl … id) args dest, [ ]〉
50    |inr dest1 ⇒ νreg in bret ? (step_block ERTLptr globals)
51      〈[λl.(LOW_ADDRESS reg l : joint_seq ??);
52        λ_.PUSH ERTLptr … (Reg … reg);
53        λl.HIGH_ADDRESS reg l;
54        λ_.PUSH ERTLptr … (Reg … reg)],
55        λ_.CALL ERTLptr ? (inr … dest1) args dest, [ ]〉
56    ]
57| COND reg l ⇒ bret … 〈[ ], λ_.COND ERTLptr ? reg l, [ ]〉
58| step_seq x ⇒ bret … [seq_embed … x]
59].
60
61definition fin_step_embed: joint_fin_step ERTL → joint_fin_step ERTLptr ≝
62λs.
63match s with
64[GOTO l ⇒ GOTO ERTLptr … l
65|RETURN  ⇒ RETURN ERTLptr
66|TAILCALL H arg arg' ⇒ TAILCALL ERTLptr … H arg arg'
67].
68
69definition translate_fin_step:
70 ∀globals.
71 unit →
72 label
73  →joint_fin_step ERTL
74   →bind_fin_block ERTLptr globals ≝
75 λglobals.λ_.λl.λs.bret … 〈[ ], fin_step_embed … s〉.
76
77definition ertl_to_ertlptr: ertl_program → ertlptr_program ≝
78  b_graph_transform_program ERTL ERTLptr (λ_.unit)
79  (λglobals,int_fun.
80    〈〈joint_if_result … int_fun,
81      joint_if_params … int_fun,
82      joint_if_stacksize … int_fun〉,
83    it〉)
84  translate_step
85  translate_fin_step.
Note: See TracBrowser for help on using the repository browser.