Fix: sometimes did not reserve space for local on a mes ms_gto
authorceriel <none@none>
Fri, 12 Jun 1992 09:46:43 +0000 (09:46 +0000)
committerceriel <none@none>
Fri, 12 Jun 1992 09:46:43 +0000 (09:46 +0000)
mach/i386/ncg/mach.c
mach/i86/ncg/mach.c

index 3388c66..a3d874b 100644 (file)
@@ -78,7 +78,7 @@ prolog(nlocals) full nlocals; {
                break;
        default:
 #endif
-               fprintf(codefile, "\tsub\tesp,%ld\n",nlocals);
+               fprintf(codefile, "sub\tesp,%ld\n",nlocals);
 #ifdef NOTDEF
                break;
        }
@@ -112,10 +112,12 @@ i_regsave()
 
 f_regsave()
 {
-       if (si_off == -lbytes) lbytes -= 4;
-       if (di_off == -lbytes) lbytes -= 4;
-       if (si_off == -lbytes) lbytes -= 4;
-       if (lbytes) fprintf(codefile, "\tsub\tesp,%ld\n",(long) lbytes);
+       if (si_off != di_off) {
+               if (si_off == -lbytes) lbytes -= 4;
+               if (di_off == -lbytes) lbytes -= 4;
+               if (si_off == -lbytes) lbytes -= 4;
+       }
+       if (lbytes) fprintf(codefile, "sub\tesp,%ld\n",(long) lbytes);
        if (firstreg == 1) {
                fputs("push edi\n", codefile);
                if (si_off != -1) fputs("push esi\n", codefile);
index b56d5f9..ba4144e 100644 (file)
@@ -103,9 +103,11 @@ i_regsave()
 
 f_regsave()
 {
-       if (di_off == -lbytes) lbytes -= 2;
-       if (si_off == -lbytes) lbytes -= 2;
-       if (di_off == -lbytes) lbytes -= 2;
+       if (si_off != di_off) {
+               if (di_off == -lbytes) lbytes -= 2;
+               if (si_off == -lbytes) lbytes -= 2;
+               if (di_off == -lbytes) lbytes -= 2;
+       }
        switch (lbytes) {
        case 4: fputs("\tpush\tax\n", codefile);
        case 2: fputs("\tpush\tax\n", codefile);