aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-11-12 16:37:12 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1996-11-12 16:37:12 -0500
commitf277471f3676db9a6fdb52c3fb137f4a47bed4fc (patch)
tree42d45f31bd40649bc68764dbf5e6296ab5e3a5d1 /gcc
parentd8db81924a726ef18cde639408b05b91d9ab9dbb (diff)
downloadgcc-f277471f3676db9a6fdb52c3fb137f4a47bed4fc.zip
gcc-f277471f3676db9a6fdb52c3fb137f4a47bed4fc.tar.gz
gcc-f277471f3676db9a6fdb52c3fb137f4a47bed4fc.tar.bz2
(output_function_{pro,epi}logue): Save and restore fp-registers only
if TARGET_68881. From-SVN: r13145
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/m68k/m68k.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index c6243ce..d6a1721 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -255,18 +255,21 @@ output_function_prologue (stream, size)
#endif
}
#endif
- for (regno = 16; regno < 24; regno++)
- if (regs_ever_live[regno] && ! call_used_regs[regno])
- mask |= 1 << (regno - 16);
- if ((mask & 0xff) != 0)
+ if (TARGET_68881)
{
+ for (regno = 16; regno < 24; regno++)
+ if (regs_ever_live[regno] && ! call_used_regs[regno])
+ mask |= 1 << (regno - 16);
+ if ((mask & 0xff) != 0)
+ {
#ifdef MOTOROLA
- asm_fprintf (stream, "\tfmovm %0I0x%x,-(%Rsp)\n", mask & 0xff);
+ asm_fprintf (stream, "\tfmovm %0I0x%x,-(%Rsp)\n", mask & 0xff);
#else
- asm_fprintf (stream, "\tfmovem %0I0x%x,%Rsp@-\n", mask & 0xff);
+ asm_fprintf (stream, "\tfmovem %0I0x%x,%Rsp@-\n", mask & 0xff);
#endif
+ }
+ mask = 0;
}
- mask = 0;
for (regno = 0; regno < 16; regno++)
if (regs_ever_live[regno] && ! call_used_regs[regno])
{
@@ -428,12 +431,15 @@ output_function_epilogue (stream, size)
fpoffset = nregs * 8;
#endif
nregs = 0;
- for (regno = 16; regno < 24; regno++)
- if (regs_ever_live[regno] && ! call_used_regs[regno])
- {
- nregs++;
- fmask |= 1 << (23 - regno);
- }
+ if (TARGET_68881)
+ {
+ for (regno = 16; regno < 24; regno++)
+ if (regs_ever_live[regno] && ! call_used_regs[regno])
+ {
+ nregs++;
+ fmask |= 1 << (23 - regno);
+ }
+ }
foffset = fpoffset + nregs * 12;
nregs = 0; mask = 0;
if (frame_pointer_needed)