},
l_Add => {
- op_flags => [ "constlike" ],
- reg_req => { in => [ "none", "none" ], out => [ "none" ] },
ins => [ "left", "right" ],
+ attr_type => "",
+ dump_func => "NULL",
},
l_Adc => {
- reg_req => { in => [ "none", "none", "none" ], out => [ "none" ] },
ins => [ "left", "right", "eflags" ],
+ attr_type => "",
+ dump_func => "NULL",
},
Mul => {
},
l_Mul => {
- # we should not rematrialize this node. It produces 2 results and has
- # very strict constraints
- op_flags => [ "constlike" ],
- cmp_attr => "return 1;",
- reg_req => { in => [ "none", "none" ],
- out => [ "none", "none", "none", "none" ] },
ins => [ "left", "right" ],
outs => [ "res_low", "flags", "M", "res_high" ],
+ attr_type => "",
+ dump_func => "NULL",
},
IMul => {
},
l_IMul => {
- op_flags => [ "constlike" ],
- cmp_attr => "return 1;",
- reg_req => { in => [ "none", "none" ],
- out => [ "none", "none", "none", "none" ] },
ins => [ "left", "right" ],
outs => [ "res_low", "flags", "M", "res_high" ],
+ attr_type => "",
+ dump_func => "NULL",
},
And => {
},
l_Sub => {
- reg_req => { in => [ "none", "none" ], out => [ "none" ] },
ins => [ "minuend", "subtrahend" ],
+ attr_type => "",
+ dump_func => "NULL",
},
l_Sbb => {
- reg_req => { in => [ "none", "none", "none" ], out => [ "none" ] },
ins => [ "minuend", "subtrahend", "eflags" ],
+ attr_type => "",
+ dump_func => "NULL",
},
IDiv => {
modified_flags => $status_flags
},
+l_Setcc => {
+ ins => [ "cond" ],
+ outs => [ "res" ],
+ mode => "mode_Bu",
+ attr_type => "",
+ dump_func => "NULL",
+},
+
Setcc => {
#irn_flags => [ "rematerializable" ],
reg_req => { in => [ "eflags" ], out => [ "eax ebx ecx edx" ] },
l_LLtoFloat => {
- op_flags => [ "labeled" ],
- cmp_attr => "return 1;",
ins => [ "val_high", "val_low" ],
- reg_req => { in => [ "none", "none" ], out => [ "none" ] }
+ attr_type => "",
+ dump_func => "NULL",
},
l_FloattoLL => {
- op_flags => [ "labeled" ],
- cmp_attr => "return 1;",
ins => [ "val" ],
outs => [ "res_high", "res_low" ],
- reg_req => { in => [ "none" ], out => [ "none", "none" ] }
+ attr_type => "",
+ dump_func => "NULL",
},
CopyB => {
}
# set default values for state and flags if not given
- $n{"state"} = "floats" if (! exists($n{"state"}));
- $n{"op_flags"} = ["none"] if (! exists($n{"op_flags"}));
+ $n{"state"} = "floats" if (! exists($n{"state"}));
+ $n{"op_flags"} = ["none"] if (! exists($n{"op_flags"}));
+ $n{"dump_func"} = "${arch}_dump_node" if (!exists($n{"dump_func"}));
+ my $dump_func = $n{"dump_func"};
push(@obst_new_irop, "\n\tmemset(&ops, 0, sizeof(ops));\n");
push(@obst_new_irop, "\tops.be_ops = be_ops;\n");
- push(@obst_new_irop, "\tops.dump_node = $arch\_dump_node;\n");
+ push(@obst_new_irop, "\tops.dump_node = ${dump_func};\n");
if (defined($cmp_attr_func)) {
push(@obst_new_irop, "\tops.node_cmp_attr = ${cmp_attr_func};\n");