X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fscripts%2Fgenerate_machine.pl;h=cdcbd43aef90274a3f957ce374628772cf29b9b6;hb=bcf3b8a2fd69c37aa96da86f0f98f8b0e12fcbc5;hp=660fee5b926d8551ef2c5d2099142381c9244cc6;hpb=09d06f03734ea409b8f14a7227f4a75c43ca5a5d;p=libfirm diff --git a/ir/be/scripts/generate_machine.pl b/ir/be/scripts/generate_machine.pl index 660fee5b9..cdcbd43ae 100755 --- a/ir/be/scripts/generate_machine.pl +++ b/ir/be/scripts/generate_machine.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 the data structures for the machine description. # Creation: 2006/10/20 # $Id$ @@ -12,6 +31,7 @@ my $target_dir = $ARGV[1]; our $arch; our %cpu; +our %vliw; # include spec file @@ -19,9 +39,9 @@ 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; + die "Fatal error: couldn't parse $specfile: $@" if $@; + die "Fatal error: couldn't do $specfile: $!" unless defined $return; + die "Fatal error: couldn't run $specfile" unless $return; } use strict "subs"; @@ -36,10 +56,13 @@ my @obst_execunits; # stack for execunit variables my @obst_execunits_header; # stack for execunit variables my @obst_init_unit_types; # stack for unit type variable init -my $num_unit_types = scalar(keys(%cpu)); +my $bundle_size = exists($vliw{"bundle_size"}) ? $vliw{"bundle_size"} : 3; +my $bundles_per_cycle = exists($vliw{"bundles_per_cycle"}) ? $vliw{"bundles_per_cycle"} : 1; + my $tmp = uc($arch); my $idx = 0; my $has_desc = defined(%cpu); +my $num_unit_types = scalar(keys(%cpu)); if ($has_desc) { push(@obst_unit_tp_defs, "/* enum for execution unit types */\n"); @@ -49,18 +72,20 @@ if ($has_desc) { foreach my $unit_type (keys(%cpu)) { my $tp_name = "$tmp\_EXECUNIT_TP_$unit_type"; my @cur_tp = @{ $cpu{"$unit_type"} }; - my $num_units = scalar(@cur_tp); + my $num_units = scalar(@cur_tp) - 1; - push(@obst_init_unit_types, "\t{ $num_units, \"$unit_type\", $arch\_execution_units_$unit_type },\n"); + push(@obst_init_unit_types, "\t{ $num_units, ".shift(@cur_tp).", \"$unit_type\", $arch\_execution_units_$unit_type },\n"); push(@obst_execunits, "be_execution_unit_t $arch\_execution_units_".$unit_type."[$num_units];\n"); push(@obst_execunits_header, "extern be_execution_unit_t $arch\_execution_units_".$unit_type."[$num_units];\n"); push(@obst_unit_tp_defs, "\t$tp_name,\n"); push(@obst_init, "\n\t\t/* init of execution unit type $tp_name */\n"); push(@obst_init, "\t\tcur_unit_tp = &$arch\_execution_unit_types[$tp_name];\n"); + push(@obst_init, "\t\t(void) cur_unit_tp; /* avoid warning */\n"); push(@obst_unit_defs, "/* enum for execution units of type $unit_type */\n"); push(@obst_unit_defs, "enum $arch\_execunit_tp_$unit_type\_vals {\n"); + foreach my $unit (@cur_tp) { my $unit_name = "$tp_name\_$unit"; @@ -73,28 +98,28 @@ foreach my $unit_type (keys(%cpu)) { push(@obst_unit_tp_defs, "};\n\n") if ($has_desc); -open(OUT, ">$target_h") || die("Could not open $target_h, reason: $!\n"); +open(OUT, ">$target_h") || die("Fatal error: Could not open $target_h, reason: $!\n"); my $creation_time = localtime(time()); print OUT<$target_c") || die("Could not open $target_c, reason: $!\n"); +open(OUT, ">$target_c") || die("Fatal error: Could not open $target_c, reason: $!\n"); $creation_time = localtime(time()); print OUT<