# One can also annotate some flags for each out, additional to irn_flags.
# They are separated from name with a colon ':', and concatenated by pipe '|'
# Only I and S are available at the moment (same meaning as in irn_flags).
-# example: [ "frame:I", "stack:I|S", "M" ]
+# example: [ "frame:I", "stack:S", "M" ]
#
# comment: OPTIONAL comment for the node constructor
#
reg_req => { in => [ "gp", "gp", "none", "esp", "gp" ], out => [ "esp", "none" ] },
ins => [ "base", "index", "mem", "val", "stack" ],
emit => '. push%M %unop4',
- outs => [ "stack:I|S", "M" ],
+ outs => [ "stack:S", "M" ],
am => "source,binary",
latency => 2,
units => [ "GP" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "esp" ], out => [ "gp", "none", "none", "esp" ] },
emit => '. pop%M %DAM0',
- outs => [ "res", "M", "unused", "stack:I|S" ],
+ outs => [ "res", "M", "unused", "stack:S" ],
ins => [ "base", "index", "mem", "stack" ],
am => "dest,unary",
latency => 3, # Pop is more expensive than Push on Athlon
Enter => {
reg_req => { in => [ "esp" ], out => [ "ebp", "esp", "none" ] },
emit => '. enter',
- outs => [ "frame:I", "stack:I|S", "M" ],
+ outs => [ "frame:I", "stack:S", "M" ],
latency => 15,
units => [ "GP" ],
},
Leave => {
reg_req => { in => [ "esp", "ebp" ], out => [ "ebp", "esp" ] },
emit => '. leave',
- outs => [ "frame:I", "stack:I|S" ],
+ outs => [ "frame:I", "stack:S" ],
latency => 3,
units => [ "GP" ],
},
emit => ". subl %binop\n".
". movl %%esp, %D1",
latency => 2,
- outs => [ "stack:I|S", "addr", "M" ],
+ outs => [ "stack:S", "addr", "M" ],
units => [ "GP" ],
modified_flags => $status_flags
},