TEMPLATE_spec.pl 17.1 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Creation: 2006/02/13
# $Id$
# This is a template specification for the Firm-Backend

# the cpu architecture (ia32, ia64, mips, sparc, ppc, ...)

$arch = "TEMPLATE";

# The node description is done as a perl hash initializer with the
# following structure:
#
# %nodes = (
#
# <op-name> => {
Christian Würdig's avatar
Christian Würdig committed
15
16
17
18
19
20
21
22
23
24
25
26
27
#   "op_flags"  => "N|L|C|X|I|F|Y|H|c|K",
#   "irn_flags" => "R|N|I"
#   "arity"     => "0|1|2|3 ... |variable|dynamic|any",
#   "state"     => "floats|pinned|mem_pinned|exc_pinned",
#   "args"      => [
#                    { "type" => "type 1", "name" => "name 1" },
#                    { "type" => "type 2", "name" => "name 2" },
#                    ...
#                  ],
#   "comment"   => "any comment for constructor",
#   "reg_req"   => { "in" => [ "reg_class|register" ], "out" => [ "reg_class|register|in_rX" ] },
#   "cmp_attr"  => "c source code for comparing node attributes",
#   "emit"      => "emit code with templates",
28
29
30
31
32
33
34
#   "rd_constructor" => "c source code which constructs an ir_node"
# },
#
# ... # (all nodes you need to describe)
#
# ); # close the %nodes initializer

Christian Würdig's avatar
Christian Würdig committed
35
# op_flags: flags for the operation, OPTIONAL (default is "N")
36
37
38
39
40
41
42
43
44
45
46
47
# the op_flags correspond to the firm irop_flags:
#   N   irop_flag_none
#   L   irop_flag_labeled
#   C   irop_flag_commutative
#   X   irop_flag_cfopcode
#   I   irop_flag_ip_cfopcode
#   F   irop_flag_fragile
#   Y   irop_flag_forking
#   H   irop_flag_highlevel
#   c   irop_flag_constlike
#   K   irop_flag_keep
#
Christian Würdig's avatar
Christian Würdig committed
48
49
50
51
52
# irn_flags: special node flags, OPTIONAL (default is 0)
# following irn_flags are supported:
#   R   rematerializeable
#   N   not spillable
#   I   ignore for register allocation
53
#
Christian Würdig's avatar
Christian Würdig committed
54
# state: state of the operation, OPTIONAL (default is "floats")
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
#
# arity: arity of the operation, MUST NOT BE OMITTED
#
# args:  the OPTIONAL arguments of the node constructor (debug, irg and block
#        are always the first 3 arguments and are always autmatically
#        created)
#        If this key is missing the following arguments will be created:
#        for i = 1 .. arity: ir_node *op_i
#        ir_mode *mode
#
# comment: OPTIONAL comment for the node constructor
#
# rd_constructor: for every operation there will be a
#      new_rd_<arch>_<op-name> function with the arguments from above
#      which creates the ir_node corresponding to the defined operation
#      you can either put the complete source code of this function here
#
#      This key is OPTIONAL. If omitted, the following constructor will
#      be created:
#      if (!op_<arch>_<op-name>) assert(0);
#      for i = 1 to arity
#         set in[i] = op_i
#      done
#      res = new_ir_node(db, irg, block, op_<arch>_<op-name>, mode, arity, in)
#      return res
#
# NOTE: rd_constructor and args are only optional if and only if arity is 0,1,2 or 3

# register types:
#   0 - no special type
Christian Würdig's avatar
Christian Würdig committed
85
86
#   1 - caller save (register must be saved by the caller of a function)
#   2 - callee save (register must be saved by the called function)
87
#   4 - ignore (do not assign this register)
Christian Würdig's avatar
Christian Würdig committed
88
# NOTE: Last entry of each class is the largest Firm-Mode a register can hold
89
90
%reg_classes = (
  "general_purpose" => [
Christian Würdig's avatar
Christian Würdig committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
                         { "name" => "r0", "type" => 1 },
                         { "name" => "r1", "type" => 1 },
                         { "name" => "r2", "type" => 1 },
                         { "name" => "r3", "type" => 1 },
                         { "name" => "r4", "type" => 1 },
                         { "name" => "r5", "type" => 1 },
                         { "name" => "r6", "type" => 6 }, # this is our stackpointer
                         { "name" => "r7", "type" => 6 }, # this is out basepointer
                         { "name" => "r8", "type" => 2 },
                         { "name" => "r9", "type" => 2 },
                         { "name" => "r10", "type" => 2 },
                         { "name" => "r11", "type" => 2 },
                         { "name" => "r12", "type" => 2 },
                         { "name" => "r13", "type" => 2 },
                         { "name" => "r14", "type" => 2 },
                         { "name" => "r15", "type" => 2 },
                         { "mode" => "mode_P" }
108
109
                       ],
  "floating_point"  => [
Christian Würdig's avatar
Christian Würdig committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
                         { "name" => "f0", "type" => 1 },
                         { "name" => "f1", "type" => 1 },
                         { "name" => "f2", "type" => 1 },
                         { "name" => "f3", "type" => 1 },
                         { "name" => "f4", "type" => 1 },
                         { "name" => "f5", "type" => 1 },
                         { "name" => "f6", "type" => 1 },
                         { "name" => "f7", "type" => 1 },
                         { "name" => "f8", "type" => 1 },
                         { "name" => "f9", "type" => 1 },
                         { "name" => "f10", "type" => 1 },
                         { "name" => "f11", "type" => 1 },
                         { "name" => "f12", "type" => 1 },
                         { "name" => "f13", "type" => 1 },
                         { "name" => "f14", "type" => 1 },
                         { "name" => "f15", "type" => 1 },
                         { "mode" => "mode_D" }
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
                       ]
); # %reg_classes

#--------------------------------------------------#
#                        _                         #
#                       (_)                        #
#  _ __   _____      __  _ _ __    ___  _ __  ___  #
# | '_ \ / _ \ \ /\ / / | | '__|  / _ \| '_ \/ __| #
# | | | |  __/\ V  V /  | | |    | (_) | |_) \__ \ #
# |_| |_|\___| \_/\_/   |_|_|     \___/| .__/|___/ #
#                                      | |         #
#                                      |_|         #
#--------------------------------------------------#

%nodes = (

#-----------------------------------------------------------------#
#  _       _                                         _            #
# (_)     | |                                       | |           #
#  _ _ __ | |_ ___  __ _  ___ _ __   _ __   ___   __| | ___  ___  #
# | | '_ \| __/ _ \/ _` |/ _ \ '__| | '_ \ / _ \ / _` |/ _ \/ __| #
# | | | | | ||  __/ (_| |  __/ |    | | | | (_) | (_| |  __/\__ \ #
# |_|_| |_|\__\___|\__, |\___|_|    |_| |_|\___/ \__,_|\___||___/ #
#                   __/ |                                         #
#                  |___/                                          #
#-----------------------------------------------------------------#

# commutative operations

"Add" => {
Christian Würdig's avatar
Christian Würdig committed
157
158
159
160
161
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct Add: Add(a, b) = Add(b, a) = a + b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. add %S1, %S2, %D1\t\t\t/* Add(%S1, %S2) -> %D1, (%A1, %A2) */'
162
163
164
},

"Add_i" => {
Christian Würdig's avatar
Christian Würdig committed
165
166
167
168
  "irn_flags" => "R",
  "comment"   => "construct Add: Add(a, const) = Add(const, a) = a + const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. add %S1, %C, %D1\t\t\t/* Add(%C, %S1) -> %D1, (%A1, const) */'
169
170
171
},

"Mul" => {
Christian Würdig's avatar
Christian Würdig committed
172
173
174
175
176
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct Mul: Mul(a, b) = Mul(b, a) = a * b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      =>'. mul %S1, %S2, %D1\t\t\t/* Mul(%S1, %S2) -> %D1, (%A1, %A2) */'
177
178
179
},

"Mul_i" => {
Christian Würdig's avatar
Christian Würdig committed
180
181
182
183
  "irn_flags" => "R",
  "comment"   => "construct Mul: Mul(a, const) = Mul(const, a) = a * const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. mul %S1, %C, %D1\t\t\t/* signed Mul(%C, %S1) -> %D1, (%A1, const) */'
184
185
186
},

"And" => {
Christian Würdig's avatar
Christian Würdig committed
187
188
189
190
191
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct And: And(a, b) = And(b, a) = a AND b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. and %S1, %S2, %D1\t\t\t/* And(%S1, %S2) -> %D1, (%A1, %A2) */'
192
193
194
},

"And_i" => {
Christian Würdig's avatar
Christian Würdig committed
195
196
197
198
  "irn_flags" => "R",
  "comment"   => "construct And: And(a, const) = And(const, a) = a AND const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. and %S1, %C, %D1\t\t\t/* And(%C, %S1) -> %D1, (%A1, const) */'
199
200
201
},

"Or" => {
Christian Würdig's avatar
Christian Würdig committed
202
203
204
205
206
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct Or: Or(a, b) = Or(b, a) = a OR b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. or %S1, %S2, %D1\t\t\t/* Or(%S1, %S2) -> %D1, (%A1, %A2) */'
207
208
209
},

"Or_i" => {
Christian Würdig's avatar
Christian Würdig committed
210
211
212
213
214
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct Or: Or(a, const) = Or(const, a) = a OR const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. or %S1, %C, %D1\t\t\t/* Or(%C, %S1) -> %D1, (%A1, const) */'
215
216
217
},

"Eor" => {
Christian Würdig's avatar
Christian Würdig committed
218
219
220
221
222
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct Eor: Eor(a, b) = Eor(b, a) = a EOR b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. xor %S1, %S2, %D1\t\t\t/* Xor(%S1, %S2) -> %D1, (%A1, %A2) */'
223
224
225
},

"Eor_i" => {
Christian Würdig's avatar
Christian Würdig committed
226
227
228
229
  "irn_flags" => "R",
  "comment"   => "construct Eor: Eor(a, const) = Eor(const, a) = a EOR const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. xor %S1, %C, %D1\t\t\t/* Xor(%C, %S1) -> %D1, (%A1, const) */'
230
231
232
233
234
},

# not commutative operations

"Sub" => {
Christian Würdig's avatar
Christian Würdig committed
235
236
237
238
  "irn_flags" => "R",
  "comment"   => "construct Sub: Sub(a, b) = a - b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. sub %S1, %S2, %D1\t\t\t/* Sub(%S1, %S2) -> %D1, (%A1, %A2) */'
239
240
241
},

"Sub_i" => {
Christian Würdig's avatar
Christian Würdig committed
242
243
244
245
  "irn_flags" => "R",
  "comment"   => "construct Sub: Sub(a, const) = a - const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. subl %S1, %C, %D1\t\t\t/* Sub(%S1, %C) -> %D1, (%A1, const) */'
246
247
248
},

"Shl" => {
Christian Würdig's avatar
Christian Würdig committed
249
250
251
252
  "irn_flags" => "R",
  "comment"   => "construct Shl: Shl(a, b) = a << b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. shl %S1, %S2, %D1\t\t\t/* Shl(%S1, %S2) -> %D1, (%A1, %A2) */'
253
254
255
},

"Shl_i" => {
Christian Würdig's avatar
Christian Würdig committed
256
257
258
259
  "irn_flags" => "R",
  "comment"   => "construct Shl: Shl(a, const) = a << const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. shl %S1, %C, %D1\t\t\t/* Shl(%S1, %C) -> %D1, (%A1, const) */'
260
261
262
},

"Shr" => {
Christian Würdig's avatar
Christian Würdig committed
263
264
265
266
  "irn_flags" => "R",
  "comment"   => "construct Shr: Shr(a, b) = a >> b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "in_r1" ] },
  "emit"      => '. shr %S2, %D1\t\t\t/* Shr(%S1, %S2) -> %D1, (%A1, %A2) */'
267
268
269
},

"Shr_i" => {
Christian Würdig's avatar
Christian Würdig committed
270
271
272
273
  "irn_flags" => "R",
  "comment"   => "construct Shr: Shr(a, const) = a >> const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. shr %S1, %C, %D1\t\t\t/* Shr(%S1, %C) -> %D1, (%A1, const) */'
274
275
276
},

"RotR" => {
Christian Würdig's avatar
Christian Würdig committed
277
278
279
280
  "irn_flags" => "R",
  "comment"   => "construct RotR: RotR(a, b) = a ROTR b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. ror %S1, %S2, %D1\t\t\t/* RotR(%S1, %S2) -> %D1, (%A1, %A2) */'
281
282
283
},

"RotL" => {
Christian Würdig's avatar
Christian Würdig committed
284
285
286
287
  "irn_flags" => "R",
  "comment"   => "construct RotL: RotL(a, b) = a ROTL b",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. rol %S1, %S2, %D1\t\t\t/* RotL(%S1, %S2) -> %D1, (%A1, %A2) */'
288
289
290
},

"RotL_i" => {
Christian Würdig's avatar
Christian Würdig committed
291
292
293
294
  "irn_flags" => "R",
  "comment"   => "construct RotL: RotL(a, const) = a ROTL const",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. rol %S1, %C, %D1\t\t\t/* RotL(%S1, %C) -> %D1, (%A1, const) */'
295
296
297
},

"Minus" => {
Christian Würdig's avatar
Christian Würdig committed
298
299
300
301
  "irn_flags" => "R",
  "comment"   => "construct Minus: Minus(a) = -a",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. neg %S1, %D1\t\t\t/* Neg(%S1) -> %D1, (%A1) */'
302
303
304
},

"Inc" => {
Christian Würdig's avatar
Christian Würdig committed
305
306
307
308
  "irn_flags" => "R",
  "comment"   => "construct Increment: Inc(a) = a++",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. inc %S1, %D1\t\t\t/* Inc(%S1) -> %D1, (%A1) */'
309
310
311
},

"Dec" => {
Christian Würdig's avatar
Christian Würdig committed
312
313
314
315
  "irn_flags" => "R",
  "comment"   => "construct Decrement: Dec(a) = a--",
  "reg_req"   => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"      => '. dec %S1, %D1\t\t\t/* Dec(%S1) -> %D1, (%A1) */'
316
317
318
319
320
321
322
323
324
325
326
327
328
},

"Not" => {
  "arity"       => 1,
  "remat"       => 1,
  "comment"     => "construct Not: Not(a) = !a",
  "reg_req"     => { "in" => [ "general_purpose" ], "out" => [ "general_purpose" ] },
  "emit"        => '. not %S1, %D1\t\t\t/* Not(%S1) -> %D1, (%A1) */'
},

# other operations

"Const" => {
Christian Würdig's avatar
Christian Würdig committed
329
330
331
332
333
334
  "op_flags"  => "c",
  "irn_flags" => "R",
  "comment"   => "represents an integer constant",
  "reg_req"   => { "out" => [ "general_purpose" ] },
  "emit"      => '. mov %C, %D1\t\t\t/* Mov Const into register */',
  "cmp_attr"  =>
335
'
Christian Würdig's avatar
Christian Würdig committed
336
	/* TODO: compare Const attributes */
337
338
339
340
341
342
343
    return 1;
'
},

# Load / Store

"Load" => {
Christian Würdig's avatar
Christian Würdig committed
344
345
346
347
348
349
  "op_flags"  => "L|F",
  "irn_flags" => "R",
  "state"     => "exc_pinned",
  "comment"   => "construct Load: Load(ptr, mem) = LD ptr -> reg",
  "reg_req"   => { "in" => [ "general_purpose", "none" ], "out" => [ "general_purpose" ] },
  "emit"      => '. mov %O(%S1), %D1\t\t\t/* Load((%S1)) -> %D1, (%A1) */'
350
351
352
},

"Store" => {
Christian Würdig's avatar
Christian Würdig committed
353
354
355
356
357
358
  "op_flags"  => "L|F",
  "irn_flags" => "R",
  "state"     => "exc_pinned",
  "comment"   => "construct Store: Store(ptr, val, mem) = ST ptr,val",
  "reg_req"   => { "in" => [ "general_purpose", "general_purpose", "none" ] },
  "emit"      => '. movl %S2, %O(%S1)\t\t\t/* Store(%S2) -> (%S1), (%A1, %A2) */'
359
360
361
362
363
364
365
366
367
368
369
370
371
372
},

#--------------------------------------------------------#
#    __ _             _                     _            #
#   / _| |           | |                   | |           #
#  | |_| | ___   __ _| |_   _ __   ___   __| | ___  ___  #
#  |  _| |/ _ \ / _` | __| | '_ \ / _ \ / _` |/ _ \/ __| #
#  | | | | (_) | (_| | |_  | | | | (_) | (_| |  __/\__ \ #
#  |_| |_|\___/ \__,_|\__| |_| |_|\___/ \__,_|\___||___/ #
#--------------------------------------------------------#

# commutative operations

"fAdd" => {
Christian Würdig's avatar
Christian Würdig committed
373
374
375
376
377
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct FP Add: Add(a, b) = Add(b, a) = a + b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      => '. fadd %S1, %S2, %D1\t\t\t/* FP Add(%S1, %S2) -> %D1 */'
378
379
380
},

"fMul" => {
Christian Würdig's avatar
Christian Würdig committed
381
382
383
384
  "op_flags"  => "C",
  "comment"   => "construct FP Mul: Mul(a, b) = Mul(b, a) = a * b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      =>'. fmul %S1, %S2, %D1\t\t\t/* FP Mul(%S1, %S2) -> %D1 */'
385
386
387
},

"fMax" => {
Christian Würdig's avatar
Christian Würdig committed
388
389
390
391
392
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct FP Max: Max(a, b) = Max(b, a) = a > b ? a : b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      =>'. fmax %S1, %S2, %D1\t\t\t/* FP Max(%S1, %S2) -> %D1 */'
393
394
395
},

"fMin" => {
Christian Würdig's avatar
Christian Würdig committed
396
397
398
399
400
  "op_flags"  => "C",
  "irn_flags" => "R",
  "comment"   => "construct FP Min: Min(a, b) = Min(b, a) = a < b ? a : b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      =>'. fmin %S1, %S2, %D1\t\t\t/* FP Min(%S1, %S2) -> %D1 */'
401
402
403
404
405
},

# not commutative operations

"fSub" => {
Christian Würdig's avatar
Christian Würdig committed
406
407
408
409
  "irn_flags" => "R",
  "comment"   => "construct FP Sub: Sub(a, b) = a - b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      => '. fsub %S1, %S2, %D1\t\t\t/* FP Sub(%S1, %S2) -> %D1 */'
410
411
412
},

"fDiv" => {
Christian Würdig's avatar
Christian Würdig committed
413
414
415
  "comment"   => "construct FP Div: Div(a, b) = a / b",
  "reg_req"   => { "in" => [ "floating_point", "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      => '. fdiv %S1, %S2, %D1\t\t\t/* FP Div(%S1, %S2) -> %D1 */'
416
417
418
},

"fMinus" => {
Christian Würdig's avatar
Christian Würdig committed
419
420
421
422
  "irn_flags" => "R",
  "comment"   => "construct FP Minus: Minus(a) = -a",
  "reg_req"   => { "in" => [ "floating_point" ], "out" => [ "floating_point" ] },
  "emit"      => '. fneg %S1, %D1\t\t\t/* FP Minus(%S1) -> %D1 */'
423
424
425
426
427
},

# other operations

"fConst" => {
Christian Würdig's avatar
Christian Würdig committed
428
429
430
431
432
433
  "op_flags"  => "c",
  "irn_flags" => "R",
  "comment"   => "represents a FP constant",
  "reg_req"   => { "out" => [ "floating_point" ] },
  "emit"      => '. fmov %C, %D1\t\t\t/* Mov fConst into register */',
  "cmp_attr"  =>
434
'
Christian Würdig's avatar
Christian Würdig committed
435
436
	/* TODO: compare fConst attributes */
	return 1;
437
438
439
440
441
442
'
},

# Load / Store

"fLoad" => {
Christian Würdig's avatar
Christian Würdig committed
443
444
445
446
447
448
  "op_flags"  => "L|F",
  "irn_flags" => "R",
  "state"     => "exc_pinned",
  "comment"   => "construct FP Load: Load(ptr, mem) = LD ptr",
  "reg_req"   => { "in" => [ "general_purpose", "none" ], "out" => [ "floating_point" ] },
  "emit"      => '. fmov %O(%S1), %D1\t\t\t/* Load((%S1)) -> %D1 */'
449
450
451
},

"fStore" => {
Christian Würdig's avatar
Christian Würdig committed
452
453
454
455
456
457
458
  "op_flags"  => "L|F",
  "irn_flags" => "R",
  "state"     => "exc_pinned",
  "comment"   => "construct Store: Store(ptr, val, mem) = ST ptr,val",
  "reg_req"   => { "in" => [ "general_purpose", "floating_point", "none" ] },
  "emit"      => '. fmov %S2, %O(%S1)\t\t\t/* Store(%S2) -> (%S1), (%A1, %A2) */'
},
459
460

); # end of %nodes