X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fscripts%2Fgenerate_emitter_new.pl;h=3376eb1f1ae32dd10320c0dbec49cfb4e6ab09e8;hb=040868cbcb834457c8195efbbccf221123c7f153;hp=eeb432d782d55cb66e36cb63314f0a4c87684aa0;hpb=a2c7ec077bd2dec4480805fd8f847ac58a10982d;p=libfirm diff --git a/ir/be/scripts/generate_emitter_new.pl b/ir/be/scripts/generate_emitter_new.pl index eeb432d78..3376eb1f1 100755 --- a/ir/be/scripts/generate_emitter_new.pl +++ b/ir/be/scripts/generate_emitter_new.pl @@ -1,5 +1,24 @@ #!/usr/bin/perl -w +# +# Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. +# +# This file is part of libFirm. +# +# This file may be distributed and/or modified under the terms of the +# GNU General Public License version 2 as published by the Free Software +# Foundation and appearing in the file LICENSE.GPL included in the +# packaging of this file. +# +# Licensees holding valid libFirm Professional Edition licenses may use +# this file in accordance with the libFirm Commercial License. +# Agreement provided with the Software. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE. +# + # This script generates C code which emits assembler code for the # assembler ir nodes. It takes a "emit" key from the node specification # and substitutes lines starting with . with a corresponding fprintf(). @@ -15,6 +34,7 @@ our $target_dir; our $arch; our %nodes; our %emit_templates; +our $finish_line_template = "be_emit_finish_line_gas(node);"; my $target_c = $target_dir."/gen_".$arch."_emitter.c"; my $target_h = $target_dir."/gen_".$arch."_emitter.h"; @@ -32,24 +52,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('\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('%');\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(node);\n"); } last SWITCH; } - push(@{$result}, "${indent}${arch}_emit_cstring(env, \"$_\");\n"); + push(@{$result}, "${indent}be_emit_cstring(\"$_\");\n"); } } - push(@{$result}, "${indent}${arch}_emit_finish_line(env, node);\n"); + push(@{$result}, "${indent}${finish_line_template}\n"); } @@ -60,17 +80,19 @@ 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}(const ir_node *node)"; push(@obst_register, " BE_EMIT($op);\n"); if($n{"emit"} eq "") { push(@obst_func, $line." {\n"); + push(@obst_func, "\t(void) node;\n"); push(@obst_func, "}\n\n"); next; } push(@obst_func, $line." {\n"); + my @emit = split(/\n/, $n{"emit"}); foreach my $template (@emit) { @@ -93,23 +115,23 @@ my $creation_time = localtime(time()); my $tmp = uc($arch); print OUT< +#include "config.h" #endif #include