yet another ppc constant_p fix [Re: glibc fclose prob?]

Richard Henderson rth@cygnus.com
Mon Jan 25 22:23:00 GMT 1999


On Mon, Jan 25, 1999 at 05:11:58PM +0100, Franz Sirl wrote:
> ../../../egcsm/gcc/varasm.c:3265: Internal compiler error in function
> decode_rtx_const

Bother.  I'd only tested the 21 Jan patch without -fpic.  :-P


r~


	* rs6000.c (input_operand): Don't expect CONST around CONSTANT_P_RTX.
	* rs6000.md (movsi, movdi): Likewise.

Index: rs6000.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.60
diff -c -p -d -r1.60 rs6000.c
*** rs6000.c	1999/01/22 09:30:01	1.60
--- rs6000.c	1999/01/26 06:16:16
*************** input_operand (op, mode)
*** 1132,1138 ****
      return 1;
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (op) == CONST && GET_CODE (XEXP (op, 0)) == CONSTANT_P_RTX)
      return 1;
  
    /* For floating-point, easy constants are valid.  */
--- 1132,1138 ----
      return 1;
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (op) == CONSTANT_P_RTX)
      return 1;
  
    /* For floating-point, easy constants are valid.  */
Index: rs6000.md
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/rs6000/rs6000.md,v
retrieving revision 1.41
diff -c -p -d -r1.41 rs6000.md
*** rs6000.md	1999/01/24 17:20:07	1.41
--- rs6000.md	1999/01/26 06:16:16
***************
*** 8242,8249 ****
      operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (operands[1]) == CONST
!       && GET_CODE (XEXP (operands[1], 0)) == CONSTANT_P_RTX)
      {
        emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
        DONE;
--- 8242,8248 ----
      operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
      {
        emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
        DONE;
***************
*** 8888,8895 ****
      operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (operands[1]) == CONST
!       && GET_CODE (XEXP (operands[1], 0)) == CONSTANT_P_RTX)
      {
        emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
        DONE;
--- 8887,8893 ----
      operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  
    /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
!   if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
      {
        emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
        DONE;



More information about the Gcc-patches mailing list