From d50de3e3f5766ade4f96e5c113e1fca82d46a310 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Thu, 23 Mar 2006 15:13:19 +0000 Subject: [PATCH] added feature to specify and initialize additional attributes in standard constructor --- ir/be/scripts/generate_new_opcodes.pl | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/ir/be/scripts/generate_new_opcodes.pl b/ir/be/scripts/generate_new_opcodes.pl index 11a1b002f..23ef60c16 100755 --- a/ir/be/scripts/generate_new_opcodes.pl +++ b/ir/be/scripts/generate_new_opcodes.pl @@ -125,6 +125,12 @@ foreach my $op (keys(%nodes)) { $arg_names .= ", ".$href->{"name"}; } } + + # we have additional attribute arguements + if (exists($n{"attr"})) { + $complete_args .= ", ".$n{"attr"}; + } + $complete_args = substr($complete_args, 2); $temp .= ", $complete_args)"; push(@obst_constructor, $temp." {\n"); @@ -140,6 +146,7 @@ foreach my $op (keys(%nodes)) { $temp = " ir_node *res;\n"; $temp .= " ir_node *in[$arity];\n" if ($arity > 0); $temp .= " int flags = 0;\n"; + $temp .= " $arch\_attr_t *attr;\n" if (exists($n{"init_attr"})); undef my $in_req_var; undef my $out_req_var; @@ -182,9 +189,6 @@ foreach my $op (keys(%nodes)) { for (my $i = 1; $i <= $arity; $i++) { $temp .= " in[".($i - 1)."] = op".$i.";\n"; } - $temp .= " res = new_ir_node(db, irg, block, op_$op, mode, $arity, ".($arity > 0 ? "in" : "NULL").");\n"; - $temp .= " res = optimize_node(res);\n"; - $temp .= " irn_vrfy_irg(res, irg);\n\n"; # set flags if (exists($n{"irn_flags"})) { @@ -226,9 +230,21 @@ foreach my $op (keys(%nodes)) { $out_param = "NULL, 0"; } } + $temp .= "\n /* create node */\n"; + $temp .= " res = new_ir_node(db, irg, block, op_$op, mode, $arity, ".($arity > 0 ? "in" : "NULL").");\n"; + $temp .= "\n /* init node attributes */\n"; $temp .= " init_$arch\_attributes(res, flags, $in_param, $out_param);\n"; + if (exists($n{"init_attr"})) { + $temp .= " attr = get_$arch\_attr(res);\n"; + $temp .= $n{"init_attr"}."\n"; + } + + $temp .= "\n /* optimize node */\n"; + $temp .= " res = optimize_node(res);\n"; + $temp .= " irn_vrfy_irg(res, irg);\n\n"; + $temp .= "\n return res;\n"; push(@obst_constructor, $temp); -- 2.20.1