summaryrefslogtreecommitdiff
path: root/bcc/preserve.c
diff options
context:
space:
mode:
Diffstat (limited to 'bcc/preserve.c')
-rw-r--r--bcc/preserve.c14
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();
}