File: rtl-build.sig

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (125 lines) | stat: -rw-r--r-- 4,353 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
(*
 * How to build primitive RTL operators 
 *)
signature RTL_BUILD =
sig
   structure T : MLTREE
   type ty    = T.ty
   type cond  = T.cond
   type fcond = T.fcond

   type effect 
   type region 
   type exp
   type bool
   type div_rounding_mode
   
   val intConst  : ty -> int -> exp          (* integer constant *)
   val wordConst : ty -> Word32.word -> exp  (* word constant *)
   val ???       : ty -> exp                 (* an undefined value *)

   val newOp     : string -> exp list -> exp   (* create new operator *)

   val immed     : ty -> exp -> exp          (* immediate value *)
   val operand   : ty -> exp -> exp          
   val label     : ty -> exp -> exp
   val $         : CellsBasis.cellkind * ty -> exp -> exp   
   val Mem       : CellsBasis.cellkind * ty -> exp * region -> exp
   val Arg       : ty * string * string -> exp

   (* Signed/unsigned promotion *)
   val sx  : ty * ty -> exp -> exp
   val zx  : ty * ty -> exp -> exp

   (* Integer operators *)
   val ~     : ty -> exp -> exp
   val +     : ty -> exp * exp -> exp
   val -     : ty -> exp * exp -> exp
   val muls  : ty -> exp * exp -> exp 
   val mulu  : ty -> exp * exp -> exp 
   val divs  : ty -> div_rounding_mode * exp * exp -> exp 
   val divu  : ty -> exp * exp -> exp 
   val rems  : ty -> div_rounding_mode * exp * exp -> exp 
   val remu  : ty -> exp * exp -> exp 

   val addt  : ty -> exp * exp -> exp 
   val subt  : ty -> exp * exp -> exp 
   val mult  : ty -> exp * exp -> exp 
   val divt  : ty -> div_rounding_mode * exp * exp -> exp 

   val notb  : ty -> exp -> exp
   val andb  : ty -> exp * exp -> exp 
   val orb   : ty -> exp * exp -> exp 
   val xorb  : ty -> exp * exp -> exp 
   val eqvb  : ty -> exp * exp -> exp 
   val <<    : ty -> exp * exp -> exp 
   val >>    : ty -> exp * exp -> exp 
   val ~>>   : ty -> exp * exp -> exp 
   val BitSlice : ty -> (int * int) list -> exp -> exp

   (* Boolean operators *)
   (* val Cond    : ty -> bool * exp * exp -> exp *)
   val False    : bool
   val True     : bool
   val Not      : bool -> bool
   val And      : bool * bool -> bool
   val Or       : bool * bool -> bool
   val Cond     : ty -> bool * exp * exp -> exp 

   (* Integer comparisons *)
   val ==      : ty -> exp * exp -> bool 
   val <>      : ty -> exp * exp -> bool 
   val <       : ty -> exp * exp -> bool 
   val >       : ty -> exp * exp -> bool 
   val <=      : ty -> exp * exp -> bool 
   val >=      : ty -> exp * exp -> bool 
   val ltu     : ty -> exp * exp -> bool 
   val leu     : ty -> exp * exp -> bool 
   val gtu     : ty -> exp * exp -> bool 
   val geu     : ty -> exp * exp -> bool 
   val setcc   : ty -> exp * exp -> bool
   val getcc   : ty -> exp * T.cond -> bool

   (* Floating point operators *)
   val fadd    : ty -> exp * exp -> exp
   val fsub    : ty -> exp * exp -> exp
   val fmul    : ty -> exp * exp -> exp
   val fdiv    : ty -> exp * exp -> exp
   val fcopysign : ty -> exp * exp -> exp
   val fabs    : ty -> exp -> exp
   val fneg    : ty -> exp -> exp
   val fsqrt   : ty -> exp -> exp

   (* Floating point comparisons *)
   val |?|     : ty -> exp * exp -> bool
   val |==|    : ty -> exp * exp -> bool
   val |?=|    : ty -> exp * exp -> bool
   val |<|     : ty -> exp * exp -> bool
   val |?<|    : ty -> exp * exp -> bool
   val |<=|    : ty -> exp * exp -> bool
   val |?<=|   : ty -> exp * exp -> bool
   val |>|     : ty -> exp * exp -> bool
   val |?>|    : ty -> exp * exp -> bool
   val |>=|    : ty -> exp * exp -> bool
   val |?>=|   : ty -> exp * exp -> bool
   val |<>|    : ty -> exp * exp -> bool
   val |<=>|   : ty -> exp * exp -> bool
   val |?<>|   : ty -> exp * exp -> bool
   val setfcc  : ty -> exp * exp -> bool
   val getfcc  : ty -> exp * T.fcond -> bool

   (* Effect combinators *)
   val :=    : ty -> exp * exp -> effect
   val Par   : effect * effect -> effect  (* parallel effects *)
   val Nop   : effect                     (* empty effect *)
   val Jmp   : ty -> exp -> effect        (* jump to address *)
   val Call  : ty -> exp -> effect        (* call address *)
   val Ret   : effect                     (* return *)
   val If    : bool * effect * effect -> effect (* if/then/else *)

   val map    : ty -> ('a -> 'b) -> 'a list -> 'b list

   val getNewOps   : unit -> T.Basis.misc_op list
   val clearNewOps : unit -> unit

end