scripts: Use a string instead of magic numbers for register types.
authorChristoph Mallon <christoph.mallon@gmx.de>
Tue, 27 Nov 2012 20:46:40 +0000 (21:46 +0100)
committerChristoph Mallon <christoph.mallon@gmx.de>
Tue, 27 Nov 2012 20:47:47 +0000 (21:47 +0100)
ir/be/TEMPLATE/TEMPLATE_spec.pl
ir/be/amd64/amd64_spec.pl
ir/be/ia32/ia32_spec.pl
ir/be/scripts/generate_regalloc_if.pl

index 17179ad..adec64b 100644 (file)
@@ -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 => [
index 1564a75..cdc6d97 100644 (file)
@@ -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 => [
index 271476f..d5d88ba 100644 (file)
@@ -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
index b406e38..bfc88ff 100755 (executable)
@@ -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};