diff options
Diffstat (limited to 'bcc/preserve.c')
-rw-r--r-- | bcc/preserve.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/bcc/preserve.c b/bcc/preserve.c index c8a8cea..779efc2 100644 --- a/bcc/preserve.c +++ b/bcc/preserve.c @@ -6,6 +6,7 @@ #include "gencode.h" #include "reg.h" #include "type.h" +#include "scan.h" /* change stack ptr without changing condition codes */ @@ -18,11 +19,20 @@ bool_pt absflag; #ifdef FRAMEPOINTER if (newsp != framep || (!(bool_t) absflag && switchnow != NULL)) { + int off; outleasp(); if (!(bool_t) absflag && switchnow != NULL) - outswoffset(newsp); + outswoffset(off = newsp); else - outoffset(newsp - framep); + outoffset(off = newsp - framep); +#ifndef NO_DEL_PUSH + if (optimise && !callersaves && off < 0) + { + outstr("+"); + outstr(funcname); + outstr(".off"); + } +#endif outindframereg(); outnl(); } |