X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fscripts%2Fgenerate_regalloc_if.pl;h=70f6e4fb48be35d8159fb140ef008d06ad12b6ae;hb=45ecc187cee7107c83c1f9618a1e1e586df73644;hp=6dff9e14332155fd1c357c9929dc5252aa556e8a;hpb=c1f5f60f63d931d362b5bb4b2bb79c5e9224374e;p=libfirm diff --git a/ir/be/scripts/generate_regalloc_if.pl b/ir/be/scripts/generate_regalloc_if.pl index 6dff9e143..70f6e4fb4 100755 --- a/ir/be/scripts/generate_regalloc_if.pl +++ b/ir/be/scripts/generate_regalloc_if.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # -# Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. +# Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. # # This file is part of libFirm. # @@ -34,7 +34,6 @@ my $target_dir = $ARGV[1]; our $arch; our %reg_classes; our %cpu; -our %flags = (); # include spec file @@ -121,12 +120,29 @@ foreach my $class_name (keys(%reg_classes)) { $class_name = $arch."_".$class_name; $numregs = "N_".$class_name."_REGS"; $class_ptr = "&".$arch."_reg_classes[CLASS_".$class_name."]"; - $class_mode = pop(@class)->{"mode"}; + my $flags = pop(@class); + $class_mode = $flags->{"mode"}; + my $class_flags = $flags->{"flags"}; + my $flags_prepared = ""; + + if(defined($class_flags)) { + my $first = 1; + foreach my $flag (split(/\|/, $class_flags)) { + if(!$first) { + $flags_prepared .= "|"; + } else { + $first = 0; + } + $flags_prepared .= "arch_register_class_flag_$flag"; + } + } else { + $flags_prepared = "0"; + } push(@obst_regtypes_decl, "extern const arch_register_t ${class_name}_regs[$numregs];\n"); push(@obst_classdef, "\tCLASS_$class_name = $class_idx,\n"); - push(@obst_regclasses, "{ \"$class_name\", $numregs, NULL, ".$class_name."_regs }"); + push(@obst_regclasses, "{ $class_idx, \"$class_name\", $numregs, NULL, ".$class_name."_regs, $flags_prepared }"); my $idx = 0; push(@obst_reginit, "\t/* set largest possible mode for '$class_name' */\n"); @@ -165,16 +181,6 @@ foreach my $class_name (keys(%reg_classes)) { $class_idx++; } -push(@obst_regdef, "enum flag_indices {\n"); -foreach my $flag (keys(%flags)) { - my %f = %{ $flags{$flag} }; - - push(@obst_regdef, "\tFLAG_$flag,\n"); -} -push(@obst_regdef, "\tFLAG_LAST\n"); -push(@obst_regdef, "};\n"); -push(@obst_regtypes_decl, "extern arch_flag_t ${arch}_flags[];\n"); - push(@obst_classdef, "\tN_CLASSES = ".scalar(keys(%reg_classes))."\n"); push(@obst_classdef, "};\n\n");