Allow asm names for registers which are different from the friendly names shown
authorDavid Given <dg@cowlark.com>
Sat, 15 Oct 2016 09:42:47 +0000 (11:42 +0200)
committerDavid Given <dg@cowlark.com>
Sat, 15 Oct 2016 09:42:47 +0000 (11:42 +0200)
in the tracing (because PowerPC register names are just numbers).

mach/proto/mcg/hop.c
mach/proto/mcg/reg.c
mach/proto/mcg/reg.h
mach/proto/mcg/table
util/mcgg/gram.y
util/mcgg/iburg.c
util/mcgg/iburg.h
util/mcgg/mcgg.h

index 6b84c62..a362f8b 100644 (file)
@@ -123,7 +123,7 @@ char* hop_render(struct hop* hop)
             case INSEL_HREG:
             {
                 struct hreg* hreg = insel->u.hreg;
-                appendf("%s", hreg->name);
+                appendf("%s", hreg->realname);
                 break;
             }
 
@@ -134,7 +134,7 @@ char* hop_render(struct hop* hop)
                 if (!hreg)
                     hreg = pmap_findright(&hop->regsout, vreg);
                 if (hreg)
-                    appendf("%s", hreg->name);
+                    appendf("%s", hreg->realname);
                 else
                     appendf("%%%d", vreg->id);
                                break;
index 848c1cd..bb72665 100644 (file)
@@ -13,6 +13,7 @@ struct hreg* new_hreg(const struct burm_register_data* brd)
 {
        struct hreg* hreg = calloc(1, sizeof *hreg);
        hreg->name = brd->name;
+    hreg->realname = brd->realname;
        hreg->attrs = brd->attrs;
        hreg->is_stacked = false;
        return hreg;
@@ -22,6 +23,7 @@ struct hreg* new_stacked_hreg(int offset, uint32_t attrs)
 {
        struct hreg* hreg = calloc(1, sizeof *hreg);
        hreg->name = aprintf("stacked_%d", offset);
+    hreg->realname = hreg->name;
        hreg->attrs = attrs;
        hreg->is_stacked = true;
        hreg->offset = offset;
index 7531090..f1b5e1b 100644 (file)
@@ -14,6 +14,7 @@ struct phicongruence
 struct hreg
 {
        const char* name;
+    const char* realname;
     uint32_t type;
        uint32_t attrs;
        bool is_stacked;
index dce199c..ad94b05 100644 (file)
@@ -7,71 +7,71 @@ REGISTERS
      * a register into another register (e.g. for eviction).
      */
 
-    r12 bytes4! int! volatile; 
-    r11 bytes4! int! volatile; 
-    r10 bytes4! int! volatile; 
-    r9  bytes4! int! volatile;
-    r8  bytes4! int! volatile;
-    r7  bytes4! int! volatile;
-    r6  bytes4! int! volatile;
-    r5  bytes4! int! volatile;
-    r4  bytes4! int! volatile;
-    r3  bytes4! int! ret volatile;
-
-    r31 bytes4! int!; 
-    r30 bytes4! int!; 
-    r29 bytes4! int!; 
-    r28 bytes4! int!; 
-    r27 bytes4! int!; 
-    r26 bytes4! int!; 
-    r25 bytes4! int!; 
-    r24 bytes4! int!; 
-    r23 bytes4! int!; 
-    r22 bytes4! int!; 
-    r21 bytes4! int!; 
-    r20 bytes4! int!; 
-    r19 bytes4! int!; 
-    r18 bytes4! int!; 
-    r17 bytes4! int!; 
-    r16 bytes4! int!;
-    r15 bytes4! int!;
-    r14 bytes4! int!;
-
-    f14 bytes4! float! volatile;
-    f13 bytes4! float! volatile;
-    f12 bytes4! float! volatile;
-    f11 bytes4! float! volatile;
-    f10 bytes4! float! volatile;
-    f9  bytes4! float! volatile;
-    f8  bytes4! float! volatile;
-    f7  bytes4! float! volatile;
-    f6  bytes4! float! volatile;
-    f5  bytes4! float! volatile;
-    f4  bytes4! float! volatile;
-    f3  bytes4! float! volatile;
-    f2  bytes4! float! volatile;
-    f1  bytes4! float! volatile;
-    f0  bytes4! float! volatile;
-
-    f31 bytes4! float!;
-    f30 bytes4! float!;
-    f29 bytes4! float!;
-    f28 bytes4! float!;
-    f27 bytes4! float!;
-    f26 bytes4! float!;
-    f25 bytes4! float!;
-    f24 bytes4! float!;
-    f23 bytes4! float!;
-    f22 bytes4! float!;
-    f21 bytes4! float!;
-    f20 bytes4! float!;
-    f19 bytes4! float!;
-    f18 bytes4! float!;
-    f17 bytes4! float!;
-    f16 bytes4! float!;
-    f15 bytes4! float!;
-
-       cr0 cr!;
+    r12 "12" bytes4! int! volatile; 
+    r11 "11" bytes4! int! volatile; 
+    r10 "10" bytes4! int! volatile; 
+    r9  "9"  bytes4! int! volatile;
+    r8  "8"  bytes4! int! volatile;
+    r7  "7"  bytes4! int! volatile;
+    r6  "6"  bytes4! int! volatile;
+    r5  "5"  bytes4! int! volatile;
+    r4  "4"  bytes4! int! volatile;
+    r3  "3"  bytes4! int! ret volatile;
+
+    r31 "31" bytes4! int!; 
+    r30 "30" bytes4! int!; 
+    r29 "29" bytes4! int!; 
+    r28 "28" bytes4! int!; 
+    r27 "27" bytes4! int!; 
+    r26 "26" bytes4! int!; 
+    r25 "25" bytes4! int!; 
+    r24 "24" bytes4! int!; 
+    r23 "23" bytes4! int!; 
+    r22 "22" bytes4! int!; 
+    r21 "21" bytes4! int!; 
+    r20 "20" bytes4! int!; 
+    r19 "19" bytes4! int!; 
+    r18 "18" bytes4! int!; 
+    r17 "17" bytes4! int!; 
+    r16 "16" bytes4! int!;
+    r15 "15" bytes4! int!;
+    r14 "14" bytes4! int!;
+
+    f14 "14" bytes4! float! volatile;
+    f13 "13" bytes4! float! volatile;
+    f12 "12" bytes4! float! volatile;
+    f11 "11" bytes4! float! volatile;
+    f10 "10" bytes4! float! volatile;
+    f9  "9"  bytes4! float! volatile;
+    f8  "8"  bytes4! float! volatile;
+    f7  "7"  bytes4! float! volatile;
+    f6  "6"  bytes4! float! volatile;
+    f5  "5"  bytes4! float! volatile;
+    f4  "4"  bytes4! float! volatile;
+    f3  "3"  bytes4! float! volatile;
+    f2  "2"  bytes4! float! volatile;
+    f1  "1"  bytes4! float! volatile;
+    f0  "0"  bytes4! float! volatile;
+
+    f31 "31" bytes4! float!;
+    f30 "30" bytes4! float!;
+    f29 "29" bytes4! float!;
+    f28 "28" bytes4! float!;
+    f27 "27" bytes4! float!;
+    f26 "26" bytes4! float!;
+    f25 "25" bytes4! float!;
+    f24 "24" bytes4! float!;
+    f23 "23" bytes4! float!;
+    f22 "22" bytes4! float!;
+    f21 "21" bytes4! float!;
+    f20 "20" bytes4! float!;
+    f19 "19" bytes4! float!;
+    f18 "18" bytes4! float!;
+    f17 "17" bytes4! float!;
+    f16 "16" bytes4! float!;
+    f15 "15" bytes4! float!;
+            
+       cr0 "cr0" cr!;
 
 
 DECLARATIONS
index 748d3fa..9155271 100644 (file)
@@ -71,7 +71,7 @@ registers
     ;
 
 register
-    : ID                              { $$ = makereg($1); }
+    : ID QFRAGMENT                    { $$ = makereg($1, $2); }
     | register ID                     { $$ = $1; addregattr($1, $2, false); }
     | register ID '!'                 { $$ = $1; addregattr($1, $2, true); }
     ;
index ff8b1e9..3908532 100644 (file)
@@ -253,7 +253,7 @@ static void* install(const char* name)
        return &p->sym;
 }
 
-struct reg* makereg(const char* id)
+struct reg* makereg(const char* id, const char* realname)
 {
        struct reg* p = smap_get(&registers, id);
        static int number = 0;
@@ -262,6 +262,7 @@ struct reg* makereg(const char* id)
                yyerror("redefinition of '%s'", id);
        p = calloc(1, sizeof(*p));
        p->name = id;
+       p->realname = realname;
        p->number = number++;
        smap_put(&registers, id, p);
 
@@ -591,7 +592,8 @@ static void emitregisters(void)
                struct reg* r = registers.item[i].right;
                assert(r->number == i);
 
-               print("%1{ \"%s\", 0x%x, 0x%x },\n", r->name, r->type, r->attrs);
+               print("%1{ \"%s\", \"%s\", 0x%x, 0x%x },\n",
+                       r->name, r->realname, r->type, r->attrs);
        }
        print("%1{ NULL }\n");
        print("};\n\n");
index 689a841..48397c2 100644 (file)
@@ -58,7 +58,8 @@ struct terminfo
 
 struct reg
 {
-       const char* name;      /* register name */
+       const char* name;      /* friendly register name */
+       const char* realname;  /* name used in assembly output */
        int number;            /* identifying number */
        uint32_t attrs;        /* bitfield of register attributes */
        uint32_t type;         /* register type */
@@ -70,7 +71,7 @@ struct regattr
        int number;            /* identifying number */
 };
 
-extern struct reg* makereg(const char* name);
+extern struct reg* makereg(const char* name, const char* realname);
 extern void addregattr(struct reg* reg, const char* regattr, bool exact);
 extern struct regattr* getregattr(const char* name);
 
index 242c1ef..2631e00 100644 (file)
@@ -64,6 +64,7 @@ extern const struct burm_instruction_data burm_instruction_data[];
 struct burm_register_data
 {
     const char* name;
+    const char* realname;
     uint32_t type;
     uint32_t attrs;
 };