X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fscripts%2Fgenerate_emitter.pl;h=a927edbf052274d04e404dcbe85cfcaf9fa959fc;hb=ef2d40e97c1eaa02dc55b50c529e0c892f827263;hp=8c367d18a1695023b4f29b99d0585e48bd38e1c0;hpb=21273f8f8bbcdeaeb6dde86cd7547bc3359822b0;p=libfirm diff --git a/ir/be/scripts/generate_emitter.pl b/ir/be/scripts/generate_emitter.pl index 8c367d18a..a927edbf0 100755 --- a/ir/be/scripts/generate_emitter.pl +++ b/ir/be/scripts/generate_emitter.pl @@ -64,6 +64,7 @@ foreach my $op (keys(%nodes)) { my $cnt = 0; my $buf = 'cmd_buf'; + push(@obst_func, " cmnt_buf[0] = '\\0';\n"); foreach $template (split(/$comment_string_quoted/, $fmt, 2)) { my @params; my $res = ""; @@ -78,27 +79,34 @@ foreach my $op (keys(%nodes)) { } # substitute all format parameter - while ($template =~ /\%([ASD])(\d)|\%([COM])|\%(\w+)/) { + while ($template =~ /(\%\%)|\%([ASDX])(\d)|\%([COM])|\%(\w+)/) { $res .= $`; # get everything before the match - if ($1 && $1 eq "S") { + if ($1) { + $res .= "%%"; + } + elsif ($2 && $2 eq "S") { + push(@params, "n"); + $res .= "%".$3."S"; # substitute %Sx with %xS + } + elsif ($2 && $2 eq "D") { push(@params, "n"); - $res .= "%".$2."S"; # substitute %Sx with %xS + $res .= "%".$3."D"; # substitute %Dx with %xD } - elsif ($1 && $1 eq "D") { + elsif ($2 && $2 eq "X") { push(@params, "n"); - $res .= "%".$2."D"; # substitute %Dx with %xD + $res .= "%".$3."X"; # substitute %Xx with %xX } - elsif ($1 && $1 eq "A") { - push(@params, "get_irn_n(n, ".($2 - 1).")"); + elsif ($2 && $2 eq "A") { + push(@params, "get_irn_n(n, ".($3 - 1).")"); $res .= "%+F"; } - elsif ($3) { + elsif ($4) { push(@params, "n"); - $res .= "%".$3; + $res .= "%".$4; } - elsif ($4) { # backend provided function to call, has to return a string - push(@params, $4."(n, env)"); + elsif ($5) { # backend provided function to call, has to return a string + push(@params, $5."(n, env)"); $res .= "\%s"; } @@ -117,7 +125,7 @@ foreach my $op (keys(%nodes)) { } } - push(@obst_func, ' lc_efprintf(arg_env, F, "\t%-35s %-60s /* %+F */\n", cmd_buf, cmnt_buf, n);'."\n"); + push(@obst_func, ' lc_efprintf(arg_env, F, "\t%-35s %-60s /* %+F (%+G) */\n", cmd_buf, cmnt_buf, n, n);'."\n"); push(@obst_func, "}\n\n"); }