Generate the proper function prologues for big stack frames.
authorDavid Given <dg@cowlark.com>
Fri, 15 Feb 2019 22:01:33 +0000 (23:01 +0100)
committerDavid Given <dg@cowlark.com>
Fri, 15 Feb 2019 22:01:33 +0000 (23:01 +0100)
mach/i80/ncg/mach.c

index 30682eb..968ecec 100644 (file)
@@ -49,16 +49,18 @@ void con_mult(sz) word sz;
 
 void prolog(full nlocals)
 {
-       if (nlocals == 0)
+       int16_t adjustment = -nlocals;
+
+       if (adjustment == 0)
                fprintf(codefile, "\tcall .pro0\n");
-       else if (nlocals == 2)
+       else if (adjustment == -2)
                fprintf(codefile, "\tcall .pro2\n");
-       else if (nlocals == 4)
+       else if (adjustment == -4)
                fprintf(codefile, "\tcall .pro4\n");
-       else if (nlocals < 0x100)
-               fprintf(codefile, "\tcall .probyte\n\t.data1 %d\n", -nlocals);
+       else if ((adjustment >= -128) && (adjustment <= 127))
+               fprintf(codefile, "\tcall .probyte\n\t.data1 %d\n", adjustment);
        else
-               fprintf(codefile, "\tcall .proword\n\t.data2 %d\n", -nlocals);
+               fprintf(codefile, "\tcall .proword\n\t.data2 %d\n", adjustment);
 }
 
 void mes(type) word type;