diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-11-12 16:37:12 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-11-12 16:37:12 -0500 |
commit | f277471f3676db9a6fdb52c3fb137f4a47bed4fc (patch) | |
tree | 42d45f31bd40649bc68764dbf5e6296ab5e3a5d1 /gcc | |
parent | d8db81924a726ef18cde639408b05b91d9ab9dbb (diff) | |
download | gcc-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.c | 32 |
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) |