[754] | 1 | include "basics/list.ma". |
---|
| 2 | include "common/Registers.ma". |
---|
| 3 | include "common/AST.ma". |
---|
| 4 | include "common/Graphs.ma". |
---|
| 5 | include "common/CostLabel.ma". |
---|
| 6 | |
---|
| 7 | definition registers ≝ list register. |
---|
| 8 | |
---|
| 9 | inductive rtl_statement: Type[0] ≝ |
---|
| 10 | | rtl_st_skip: label → rtl_statement |
---|
[782] | 11 | | rtl_st_cost: costlabel → label → rtl_statement |
---|
[1115] | 12 | (* ldest, hdest, symbol, next *) |
---|
[754] | 13 | | rtl_st_addr: register → register → ident → label → rtl_statement |
---|
[1115] | 14 | (* ldest, hdest, next *) |
---|
[782] | 15 | | rtl_st_stack_addr: register → register → label → rtl_statement |
---|
[754] | 16 | | rtl_st_int: register → Byte → label → rtl_statement |
---|
[1115] | 17 | (* dest, src, next *) |
---|
[754] | 18 | | rtl_st_move: register → register → label → rtl_statement |
---|
[1064] | 19 | | rtl_st_clear_carry: label → rtl_statement |
---|
[1115] | 20 | (* op, acc dest, bacc dest, acc src, bacc src, next *) |
---|
[1061] | 21 | | rtl_st_opaccs: OpAccs → register → register → register → register → label → rtl_statement |
---|
[1115] | 22 | (* op, dest, src, next *) |
---|
[1061] | 23 | | rtl_st_op1: Op1 → register → register → label → rtl_statement |
---|
[1115] | 24 | (* op, dest, src1, src2, next *) |
---|
[1061] | 25 | | rtl_st_op2: Op2 → register → register → register → label → rtl_statement |
---|
[754] | 26 | | rtl_st_load: register → register → register → label → rtl_statement |
---|
| 27 | | rtl_st_store: register → register → register → label → rtl_statement |
---|
| 28 | | rtl_st_call_id: ident → registers → registers → label → rtl_statement |
---|
| 29 | | rtl_st_call_ptr: register → register → registers → registers → label → rtl_statement |
---|
| 30 | | rtl_st_tailcall_id: ident → registers → rtl_statement |
---|
| 31 | | rtl_st_tailcall_ptr: register → register → registers → rtl_statement |
---|
[1066] | 32 | | rtl_st_cond: register → label → label → rtl_statement |
---|
[1060] | 33 | | rtl_st_set_carry: label → rtl_statement |
---|
[1106] | 34 | | rtl_st_return: rtl_statement. |
---|
[754] | 35 | |
---|
| 36 | definition rtl_statement_graph ≝ graph rtl_statement. |
---|
| 37 | |
---|
| 38 | record rtl_internal_function: Type[0] ≝ |
---|
| 39 | { |
---|
| 40 | rtl_if_luniverse: universe LabelTag; |
---|
| 41 | rtl_if_runiverse: universe RegisterTag; |
---|
[1068] | 42 | (* rtl_if_sig: signature; -- dropped in front end *) |
---|
[1071] | 43 | rtl_if_result : registers; |
---|
| 44 | rtl_if_params : registers; |
---|
| 45 | rtl_if_locals : registers; |
---|
[754] | 46 | rtl_if_stacksize: nat; |
---|
[1071] | 47 | rtl_if_graph : rtl_statement_graph; |
---|
| 48 | rtl_if_entry : Σl: label. lookup ? ? rtl_if_graph l ≠ None ?; |
---|
| 49 | rtl_if_exit : Σl: label. lookup ? ? rtl_if_graph l ≠ None ? |
---|
[754] | 50 | }. |
---|
| 51 | |
---|
[1068] | 52 | definition rtl_function_definition ≝ fundef rtl_internal_function. |
---|
[754] | 53 | |
---|
| 54 | record rtl_program: Type[0] ≝ |
---|
| 55 | { |
---|
| 56 | rtl_pr_vars: list (ident × nat); |
---|
| 57 | rtl_pr_functs: list (ident × rtl_function_definition); |
---|
| 58 | rtl_pr_main: option ident |
---|
[783] | 59 | }. |
---|