aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-03-25 14:30:41 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-03-25 14:30:41 -0500
commite4e873f1a2a081fd1c1627ac165a560c1ce40365 (patch)
tree13f57781de296af823cad857b95876bee953012b /gcc/config
parent629c5b50207ac024ac3faf27040042d28ed90fd0 (diff)
downloadgcc-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.c19
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);