shithub: mc

Download patch

ref: 3e6f824c6113b7c4defaa01cf25cd94d1b050f69
parent: 36ce95316220f7b7bf4bcb205533b919a65ef750
author: Ori Bernstein <[email protected]>
date: Fri May 4 19:08:03 EDT 2012

Add in pseudo-regs.

--- a/8/asm.h
+++ b/8/asm.h
@@ -15,6 +15,7 @@
 
 typedef enum {
     Loclbl,
+    Locpseudo,
     Locreg,
     Locmem,
     Locmeml, /* label offset */
@@ -38,6 +39,7 @@
         char *lbl;
         Reg   reg;
         long  lit;
+        long  pseudo;
         /* disp(base + index) */
         struct {
             /* only one of lbldisp and constdisp may be used */
--- a/8/isel.c
+++ b/8/isel.c
@@ -55,6 +55,16 @@
     return l;
 }
 
+Loc *locpseudo(Loc *l, Mode mode)
+{
+    static long nextpseudo;
+
+    l->type = Locpseudo;
+    l->mode = mode;
+    l->pseudo = nextpseudo++;
+    return l;
+}
+
 Loc *locmem(Loc *l, long disp, Reg base, Reg idx, Mode mode)
 {
     l->type = Locmem;
@@ -260,6 +270,9 @@
         case Locreg:
             fprintf(fd, "%s", regnames[l->reg]);
             break;
+        case Locpseudo:
+            fprintf(fd, "%%P%ld", l->pseudo);
+            break;
         case Locmem:
         case Locmeml:
             if (l->type == Locmem) {
@@ -275,7 +288,6 @@
                 fprintf(fd, ",%s", regnames[l->mem.idx]);
             if (l->mem.base)
                 fprintf(fd, ")");
-            break;
             break;
         case Loclit:
             break;