aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Henderson <shenders@gcc.gnu.org>2011-05-04 10:48:55 +0000
committerStuart Henderson <shenders@gcc.gnu.org>2011-05-04 10:48:55 +0000
commit420ccc84ea380688ba0810c98a9445a041ada471 (patch)
tree7dc8c527a183593245b3cf0635e120a94feb8374
parent9f8d69ee246583778c5eb61b430eb465477742f3 (diff)
downloadgcc-420ccc84ea380688ba0810c98a9445a041ada471.zip
gcc-420ccc84ea380688ba0810c98a9445a041ada471.tar.gz
gcc-420ccc84ea380688ba0810c98a9445a041ada471.tar.bz2
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/bfin/bfin.h16
2 files changed, 22 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3722fe5..6f50904 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
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
* config/bfin/bfin.c (bfin_expand_prologue): Don't clobber P2.
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index d3bdd56..0d83ad8 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;