target/10205: Incorrect code generated for H8300 "normal" mode

Kazu Hirata kazu@cs.umass.edu
Fri Mar 28 16:56:00 GMT 2003


The following reply was made to PR target/10205; it has been noted by GNATS.

From: Kazu Hirata <kazu@cs.umass.edu>
To: <gcc-bugs@gcc.gnu.org>, <mnmoran@bellsouth.net>, <gcc-gnats@gcc.gnu.org>,
   <gcc-patches@gcc.gnu.org>
Cc:  
Subject: Re: target/10205: Incorrect code generated for H8300 "normal" mode 
Date: Fri, 28 Mar 2003 10:21:26 -0500 (EST)

 Hi,
 
 Here is the final patch I committed to 3.3 branch and mainline.
 
 Kazu Hirata
 
 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.
 
 Index: h8300.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/config/h8300/h8300.c,v
 retrieving revision 1.221
 diff -u -r1.221 h8300.c
 --- h8300.c	22 Mar 2003 15:22:37 -0000	1.221
 +++ h8300.c	28 Mar 2003 14:50:38 -0000
 @@ -1715,9 +1715,11 @@
       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,11 +1736,9 @@
        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;
  }



More information about the Gcc-prs mailing list