aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2003-03-28 15:18:11 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2003-03-28 15:18:11 +0000
commitd18ad19175a1a54aa79cdfad88c65019cbc0f4ae (patch)
treedf984d005777e370e3a08e81af9f593b716c5933
parent01312d1259c2c0f587a0bec04187721c2ae60c65 (diff)
downloadgcc-d18ad19175a1a54aa79cdfad88c65019cbc0f4ae.zip
gcc-d18ad19175a1a54aa79cdfad88c65019cbc0f4ae.tar.gz
gcc-d18ad19175a1a54aa79cdfad88c65019cbc0f4ae.tar.bz2
re PR target/10205 (Incorrect code generated for H8300 "normal" mode)
PR target/10205 * config/h8300/h8300.c (h8300_initial_elimination_offset): Correct the offset computation when TARGET_NORMAL. Co-Authored-By: Dhananjay R. Deshpande <dhananjayd@kpit.com> From-SVN: r64975
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/h8300/h8300.c10
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 581d758..c4d4d6b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-03-28 Kazu Hirata <kazu@cs.umass.edu>,
+ Dhananjay Deshpande <dhananjayd@kpit.com>
+
+ PR target/10205
+ * config/h8300/h8300.c (h8300_initial_elimination_offset):
+ Correct the offset computation when TARGET_NORMAL.
+
2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/10067
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index 191bccc..cfbb959 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -1715,9 +1715,11 @@ h8300_initial_elimination_offset (from, to)
int from, to;
{
int offset = 0;
+ /* The number of bytes that the return address takes on the stack. */
+ int pc_size = POINTER_SIZE / BITS_PER_UNIT;
if (from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM)
- offset = UNITS_PER_WORD + frame_pointer_needed * UNITS_PER_WORD;
+ offset = pc_size + frame_pointer_needed * UNITS_PER_WORD;
else if (from == RETURN_ADDRESS_POINTER_REGNUM && to == FRAME_POINTER_REGNUM)
offset = frame_pointer_needed * UNITS_PER_WORD;
else
@@ -1734,12 +1736,10 @@ h8300_initial_elimination_offset (from, to)
offset += round_frame_size (get_frame_size ());
if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- offset += UNITS_PER_WORD; /* Skip saved PC */
+ /* Skip saved PC. */
+ offset += pc_size;
}
- if ((TARGET_H8300H || TARGET_H8300S) && TARGET_NORMAL_MODE)
- offset -= 2;
-
return offset;
}