diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-08-12 16:41:11 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-08-12 10:41:11 -0600 |
commit | 980d0e8162562c3126df6748bd09d5680bd32a86 (patch) | |
tree | f5191aabd1734993abe5a0977509099a6bcd0dc1 /gcc | |
parent | 6e755043ddb0a6055edff6654b14585ca4b02218 (diff) | |
download | gcc-980d0e8162562c3126df6748bd09d5680bd32a86.zip gcc-980d0e8162562c3126df6748bd09d5680bd32a86.tar.gz gcc-980d0e8162562c3126df6748bd09d5680bd32a86.tar.bz2 |
mn10300.c (REG_SAVE_BYTES): Only reserve space for registers which will be saved.
* mn10300.c (REG_SAVE_BYTES): Only reserve space for registers
which will be saved.
* mn10300.md (prologue insn): Only save registers which need saving.
(epilogue insn): Similarly.
From-SVN: r21687
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 5 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.md | 68 |
3 files changed, 75 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 726102a..5e90c3a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ Wed Aug 12 17:25:18 1998 Jeffrey A Law (law@cygnus.com) + * mn10300.c (REG_SAVE_BYTES): Only reserve space for registers + which will be saved. + * mn10300.md (prologue insn): Only save registers which need saving. + (epilogue insn): Similarly. + * mn10300.c, mn10300.h, mn10300.md: Remove "global zero register" optimizations. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index d1f71ef..9f1ff84 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -39,7 +39,10 @@ Boston, MA 02111-1307, USA. */ /* The size of the callee register save area. Right now we save everything on entry since it costs us nothing in code size. It does cost us from a speed standpoint, so we want to optimize this sooner or later. */ -#define REG_SAVE_BYTES (16) +#define REG_SAVE_BYTES (4 * regs_ever_live[2] \ + + 4 * regs_ever_live[3] \ + + 4 * regs_ever_live[6] \ + + 4 * regs_ever_live[7]) void asm_file_start (file) diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md index 8a652eb..d3061ad5 100644 --- a/gcc/config/mn10300/mn10300.md +++ b/gcc/config/mn10300/mn10300.md @@ -1370,7 +1370,39 @@ "" "* { - return \"ret [d2,d3,a2,a3],%0\"; + int i, need_comma; + int d2, d3, a2, a3; + + need_comma = 0; + fputs (\"\\tret [\", asm_out_file); + if (regs_ever_live[2]) + { + fputs (\"d2\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[3]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"d3\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[6]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"a2\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[7]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"a3\", asm_out_file); + need_comma = 1; + } + fprintf (asm_out_file, \"],%d\\n\", INTVAL (operands[0])); + return \"\"; }" [(set_attr "cc" "clobber")]) @@ -1379,7 +1411,39 @@ "" "* { - return \"movm [d2,d3,a2,a3],(sp)\"; + int i, need_comma; + int d2, d3, a2, a3; + + need_comma = 0; + fputs (\"\\tmovm [\", asm_out_file); + if (regs_ever_live[2]) + { + fputs (\"d2\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[3]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"d3\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[6]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"a2\", asm_out_file); + need_comma = 1; + } + if (regs_ever_live[7]) + { + if (need_comma) + fputc (',', asm_out_file); + fputs (\"a3\", asm_out_file); + need_comma = 1; + } + fputs (\"],(sp)\\n\", asm_out_file); + return \"\"; }" [(set_attr "cc" "clobber")]) |