}
*/
+#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) {
break;
}
#endif
+#endif
}
#ifdef REGVARS
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)
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);
}
}
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
* 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}