From 19e1d3e44d1bca743b67a9dd9369bba732ed318d Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Tue, 27 Nov 2012 21:46:40 +0100 Subject: [PATCH] scripts: Use a string instead of magic numbers for register types. --- ir/be/TEMPLATE/TEMPLATE_spec.pl | 12 ++++----- ir/be/amd64/amd64_spec.pl | 4 +-- ir/be/ia32/ia32_spec.pl | 36 +++++++++++---------------- ir/be/scripts/generate_regalloc_if.pl | 28 +-------------------- 4 files changed, 24 insertions(+), 56 deletions(-) diff --git a/ir/be/TEMPLATE/TEMPLATE_spec.pl b/ir/be/TEMPLATE/TEMPLATE_spec.pl index 17179adb3..adec64bad 100644 --- a/ir/be/TEMPLATE/TEMPLATE_spec.pl +++ b/ir/be/TEMPLATE/TEMPLATE_spec.pl @@ -56,10 +56,10 @@ $mode_fp = "mode_F"; # mode used by floatingpoint registers # comment: OPTIONAL comment for the node constructor # # register types: -# 0 - no special type -# 1 - ignore (do not assign this register) -# 2 - the register is a virtual one -# 4 - register represents a state +# none - no special type +# ignore - ignore (do not assign this register) +# virtual - the register is a virtual one +# state - register represents a state # NOTE: Last entry of each class is the largest Firm-Mode a register can hold %reg_classes = ( gp => [ @@ -77,8 +77,8 @@ $mode_fp = "mode_F"; # mode used by floatingpoint registers { name => "r11" }, { name => "r12" }, { name => "r13" }, - { name => "sp", realname => "r14", type => 1 }, # stackpointer - { name => "bp", realname => "r15", type => 1 }, # basepointer + { name => "sp", realname => "r14", type => "ignore" }, # stackpointer + { name => "bp", realname => "r15", type => "ignore" }, # basepointer { mode => $mode_gp } ], fp => [ diff --git a/ir/be/amd64/amd64_spec.pl b/ir/be/amd64/amd64_spec.pl index 1564a75ed..cdc6d97de 100644 --- a/ir/be/amd64/amd64_spec.pl +++ b/ir/be/amd64/amd64_spec.pl @@ -9,7 +9,7 @@ $arch = "amd64"; { name => "rdi", dwarf => 5 }, { name => "rbx", dwarf => 3 }, { name => "rbp", dwarf => 6 }, - { name => "rsp", dwarf => 7, type => $ignore }, # stackpointer? + { name => "rsp", dwarf => 7, type => "ignore" }, # stackpointer { name => "r8", dwarf => 8 }, { name => "r9", dwarf => 9 }, { name => "r10", dwarf => 10 }, @@ -18,7 +18,7 @@ $arch = "amd64"; { name => "r13", dwarf => 13 }, { name => "r14", dwarf => 14 }, { name => "r15", dwarf => 15 }, -# { name => "gp_NOREG", type => $ignore }, # we need a dummy register for NoReg nodes +# { name => "gp_NOREG", type => "ignore" }, # we need a dummy register for NoReg nodes { mode => "mode_Lu" } ], # fp => [ diff --git a/ir/be/ia32/ia32_spec.pl b/ir/be/ia32/ia32_spec.pl index 271476f47..d5d88bab7 100644 --- a/ir/be/ia32/ia32_spec.pl +++ b/ir/be/ia32/ia32_spec.pl @@ -9,12 +9,6 @@ $mode_gp = "mode_Iu"; $mode_flags = "mode_Iu"; $mode_fpcw = "ia32_mode_fpcw"; -# register types: -$normal = 0; # no special type -$ignore = 1; # ignore (do not assign this register) -$virtual = 2; # the register is a virtual one -$state = 4; # register represents a state -# NOTE: Last entry of each class is the largest Firm-Mode a register can hold %reg_classes = ( gp => [ { name => "edx", dwarf => 2 }, @@ -24,19 +18,19 @@ $state = 4; # register represents a state { name => "esi", dwarf => 6 }, { name => "edi", dwarf => 7 }, { name => "ebp", dwarf => 5 }, - { name => "esp", dwarf => 4, type => $ignore }, - { name => "gp_NOREG", type => $ignore | $virtual }, # we need a dummy register for NoReg nodes + { name => "esp", dwarf => 4, type => "ignore" }, + { name => "gp_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes { mode => $mode_gp } ], mmx => [ - { name => "mm0", dwarf => 29, type => $ignore }, - { name => "mm1", dwarf => 30, type => $ignore }, - { name => "mm2", dwarf => 31, type => $ignore }, - { name => "mm3", dwarf => 32, type => $ignore }, - { name => "mm4", dwarf => 33, type => $ignore }, - { name => "mm5", dwarf => 34, type => $ignore }, - { name => "mm6", dwarf => 35, type => $ignore }, - { name => "mm7", dwarf => 36, type => $ignore }, + { name => "mm0", dwarf => 29, type => "ignore" }, + { name => "mm1", dwarf => 30, type => "ignore" }, + { name => "mm2", dwarf => 31, type => "ignore" }, + { name => "mm3", dwarf => 32, type => "ignore" }, + { name => "mm4", dwarf => 33, type => "ignore" }, + { name => "mm5", dwarf => 34, type => "ignore" }, + { name => "mm6", dwarf => 35, type => "ignore" }, + { name => "mm7", dwarf => 36, type => "ignore" }, { mode => $mode_mmx, flags => "manual_ra" } ], xmm => [ @@ -48,7 +42,7 @@ $state = 4; # register represents a state { name => "xmm5", dwarf => 26 }, { name => "xmm6", dwarf => 27 }, { name => "xmm7", dwarf => 28 }, - { name => "xmm_NOREG", type => $ignore | $virtual }, # we need a dummy register for NoReg nodes + { name => "xmm_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes { mode => $mode_xmm } ], fp => [ @@ -60,15 +54,15 @@ $state = 4; # register represents a state { name => "st5", realname => "st(5)", dwarf => 16 }, { name => "st6", realname => "st(6)", dwarf => 17 }, { name => "st7", realname => "st(7)", dwarf => 18 }, - { name => "fp_NOREG", type => $ignore | $virtual }, # we need a dummy register for NoReg nodes + { name => "fp_NOREG", type => "ignore | virtual" }, # we need a dummy register for NoReg nodes { mode => $mode_fp87 } ], fp_cw => [ # the floating point control word - { name => "fpcw", dwarf => 37, type => $ignore | $state }, - { mode => $mode_fpcw, flags => "manual_ra|state" } + { name => "fpcw", dwarf => 37, type => "ignore | state" }, + { mode => $mode_fpcw, flags => "manual_ra | state" } ], flags => [ - { name => "eflags", dwarf => 9, type => 0 }, + { name => "eflags", dwarf => 9 }, { mode => "mode_Iu", flags => "manual_ra" } ], ); # %reg_classes diff --git a/ir/be/scripts/generate_regalloc_if.pl b/ir/be/scripts/generate_regalloc_if.pl index b406e38bd..bfc88ff32 100755 --- a/ir/be/scripts/generate_regalloc_if.pl +++ b/ir/be/scripts/generate_regalloc_if.pl @@ -56,31 +56,6 @@ sub map_flags { return join(" | ", map { "$prefix$_" } split(/\s*\|\s*/, $flags)); } -sub translate_reg_type { - my $t = shift; - - if ($t == 0) { - return "arch_register_type_none"; - } - else { - my @types; - - if ($t & 1) { - push(@types, "arch_register_type_ignore"); - } - - if ($t & 2) { - push(@types, "arch_register_type_virtual"); - } - - if ($t & 4) { - push(@types, "arch_register_type_state"); - } - - return join(" | ", @types); - } -} - # stacks for output my $regtypes_def; # stack for the register type variables definitions my $regtypes_decl;# stack for the register type variables declarations @@ -184,8 +159,7 @@ EOF foreach (@class) { my $name = $_->{"name"}; my $ucname = uc($name); - my $type = "arch_register_type_none"; - $type = translate_reg_type($_->{"type"}) if (exists($_->{"type"})); + my $type = map_flags("arch_register_type_", $_->{"type"}); # realname is name if not set by user $_->{"realname"} = $_->{"name"} if (! exists($_->{"realname"})); my $realname = $_->{realname}; -- 2.20.1