}
use strict "subs";
+my $comment_string_quoted = quotemeta($comment_string);
+
my $target_c = $target_dir."/gen_".$arch."_emitter.c";
my $target_h = $target_dir."/gen_".$arch."_emitter.h";
my $cnt = 0;
my $buf = 'cmd_buf';
- foreach $template (split(/$comment_string/, $fmt, 2)) {
+ push(@obst_func, " cmnt_buf[0] = '\\0';\n");
+ foreach $template (split(/$comment_string_quoted/, $fmt, 2)) {
my @params;
my $res = "";
$cnt++;
}
# 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";
}
}
}
- 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");
}