From 980d0e8162562c3126df6748bd09d5680bd32a86 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Wed, 12 Aug 1998 16:41:11 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++ gcc/config/mn10300/mn10300.c | 5 ++- gcc/config/mn10300/mn10300.md | 68 +++++++++++++++++++++++++++++++++-- 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 726102a481e..5e90c3a76f9 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 d1f71ef303f..9f1ff842ab3 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 8a652ebd970..d3061ad54b8 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")]) -- 2.30.2