fix some cases of PIC emitting
[libfirm] / scripts / ir_spec.py
1 nodes = dict(
2 Start = dict(
3         mode       = "mode_T",
4         op_flags   = "cfopcode",
5         state      = "pinned",
6         knownBlock = True,
7         noconstr   = True,
8 ),
9
10 End = dict(
11         mode       = "mode_X",
12         op_flags   = "cfopcode",
13         state      = "pinned",
14         arity      = "dynamic",
15         knownBlock = True,
16         noconstr   = True,
17 ),
18
19 Phi = dict(
20         noconstr = True,
21         state    = "pinned",
22         arity    = "variable",
23 ),
24
25 Jmp = dict(
26         mode     = "mode_X",
27         op_flags = "cfopcode",
28         state    = "pinned",
29         ins      = [],
30 ),
31
32 IJmp = dict(
33         mode     = "mode_X",
34         op_flags = "cfopcode",
35         state    = "pinned",
36         ins      = [ "target" ],
37 ),
38
39 Const = dict(
40         mode       = "",
41         knownBlock = True,
42         attrs      = [
43                 dict(
44                         type = "tarval*",
45                         name = "tarval",
46                 )
47         ],
48 ),
49
50 Block = dict(
51         mode   = "mode_BB",
52         knownBlock = True,
53         noconstr   = True,
54         arity      = "variable",
55         java_add   = '''
56         public void addPred(Node node) {
57                 binding_cons.add_immBlock_pred(ptr, node.ptr);
58         }
59
60         public void mature() {
61                 binding_cons.mature_immBlock(ptr);
62         }
63
64         @Override
65         public Block getBlock() {
66                 return null;
67         }
68
69         public boolean blockVisited() {
70                 return 0 != binding.Block_block_visited(ptr);
71         }
72
73         public void markBlockVisited() {
74                 binding.mark_Block_block_visited(ptr);
75         }''',
76 ),
77
78 SymConst = dict(
79         mode       = "mode_P",
80         knownBlock = True,
81         noconstr   = True,
82         attrs      = [
83                 dict(
84                         type = "ir_entity*",
85                         name = "entity"
86                 )
87         ],
88 ),
89
90 # SymConst
91
92 Call = dict(
93         ins      = [ "mem", "ptr" ],
94         arity    = "variable",
95         outs     = [ "M_regular", "X_regular", "X_except", "T_result", "M_except", "P_value_res_base" ],
96         attrs    = [
97                 dict(
98                         type = "ir_type*",
99                         name = "type"
100                 )
101         ]
102 ),
103
104 Builtin = dict(
105         ins      = [ "mem" ],
106         arity    = "variable",
107         outs     = [ "M_regular", "X_regular", "X_except", "T_result", "M_except", "P_value_res_base" ],
108         attrs    = [
109                 dict(
110                         type = "ir_builtin_kind",
111                         name = "kind"
112                 ),
113                 dict(
114                         type = "ir_type*",
115                         name = "type"
116                 )
117         ]
118 ),
119
120 binop = dict(
121         abstract = True,
122         ins      = [ "left", "right" ]
123 ),
124
125 Add = dict(
126         is_a     = "binop"
127 ),
128
129 Carry = dict(
130         is_a     = "binop"
131 ),
132
133 Sub = dict(
134         is_a     = "binop"
135 ),
136
137 Borrow = dict(
138         is_a     = "binop"
139 ),
140
141 Mul = dict(
142         is_a     = "binop"
143 ),
144
145 Mulh = dict(
146         is_a     = "binop"
147 ),
148
149 Abs = dict(
150         is_a     = "unop"
151 ),
152
153 And = dict(
154         is_a     = "binop"
155 ),
156
157 Or = dict(
158         is_a     = "binop"
159 ),
160
161 Eor = dict(
162         is_a     = "binop"
163 ),
164
165 Not = dict(
166         is_a     = "unop"
167 ),
168
169 Shl = dict(
170         is_a     = "binop"
171 ),
172
173 Shr = dict(
174         is_a     = "binop"
175 ),
176
177 Shrs = dict(
178         is_a     = "binop"
179 ),
180
181 Rotl = dict(
182         is_a     = "binop"
183 ),
184
185 Quot = dict(
186         ins   = [ "mem", "dividend", "divisor" ],
187         outs  = [ "M", "X_regular", "X_except", "res" ],
188         attrs = [
189                 dict(
190                         type = "ir_mode*",
191                         name = "resmode"
192                 ),
193                 dict(
194                         name = "state",
195                         type = "op_pin_state"
196                 )
197         ]
198 ),
199
200 Div = dict(
201         ins   = [ "mem", "dividend", "divisor" ],
202         outs  = [ "M", "X_regular", "X_except", "res" ],
203         attrs = [
204                 dict(
205                         type = "ir_mode*",
206                         name = "resmode"
207                 ),
208                 dict(
209                         name = "state",
210                         type = "op_pin_state"
211                 )
212         ]
213 ),
214
215 DivMod = dict(
216         ins   = [ "mem", "dividend", "divisor" ],
217         outs  = [ "M", "X_regular", "X_except", "res_div", "res_mod" ],
218         attrs = [
219                 dict(
220                         type = "ir_mode*",
221                         name = "resmode"
222                 ),
223                 dict(
224                         name = "state",
225                         type = "op_pin_state"
226                 )
227         ]
228 ),
229
230 Mod = dict(
231         ins   = [ "mem", "dividend", "divisor" ],
232         outs  = [ "M", "X_regular", "X_except", "res" ],
233         attrs = [
234                 dict(
235                         type = "ir_mode*",
236                         name = "resmode"
237                 ),
238                 dict(
239                         name = "state",
240                         type = "op_pin_state"
241                 )
242         ]
243 ),
244
245 Load = dict(
246         ins      = [ "mem", "ptr" ],
247         outs     = [ "M", "X_regular", "X_except", "res" ],
248         attrs    = [
249                 dict(
250                         type = "ir_mode*",
251                         name = "mode",
252                         java_name = "load_mode"
253                 ),
254         ],
255         constructor_args = [
256                 dict(
257                         type = "cons_flags",
258                         name = "flags",
259                 ),
260         ],
261 ),
262
263 Store = dict(
264         ins      = [ "mem", "ptr", "value" ],
265         outs     = [ "M", "X_regular", "X_except" ],
266         constructor_args = [
267                 dict(
268                         type = "cons_flags",
269                         name = "flags",
270                 ),
271         ],
272 ),
273
274 Anchor = dict(
275         mode       = "mode_ANY",
276         ins        = [ "end_block", "start_block", "end", "start",
277                        "end_reg", "end_except", "initial_exec",
278                                    "frame", "tls", "initial_mem", "args",
279                                    "bad", "no_mem" ],
280         knownBlock = True,
281         noconstr   = True
282 ),
283
284 NoMem = dict(
285         mode       = "mode_M",
286         knownBlock = True,
287 ),
288
289 Bad = dict(
290         mode       = "mode_Bad",
291         knownBlock = True,
292 ),
293
294 Pin = dict(
295         ins      = [ "op" ],
296         mode     = "get_irn_mode(op);"
297 ),
298
299 Proj = dict(
300         ins      = [ "pred" ],
301         attrs    = [
302                 dict(
303                         type = "long",
304                         name = "proj"
305                 )
306         ]
307 ),
308
309 Sel = dict(
310         ins    = [ "mem", "ptr" ],
311         arity  = "variable",
312         mode   = "mode_P",
313         attrs    = [
314                 dict(
315                         type = "ir_entity*",
316                         name = "entity"
317                 )
318         ]
319 ),
320
321 Sync = dict(
322         mode     = "mode_M",
323         arity    = "dynamic"
324 ),
325
326 Tuple = dict(
327         arity    = "variable",
328         mode     = "mode_T",
329 ),
330
331 Unknown = dict(
332         knownBlock = True
333 ),
334
335 Confirm = dict(
336         ins      = [ "value", "bound" ],
337         mode     = "get_irn_mode(value)",
338         attrs    = [
339                 dict(
340                         name = "cmp",
341                         type = "pn_Cmp"
342                 ),
343         ],
344 ),
345
346 Return = dict(
347         ins      = [ "mem" ],
348         arity    = "variable",
349         mode     = "mode_X"
350 ),
351
352 unop = dict(
353         abstract = True,
354         ins      = [ "op" ]
355 ),
356
357 Minus = dict(
358         is_a     = "unop"
359 ),
360
361 Mux = dict(
362         ins      = [ "sel", "false", "true" ]
363 ),
364
365 Cond = dict(
366         ins      = [ "selector" ],
367         outs     = [ "false", "true" ],
368         attrs    = [
369                 dict(
370                         name = "kind",
371                         type = "cond_kind",
372                         init = "dense"
373                 ),
374                 dict(
375                         name = "default_proj",
376                         type = "long",
377                         init = "0"
378                 ),
379                 dict(
380                         name = "jmp_pred",
381                         type = "cond_jmp_predicate",
382                         init = "COND_JMP_PRED_NONE"
383                 )
384         ]
385 ),
386
387 Cmp = dict(
388         is_a     = "binop",
389         outs     = [ "False", "Eq", "Lt", "Le", "Gt", "Ge", "Lg", "Leg", "Uo", "Ue", "Ul", "Ule", "Ug", "Uge", "Ne", "True" ],
390 ),
391
392 Conv = dict(
393         is_a     = "unop",
394         attrs = [
395                 dict(
396                         name = "strict",
397                         type = "int"
398                 )
399         ]
400 ),
401
402 Alloc = dict(
403         ins   = [ "mem", "size" ],
404         outs  = [ "M", "X_regular", "X_except", "res" ],
405         attrs = [
406                 dict(
407                         name = "type",
408                         type = "ir_type*"
409                 ),
410                 dict(
411                         name = "where",
412                         type = "ir_where_alloc"
413                 )
414         ]
415 ),
416
417 Free = dict(
418         ins   = [ "mem", "ptr", "size" ],
419         mode  = "mode_M",
420         attrs = [
421                 dict(
422                         name = "type",
423                         type = "ir_type*"
424                 ),
425                 dict(
426                         name = "where",
427                         type = "ir_where_alloc"
428                 )
429         ]
430 ),
431
432 CopyB = dict(
433         ins   = [ "mem", "dst", "src" ],
434         outs  = [ "M", "X_regular", "X_except" ],
435         attrs = [
436                 dict(
437                         name = "type",
438                         type = "ir_type*"
439                 )
440         ]
441 ),
442 )