From: ceriel Date: Mon, 18 Nov 1991 09:51:35 +0000 (+0000) Subject: Added labeldef stuff X-Git-Tag: release-5-5~625 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=be802650cac843683402fd54430a75ff832ef964;p=ack.git Added labeldef stuff --- diff --git a/mach/i386/ncg/mach.c b/mach/i386/ncg/mach.c index c437d6b47..50fc7b20d 100644 --- a/mach/i386/ncg/mach.c +++ b/mach/i386/ncg/mach.c @@ -57,10 +57,16 @@ string holstr(n) word n; { } */ +#ifdef REGVARS +full lbytes; +#endif + prolog(nlocals) full nlocals; { fputs("push ebp\nmov ebp,esp\n", codefile); - if (nlocals == 0) return; +#ifdef REGVARS + lbytes = nlocals; +#else #ifdef NOTDEF probably not better on 386. switch(nlocals) { @@ -77,6 +83,7 @@ prolog(nlocals) full nlocals; { break; } #endif +#endif } #ifdef REGVARS @@ -105,6 +112,22 @@ 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 (firstreg == 1) { + fputs("push edi\n", codefile); + if (si_off != -1) fputs("push esi\n", codefile); + } + else if (firstreg == -1) { + fputs("push esi\n", codefile); + if (di_off != -1) fputs("push edi\n", codefile); + } + if (si_off >= 0) + fprintf(codefile, "mov esi,%ld(ebp)\n", si_off); + if (di_off >= 0) + fprintf(codefile, "mov edi,%ld(ebp)\n", di_off); } regsave(regstr, off, size) @@ -114,16 +137,10 @@ regsave(regstr, off, size) if (strcmp(regstr, "esi") == 0) { if (! firstreg) firstreg = -1; si_off = off; - fputs("push esi\n", codefile); - if (off >= 0) - fprintf(codefile, "mov esi,%ld(ebp)\n", off); } else { if (! firstreg) firstreg = 1; di_off = off; - fputs("push edi\n", codefile); - if (off >= 0) - fprintf(codefile, "mov edi,%ld(ebp)\n", off); } } diff --git a/mach/i386/ncg/table b/mach/i386/ncg/table index 66dfee8ee..25b4bb0ba 100644 --- a/mach/i386/ncg/table +++ b/mach/i386/ncg/table @@ -2062,6 +2062,16 @@ pat cui leaving cuu pat cuu +pat loc loc cii zeq $1==1 +with GENREG STACK +gen test %1.1 + je {label, $4} + +pat loc loc cii zne $1==1 +with GENREG STACK +gen test %1.1 + jne {label, $4} + pat loc loc cii loc and zeq $4<256 && $4>=0 && $5==4 && $1==1 && $2==4 leaving loc $4 and $5 zeq $6 pat loc loc cii loc and zne $4<256 && $4>=0 && $5==4 && $1==1 && $2==4 @@ -2620,7 +2630,26 @@ pat loc cmu zne $1<256 && $1>=0 && $2==4 call loccmuzxx("jne") * Group 13 : Branch Instructions * *******************************************************************/ -pat bra +pat lab topeltsize($1)==4 && !fallthrough($1) + with STACK + kills ALL + gen labeldef $1 yields eax + +pat lab topeltsize($1)==4 && fallthrough($1) + with ACC STACK + kills ALL + gen labeldef $1 yields eax + +pat lab topeltsize($1)!=4 + with STACK + kills ALL + gen labeldef $1 + +pat bra topeltsize($1)==4 + with ACC STACK + gen jmp {label,$1} + +pat bra topeltsize($1)!=4 with STACK gen jmp {label,$1}