From 34c67698ef188cf9764fc8a79424a9e64b1850ef Mon Sep 17 00:00:00 2001 From: David Given Date: Fri, 15 Feb 2019 23:01:33 +0100 Subject: [PATCH] Generate the proper function prologues for big stack frames. --- mach/i80/ncg/mach.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mach/i80/ncg/mach.c b/mach/i80/ncg/mach.c index 30682eb82..968ececbe 100644 --- a/mach/i80/ncg/mach.c +++ b/mach/i80/ncg/mach.c @@ -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; -- 2.34.1