diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-03-25 14:30:41 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-03-25 14:30:41 -0500 |
commit | e4e873f1a2a081fd1c1627ac165a560c1ce40365 (patch) | |
tree | 13f57781de296af823cad857b95876bee953012b /gcc/config | |
parent | 629c5b50207ac024ac3faf27040042d28ed90fd0 (diff) | |
download | gcc-e4e873f1a2a081fd1c1627ac165a560c1ce40365.zip gcc-e4e873f1a2a081fd1c1627ac165a560c1ce40365.tar.gz gcc-e4e873f1a2a081fd1c1627ac165a560c1ce40365.tar.bz2 |
(output_function_prologue): Use link.w on 68040; emit pea fp + movl
sp,fp instead of linkw 0 for 6804.0
From-SVN: r6898
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/m68k/m68k.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index b536f6d..4cd6c91 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for Motorola 68000 family. - Copyright (C) 1987, 1993 Free Software Foundation, Inc. + Copyright (C) 1987, 1993, 1994 Free Software Foundation, Inc. This file is part of GNU CC. @@ -93,8 +93,20 @@ output_function_prologue (stream, size) if (frame_pointer_needed) { - /* Adding negative number is faster on the 68040. */ - if (fsize < 0x8000 && !TARGET_68040) + if (fsize == 0 && TARGET_68040_ONLY) + { + /* on the 68040, pea + move is faster than link.w 0 */ +#ifdef MOTOROLA + asm_fprintf (stream, "\tpea (%s)\n\tmove.l %s,%s\n", + reg_names[FRAME_POINTER_REGNUM], reg_names[STACK_POINTER_REGNUM], + reg_names[FRAME_POINTER_REGNUM]); +#else + asm_fprintf (stream, "\tpea %s\@\n\tmovel %s,%s\n", + reg_names[FRAME_POINTER_REGNUM], reg_names[STACK_POINTER_REGNUM], + reg_names[FRAME_POINTER_REGNUM]); +#endif + } + else if (fsize < 0x8000) { #ifdef MOTOROLA asm_fprintf (stream, "\tlink.w %s,%0I%d\n", @@ -116,6 +128,7 @@ output_function_prologue (stream, size) } else { + /* Adding negative number is faster on the 68040. */ #ifdef MOTOROLA asm_fprintf (stream, "\tlink.w %s,%0I0\n\tadd.l %0I%d,%Rsp\n", reg_names[FRAME_POINTER_REGNUM], -fsize); |