From 420ccc84ea380688ba0810c98a9445a041ada471 Mon Sep 17 00:00:00 2001
From: Stuart Henderson <shenders@gcc.gnu.org>
Date: Wed, 4 May 2011 10:48:55 +0000
Subject: [PATCH] 2011-05-04  Stuart Henderson  <shenders@gcc.gnu.org>

        From Bernd Schmidt
        * config/bfin/bfin.h (FUNCTION_PROFILER): Take TARGET_LONG_CALLS into
        account and save/restore RETS.
        (PROFILE_BEFORE_PROLOGUE): Define.
        (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Add tab character.  Correct
        the push insn to use predecrement.

From-SVN: r173365
---
 gcc/ChangeLog          |  9 +++++++++
 gcc/config/bfin/bfin.h | 16 +++++++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3722fe5e6f8d..6f509040f39a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2011-05-04  Stuart Henderson  <shenders@gcc.gnu.org>
+
+	From Bernd Schmidt
+	* config/bfin/bfin.h (FUNCTION_PROFILER): Take TARGET_LONG_CALLS into
+	account and save/restore RETS.
+	(PROFILE_BEFORE_PROLOGUE): Define.
+	(ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Add tab character.  Correct
+	the push insn to use predecrement.
+
 2011-05-04  Stuart Henderson  <shenders@gcc.gnu.org>
 
 	From Jie Zhang
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index d3bdd5606b43..0d83ad821266 100644
--- a/gcc/config/bfin/bfin.h
+++ b/gcc/config/bfin/bfin.h
@@ -1126,16 +1126,26 @@ do { 						\
 
 #define ASM_COMMENT_START "//"
 
+#define PROFILE_BEFORE_PROLOGUE
 #define FUNCTION_PROFILER(FILE, LABELNO)	\
   do {						\
-    fprintf (FILE, "\tCALL __mcount;\n");	\
+    fprintf (FILE, "\t[--SP] = RETS;\n");	\
+    if (TARGET_LONG_CALLS)			\
+      {						\
+	fprintf (FILE, "\tP2.h = __mcount;\n");	\
+	fprintf (FILE, "\tP2.l = __mcount;\n");	\
+	fprintf (FILE, "\tCALL (P2);\n");	\
+      }						\
+    else					\
+      fprintf (FILE, "\tCALL __mcount;\n");	\
+    fprintf (FILE, "\tRETS = [SP++];\n");	\
   } while(0)
 
 #undef NO_PROFILE_COUNTERS
 #define NO_PROFILE_COUNTERS 1
 
-#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) fprintf (FILE, "[SP--] = %s;\n", reg_names[REGNO])
-#define ASM_OUTPUT_REG_POP(FILE, REGNO)  fprintf (FILE, "%s = [SP++];\n", reg_names[REGNO])
+#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) fprintf (FILE, "\t[--SP] = %s;\n", reg_names[REGNO])
+#define ASM_OUTPUT_REG_POP(FILE, REGNO)  fprintf (FILE, "\t%s = [SP++];\n", reg_names[REGNO])
 
 extern rtx bfin_cc_rtx, bfin_rets_rtx;
 
-- 
GitLab