Commit 6a7b00ad by Kazuhiro Inaoka Committed by Nick Clifton

config/m32r/m32r.c (m32r_output_function_epilogue): Care for a large stack #

frame at epilogue.

From-SVN: r101759
parent 0921bc44
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
(ENDFILE_SPEC): Likewise. (ENDFILE_SPEC): Likewise.
* config/m32r/m32r.h (ASM_SPEC): Likewise. * config/m32r/m32r.h (ASM_SPEC): Likewise.
* config/m32r/m32r.c (m32r_output_function_epilogue): Care for
a large stack frame at epilogue.
2005-07-08 David Billinghurst <David.Billinghurst@riotinto.com> 2005-07-08 David Billinghurst <David.Billinghurst@riotinto.com>
* final.c: Include sdbout.h when required. * final.c: Include sdbout.h when required.
......
...@@ -1532,11 +1532,19 @@ m32r_output_function_epilogue (FILE * file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) ...@@ -1532,11 +1532,19 @@ m32r_output_function_epilogue (FILE * file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
else if (reg_offset < 32768) else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n", fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, sp_str, IMMEDIATE_PREFIX, reg_offset); sp_str, sp_str, IMMEDIATE_PREFIX, reg_offset);
else else if (reg_offset < (1 << 24))
fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n", fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM], reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset, IMMEDIATE_PREFIX, reg_offset,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]); sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
else
fprintf (file, "\tseth %s,%s%d\n\tor3 %s,%s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset >> 16,
reg_names[PROLOGUE_TMP_REGNUM],
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset & 0xffff,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
} }
else if (frame_pointer_needed) else if (frame_pointer_needed)
{ {
...@@ -1547,11 +1555,19 @@ m32r_output_function_epilogue (FILE * file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) ...@@ -1547,11 +1555,19 @@ m32r_output_function_epilogue (FILE * file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
else if (reg_offset < 32768) else if (reg_offset < 32768)
fprintf (file, "\tadd3 %s,%s,%s%d\n", fprintf (file, "\tadd3 %s,%s,%s%d\n",
sp_str, fp_str, IMMEDIATE_PREFIX, reg_offset); sp_str, fp_str, IMMEDIATE_PREFIX, reg_offset);
else else if (reg_offset < (1 << 24))
fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n", fprintf (file, "\tld24 %s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM], reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset, IMMEDIATE_PREFIX, reg_offset,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]); sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
else
fprintf (file, "\tseth %s,%s%d\n\tor3 %s,%s,%s%d\n\tadd %s,%s\n",
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset >> 16,
reg_names[PROLOGUE_TMP_REGNUM],
reg_names[PROLOGUE_TMP_REGNUM],
IMMEDIATE_PREFIX, reg_offset & 0xffff,
sp_str, reg_names[PROLOGUE_TMP_REGNUM]);
} }
else else
gcc_unreachable (); gcc_unreachable ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment