diff options
author | Stuart Henderson <shenders@gcc.gnu.org> | 2011-05-04 10:48:55 +0000 |
---|---|---|
committer | Stuart Henderson <shenders@gcc.gnu.org> | 2011-05-04 10:48:55 +0000 |
commit | 420ccc84ea380688ba0810c98a9445a041ada471 (patch) | |
tree | 7dc8c527a183593245b3cf0635e120a94feb8374 | |
parent | 9f8d69ee246583778c5eb61b430eb465477742f3 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.h | 16 |
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; |