]> matita.cs.unibo.it Git - pkg-cerco/acc.git/blob - src/ASM/I8051.mli
Imported Upstream version 0.2
[pkg-cerco/acc.git] / src / ASM / I8051.mli
1
2 include Arch.S
3
4 type opaccs =
5   | Mul
6   | DivuModu
7
8 type op1 =
9   | Cmpl
10   | Inc
11
12 type op2 =
13   | Add
14   | Addc
15   | Sub
16   | And
17   | Or
18   | Xor
19
20 val print_opaccs : opaccs -> string
21 val print_op1 : op1 -> string
22 val print_op2 : op2 -> string
23
24 module Eval (Val : Value.S) : sig
25   val opaccs : opaccs -> Val.t -> Val.t ->
26                (Val.t (* first result (ACC) *) *
27                 Val.t (* second result (BACC) *))
28   val op1    : op1 -> Val.t -> Val.t
29   val op2    : Val.t (* carry *) -> op2 -> Val.t -> Val.t ->
30                (Val.t (* returned value *) * Val.t (* new carry value *))
31 end
32
33 (* Not supported: signed division, signed modulo, shift operations. *)
34
35 type register
36 val compare_reg : register -> register -> int
37 val eq_reg      : register -> register -> bool
38
39 module RegisterSet : Set.S with type elt = register
40 module RegisterMap : Map.S with type key = register
41
42 val a : register
43 val b : register
44 val dpl : register
45 val dph : register
46 val spl : register
47 val sph : register
48 val st0 : register
49 val st1 : register
50 val st2 : register
51 val st3 : register
52 val sts : register list
53 val rets : register list
54 val sst : register
55 val carry : register (* only used for the liveness analysis *)
56
57 val spl_addr : int
58 val spl_init : int
59 val sph_addr : int
60 val sph_init : int
61 val isp_addr : int
62 val isp_init : int
63
64 val registers : RegisterSet.t
65 val parameters : register list
66 val callee_saved : RegisterSet.t
67 val caller_saved : RegisterSet.t
68 val allocatable : RegisterSet.t
69 val forbidden : RegisterSet.t
70
71 val print_register : register -> string
72
73 val reg_addr : register -> [> ASM.direct]
74
75 val ext_ram_size : int
76 val int_ram_size : int