Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/compiler/FLINT/cps/cps.sig
ViewVC logotype

Annotation of /sml/trunk/src/compiler/FLINT/cps/cps.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17 - (view) (download) (as text)
Original Path: sml/branches/SMLNJ/src/compiler/FLINT/cps/cps.sig

1 : monnier 16 (* Copyright 1996 by Bell Laboratories *)
2 :     (* cps.sig *)
3 :    
4 :     signature CPS = sig
5 :    
6 :     structure P : sig
7 :    
8 :     (* numkind includes kind and size *)
9 :     datatype numkind = INT of int | UINT of int | FLOAT of int
10 :    
11 :     datatype arithop = + | - | * | / | ~ | abs
12 :     | lshift | rshift | rshiftl | andb | orb | xorb | notb
13 :    
14 :     datatype cmpop = > | >= | < | <= | eql | neq
15 :    
16 :     (* fcmpop conforms to the IEEE std 754 predicates. *)
17 :     datatype fcmpop
18 :     = fEQ (* = *) | fULG (* ?<> *) | fUN (* ? *) | fLEG (* <=> *)
19 :     | fGT (* > *) | fGE (* >= *) | fUGT (* ?> *) | fUGE (* ?>= *)
20 :     | fLT (* < *) | fLE (* <= *) | fULT (* ?< *) | fULE (* ?<= *)
21 :     | fLG (* <> *) | fUE (* ?= *)
22 :    
23 :    
24 :     (* These are two-way branches dependent on pure inputs *)
25 :     datatype branch
26 :     = cmp of {oper: cmpop, kind: numkind}
27 :     | fcmp of {oper: fcmpop, size: int}
28 :     | boxed | unboxed | peql | pneq
29 :     | streq | strneq
30 :     (* streq(n,a,b) is defined only if strings a and b have
31 :     exactly the same length n>1 *)
32 :    
33 :     (* These all update the store *)
34 :     datatype setter
35 :     = numupdate of {kind: numkind}
36 :     | unboxedupdate | boxedupdate | update
37 :     | sethdlr | setvar | uselvar | setspecial
38 :     | free | acclink | setpseudo | setmark
39 :    
40 :     (* These fetch from the store, never have functions as arguments. *)
41 :     datatype looker
42 :     = ! | subscript | numsubscript of {kind: numkind} | getspecial | deflvar
43 :     | getrunvec | gethdlr | getvar | getpseudo
44 :    
45 :     (* These might raise exceptions, never have functions as arguments.*)
46 :     datatype arith
47 :     = arith of {oper: arithop, kind: numkind}
48 :     | test of int * int
49 :     | testu of int * int
50 :     | round of {floor: bool, fromkind: numkind, tokind: numkind}
51 :    
52 :     (* These don't raise exceptions and don't access the store. *)
53 :     datatype pure
54 :     = pure_arith of {oper: arithop, kind: numkind}
55 :     | pure_numsubscript of {kind: numkind}
56 :     | length | objlength | makeref
57 :     | extend of int * int | trunc of int * int | copy of int * int
58 :     | real of {fromkind: numkind, tokind: numkind}
59 :     | subscriptv
60 :     | gettag | mkspecial | wrap | unwrap | cast | getcon | getexn
61 :     | fwrap | funwrap | iwrap | iunwrap | i32wrap | i32unwrap
62 :    
63 :     val opp : branch -> branch
64 :    
65 :     val iadd : arith
66 :     val isub : arith
67 :     val imul : arith
68 :     val idiv : arith
69 :     val ineg : arith
70 :    
71 :     val fadd : arith
72 :     val fsub : arith
73 :     val fmul : arith
74 :     val fdiv : arith
75 :     val fneg : arith
76 :    
77 :     val ieql : branch
78 :     val ineq : branch
79 :     val igt : branch
80 :     val ige : branch
81 :     val ile : branch
82 :     val ilt : branch
83 :     (* val iltu : branch
84 :     * val igeu : branch
85 :     *)
86 :     val feql : branch
87 :     val fneq : branch
88 :     val fgt : branch
89 :     val fge : branch
90 :     val fle : branch
91 :     val flt : branch
92 :    
93 :     val arity : arithop -> int
94 :    
95 :     end (* P *)
96 :    
97 :     type lvar
98 :    
99 :     datatype value
100 :     = VAR of lvar
101 :     | LABEL of lvar
102 :     | INT of int
103 :     | INT32 of Word32.word
104 :     | REAL of string
105 :     | STRING of string
106 :     | OBJECT of Unsafe.Object.object
107 :     | VOID
108 :    
109 :     datatype accesspath
110 :     = OFFp of int
111 :     | SELp of int * accesspath
112 :    
113 :     datatype fun_kind
114 :     = CONT
115 :     | KNOWN
116 :     | KNOWN_REC
117 :     | KNOWN_CHECK
118 :     | KNOWN_TAIL
119 :     | KNOWN_CONT
120 :     | ESCAPE
121 :     | NO_INLINE_INTO
122 :    
123 :     datatype record_kind
124 :     = RK_VECTOR
125 :     | RK_RECORD
126 :     | RK_SPILL
127 :     | RK_ESCAPE
128 :     | RK_EXN
129 :     | RK_CONT
130 :     | RK_FCONT
131 :     | RK_KNOWN
132 :     | RK_BLOCK
133 :     | RK_FBLOCK
134 :     | RK_I32BLOCK
135 :    
136 :     datatype pkind = VPT | RPT of int | FPT of int
137 :     datatype cty = INTt | INT32t | PTRt of pkind
138 :     | FUNt | FLTt | CNTt | DSPt
139 :    
140 :     datatype cexp
141 :     = RECORD of record_kind * (value * accesspath) list * lvar * cexp
142 :     | SELECT of int * value * lvar * cty * cexp
143 :     | OFFSET of int * value * lvar * cexp
144 :     | APP of value * value list
145 :     | FIX of function list * cexp
146 :     | SWITCH of value * lvar * cexp list
147 :     | BRANCH of P.branch * value list * lvar * cexp * cexp
148 :     | SETTER of P.setter * value list * cexp
149 :     | LOOKER of P.looker * value list * lvar * cty * cexp
150 :     | ARITH of P.arith * value list * lvar * cty * cexp
151 :     | PURE of P.pure * value list * lvar * cty * cexp
152 :     withtype function = fun_kind * lvar * lvar list * cty list * cexp
153 :    
154 :     val combinepaths : accesspath * accesspath -> accesspath
155 :     val lenp : accesspath -> int
156 :    
157 :     val BOGt : cty
158 :    
159 :     val ctyc : LtyDef.tyc -> cty
160 :     val ctype : LtyDef.lty -> cty
161 :     end (* signature CPS *)
162 :    
163 :     (*
164 :     * $Log: cps.sig,v $
165 :     * Revision 1.2 1997/06/30 19:37:13 jhr
166 :     * Removed System structure; added Unsafe structure.
167 :     *
168 :     * Revision 1.1.1.1 1997/01/14 01:38:30 george
169 :     * Version 109.24
170 :     *
171 :     *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0