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/MLRISC/extensions/opcodes.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/extensions/opcodes.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 228 - (view) (download)

1 : monnier 221 structure Opcode : MLRISC_OPCODES =
2 :     struct
3 :    
4 :     datatype cond = LT | LTU | LE | LEU | EQ | NE | GE | GEU | GT | GTU
5 :     datatype fcond = ? | !<=> | == | ?= | !<> | !?>= | < | ?< | !>= | !?> |
6 :     <= | ?<= | !> | !?<= | > | ?> | !<= | !?< | >= | ?>= |
7 :     !< | !?= | <> | != | !? | <=>
8 :    
9 :     datatype opcode =
10 :     (* load immediate *)
11 :     LI
12 :     | COPY
13 :     | ADD | SUB | MULU | DIVU | ADDT | MULT | SUBT | DIVT | SH1ADD | SH1ADDT
14 :     | ANDB | ORB | XORB | SRA | SRL | SLL | EXTRU | EXTRS | ZDEP
15 :     | FADDD | FMULD | FSUBD | FDIVD | FABSD | FNEGD | CVTI2D
16 :     | LOAD8 | LOAD16 | LOAD32 | LOADD
17 :     | LOAD8X | LOAD16X | LOAD32X | LOADDX
18 :     | STORE8 | STORE16 | STORE32 | STORED
19 :     | STORE8X | STORE16X | STORE32X | STOREDX
20 :     | CMP of cond | FCMP of fcond | SET of cond
21 :     | JMP | INDJMP | IDXJMP | RET | CALL | INDCALL
22 :     | MISC of int
23 :     | NOP
24 :     | PHI of int
25 :    
26 :     fun toString opcode =
27 :     case opcode of
28 :     LI => "li"
29 :     | COPY => "copy"
30 :     | ADD => "add"
31 :     | SUB => "sub"
32 :     | MULU => "mulu"
33 :     | DIVU => "divu"
34 :     | ADDT => "addt"
35 :     | MULT => "mult"
36 :     | SUBT => "subt"
37 :     | DIVT => "divt"
38 :     | SH1ADD => "sh1add"
39 :     | SH1ADDT => "sh1addt"
40 :     | ANDB => "andb"
41 :     | ORB => "orb"
42 :     | XORB => "xorb"
43 :     | SRA => "sra"
44 :     | SRL => "srl"
45 :     | SLL => "sll"
46 :     | EXTRU => "extru"
47 :     | EXTRS => "extrs"
48 :     | ZDEP => "zdep"
49 :     | FADDD => "faddd"
50 :     | FMULD => "fmuld"
51 :     | FSUBD => "fsubd"
52 :     | FDIVD => "fdivd"
53 :     | FABSD => "fabsd"
54 :     | FNEGD => "fnegd"
55 :     | CVTI2D => "cvti2d"
56 :     | LOAD8 => "load8"
57 :     | LOAD16 => "load16"
58 :     | LOAD32 => "load32"
59 :     | LOADD => "loadd"
60 :     | LOAD8X => "load8x"
61 :     | LOAD16X => "load16x"
62 :     | LOAD32X => "load32x"
63 :     | LOADDX => "loaddx"
64 :     | STORE8 => "store8"
65 :     | STORE16 => "store16"
66 :     | STORE32 => "store32"
67 :     | STORED => "stored"
68 :     | STORE8X => "store8x"
69 :     | STORE16X => "store16x"
70 :     | STORE32X => "store32x"
71 :     | STOREDX => "storedx"
72 :     | CMP cond => "cmp"^condToString cond
73 :     | FCMP fcond => "fcmp"^fcondToString fcond
74 :     | SET cond => "set"^condToString cond
75 :     | JMP => "jmp"
76 :     | INDJMP => "indjmp"
77 :     | IDXJMP => "idxjmp"
78 :     | RET => "ret"
79 :     | CALL => "call"
80 :     | INDCALL => "indcall"
81 :     | MISC i => "misc"^Int.toString i
82 :     | NOP => "nop"
83 :     | PHI b=> "phi["^Int.toString b^"]"
84 :    
85 :     and condToString cond =
86 :     case cond of
87 :     LT => "<"
88 :     | LTU => "<u"
89 :     | LE => "<="
90 :     | LEU => "<=u"
91 :     | EQ => "="
92 :     | NE => "!="
93 :     | GE => ">="
94 :     | GEU => ">=u"
95 :     | GT => ">"
96 :     | GTU => ">=u"
97 :    
98 :     and fcondToString c =
99 :     case c of
100 :     ? => "?"
101 :     | !<=> => "!<=>"
102 :     | == => "=="
103 :     | ?= => "?="
104 :     | !<> => "!<>"
105 :     | !?>= => "!?>="
106 :     | op < => "<"
107 :     | ?< => "?<"
108 :     | !>= => "!>="
109 :     | !?> => "!?>"
110 :     | op <= => "<="
111 :     | ?<= => "?<="
112 :     | !> => "!>"
113 :     | !?<= => "!?<="
114 :     | op > => ">"
115 :     | ?> => "?>"
116 :     | !<= => "!<="
117 :     | !?< => "!?<"
118 :     | op >= => ">="
119 :     | ?>= => "?>="
120 :     | !< => "!<"
121 :     | !?= => "!?="
122 :     | op <> => "<>"
123 :     | != => "!="
124 :     | !? => "!?"
125 :     | <=> => "<=>"
126 :    
127 :     fun hash opcode =
128 :     case opcode of
129 :     LI => 0
130 :     | COPY => 100
131 :     | ADD => 200
132 :     | SUB => 300
133 :     | MULU => 400
134 :     | DIVU => 500
135 :     | ADDT => 600
136 :     | MULT => 700
137 :     | SUBT => 800
138 :     | DIVT => 900
139 :     | SH1ADD => 930
140 :     | SH1ADDT => 960
141 :     | ANDB => 1000
142 :     | ORB => 1100
143 :     | XORB => 1200
144 :     | SRA => 1300
145 :     | SRL => 1400
146 :     | SLL => 1500
147 :     | EXTRU => 6000
148 :     | EXTRS => 6100
149 :     | ZDEP => 6200
150 :     | FADDD => 1600
151 :     | FMULD => 1700
152 :     | FSUBD => 1800
153 :     | FDIVD => 1900
154 :     | FABSD => 2000
155 :     | FNEGD => 2100
156 :     | CVTI2D => 2200
157 :     | LOAD8 => 2300
158 :     | LOAD16 => 2400
159 :     | LOAD32 => 2500
160 :     | LOADD => 2600
161 :     | LOAD8X => 2700
162 :     | LOAD16X => 2800
163 :     | LOAD32X => 2900
164 :     | LOADDX => 3000
165 :     | STORE8 => 3100
166 :     | STORE16 => 3200
167 :     | STORE32 => 3300
168 :     | STORED => 3400
169 :     | STORE8X => 3500
170 :     | STORE16X => 3600
171 :     | STORE32X => 3700
172 :     | STOREDX => 3800
173 :     | CMP cond => 3900 + hashCond cond
174 :     | FCMP fcond => 4000 + hashFcond fcond
175 :     | SET cond => 4100 + hashCond cond
176 :     | JMP => 4200
177 :     | INDJMP => 4300
178 :     | IDXJMP => 4400
179 :     | RET => 4500
180 :     | CALL => 4600
181 :     | INDCALL => 4700
182 :     | MISC i => 5000 + i
183 :     | NOP => 5100
184 :     | PHI b => 5200 + b
185 :    
186 :     and hashCond cond =
187 :     case cond of
188 :     LT => 0
189 :     | LTU => 64
190 :     | LE => 128
191 :     | LEU => 192
192 :     | EQ => 256
193 :     | NE => 512
194 :     | GE => 1024
195 :     | GEU => 2048
196 :     | GT => 3172
197 :     | GTU => 4096
198 :    
199 :     and hashFcond fcond =
200 :     case fcond of
201 :     ? => 1
202 :     | !<=> => 2
203 :     | == => 3
204 :     | ?= => 123
205 :     | !<> => 12412
206 :     | !?>= => 5837
207 :     | op < => 35
208 :     | ?< => 1234
209 :     | !>= => 125534
210 :     | !?> => 12385
211 :     | op <= => 857349
212 :     | ?<= => 683
213 :     | !> => 1245
214 :     | !?<= => 124984
215 :     | op > => 1234
216 :     | ?> => 132584
217 :     | !<= => 12837
218 :     | !?< => 75738
219 :     | op >= => 234
220 :     | ?>= => 881
221 :     | !< => 91
222 :     | !?= => 483
223 :     | op <> => 54738
224 :     | != => 1234
225 :     | !? => 4638
226 :     | <=> => 56483
227 :    
228 :     fun revCond cond =
229 :     case cond of
230 :     LT => GE
231 :     | LTU => GEU
232 :     | LE => GT
233 :     | LEU => GTU
234 :     | EQ => NE
235 :     | NE => EQ
236 :     | GE => LT
237 :     | GEU => LTU
238 :     | GT => LE
239 :     | GTU => LEU
240 :    
241 :    
242 :     fun revFcond ? = !?
243 :     | revFcond !<=> = <=>
244 :     | revFcond == = !=
245 :     | revFcond ?= = !?=
246 :     | revFcond !<> = op <>
247 :     | revFcond !?>= = ?>=
248 :     | revFcond op < = !<
249 :     | revFcond ?< = !?<
250 :     | revFcond !>= = op >=
251 :     | revFcond !?> = ?>
252 :     | revFcond op <= = !<=
253 :     | revFcond ?<= = !?<=
254 :     | revFcond !> = op >
255 :     | revFcond !?<= = ?<=
256 :     | revFcond op > = !>
257 :     | revFcond ?> = !?>
258 :     | revFcond !<= = op <=
259 :     | revFcond !?< = ?<
260 :     | revFcond op >= = !>=
261 :     | revFcond ?>= = !?>=
262 :     | revFcond !< = op <
263 :     | revFcond !?= = ?=
264 :     | revFcond op <> = !<>
265 :     | revFcond != = ==
266 :     | revFcond !? = ?
267 :     | revFcond <=> = !<=>
268 :    
269 :     fun isCommutative opcode =
270 :     case opcode of
271 :     ( ADD | MULU | ADDT | MULT | ANDB | ORB | XORB
272 :     | FADDD | FMULD | CMP NE | CMP EQ | FCMP == | FCMP !=
273 :     ) => true
274 :     | _ => false
275 :     end
276 :    
277 :     (*
278 : monnier 227 * $Log$
279 : monnier 221 *)

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