X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fscripts%2Fgenerate_emitter_new.pl;h=28aa150ee914ddd5d505add803539e5fb1b9f4c5;hb=2adf84106c02caf097c2d6cf1764706bdc437bcc;hp=e4c4516204b1aca3fc3946af3fbeb7efeb5ef643;hpb=a9b231ef28ed7f6d26d848380ef6f37e23095e57;p=libfirm diff --git a/ir/be/scripts/generate_emitter_new.pl b/ir/be/scripts/generate_emitter_new.pl index e4c451620..28aa150ee 100755 --- a/ir/be/scripts/generate_emitter_new.pl +++ b/ir/be/scripts/generate_emitter_new.pl @@ -13,25 +13,9 @@ our $specfile; our $target_dir; our $arch; -our $comment_string; -our $comment_string_end; our %nodes; our %emit_templates; -our $spec_version = 1; - -# include spec file - -my $return; - -no strict "subs"; -unless ($return = do $specfile) { - warn "couldn't parse $specfile: $@" if $@; - warn "couldn't do $specfile: $!" unless defined $return; - warn "couldn't run $specfile" unless $return; -} -use strict "subs"; - -my $comment_string_quoted = quotemeta($comment_string); +our $finish_line_template = "be_emit_finish_line_gas(emit, node);"; my $target_c = $target_dir."/gen_".$arch."_emitter.c"; my $target_h = $target_dir."/gen_".$arch."_emitter.h"; @@ -49,24 +33,24 @@ sub create_emitter { our $arch; my @tokens = ($template =~ m/[^\%]+|\%[a-zA-Z_][a-zA-Z0-9_]*|\%./g); - push(@{$result}, "${indent}${arch}_emit_char(env, '\t');\n"); + push(@{$result}, "${indent}be_emit_char(emit, '\t');\n"); for (@tokens) { SWITCH: { if (/%\./) { last SWITCH; } - if (/%%/) { push(@{$result}, "${indent}${arch}_emit_char(env, '%');\n"); last SWITCH; } + if (/%%/) { push(@{$result}, "${indent}be_emit_char(emit, '%');\n"); last SWITCH; } if (/%(.+)/) { if(defined($emit_templates{$1})) { push(@{$result}, "${indent}$emit_templates{$1}\n"); } else { print "Warning: No emit_template defined for '$1'\n"; - push(@{$result}, "${indent}$1(env, node);\n"); + push(@{$result}, "${indent}$1(emit, node);\n"); } last SWITCH; } - push(@{$result}, "${indent}${arch}_emit_cstring(env, \"$_\");\n"); + push(@{$result}, "${indent}be_emit_cstring(emit, \"$_\");\n"); } } - push(@{$result}, "${indent}${arch}_emit_finish_line(env, node);\n"); + push(@{$result}, "${indent}${finish_line_template}\n"); } @@ -77,7 +61,7 @@ foreach my $op (keys(%nodes)) { # skip this node description if no emit information is available next if (!defined($n{"emit"})); - $line = "static void emit_".$arch."_".$op."(${arch}_emit_env_t *env, const ir_node *node)"; + $line = "static void emit_${arch}_${op}(${arch}_emit_env_t *env, const ir_node *node)"; push(@obst_register, " BE_EMIT($op);\n"); @@ -88,9 +72,9 @@ foreach my $op (keys(%nodes)) { } push(@obst_func, $line." {\n"); - my @emit = split(/\n/, $n{"emit"}); + push(@obst_func, "\tbe_emit_env_t *emit = env->emit;\n"); - if($spec_version < 3) { last; } + my @emit = split(/\n/, $n{"emit"}); foreach my $template (@emit) { # substitute only lines, starting with a '.' @@ -124,9 +108,9 @@ print OUT< +#include "config.h" #endif #include