This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: egcs 1.0 internal error on hppa1.1-rtems



  In message <Pine.BSF.3.96.971220121439.2016H-100000@vespucci.advicom.net>you write:

  > Compiling the public domain floating point test paranoia.c, the compiler
  > generated the following internal error:
  > 
  > p.c: In function `paranoia':
  > p.c:1947: internal error--unrecognizable insn:
  > (insn 32469 32012 32009 (set (reg:SI 22 %r22)
  >         (symbol_ref:SI ("@__floatsidf"))) -1 (nil)
  >     (expr_list:REG_EQUAL (symbol_ref:SI ("@__floatsidf"))
  >         (nil)))
  > hppa1.1-rtems-gcc: Internal compiler error: program cc1 got fatal signal 6
Thanks.

Index: pa.c
===================================================================
RCS file: /cvs/cvsfiles/egcs/gcc/config/pa/pa.c,v
retrieving revision 1.7
diff -c -3 -p -r1.7 pa.c
*** pa.c	1997/10/16 03:37:27	1.7
--- pa.c	1997/12/22 04:42:32
*************** emit_move_sequence (operands, mode, scra
*** 1244,1251 ****
  	}
      }
  
!   /* Simplify the source if we need to.  */
    if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
        || (GET_CODE (operand1) == HIGH
  	  && symbolic_operand (XEXP (operand1, 0), mode)))
      {
--- 1244,1255 ----
  	}
      }
  
!   /* Simplify the source if we need to.
!      Note we do have to handle function labels here, even though we do
!      not consider them legitimate constants.  Loop optimizations can
!      call the emit_move_xxx with one as a source.  */
    if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
+       || function_label_operand (operand1, mode)
        || (GET_CODE (operand1) == HIGH
  	  && symbolic_operand (XEXP (operand1, 0), mode)))
      {
*************** emit_move_sequence (operands, mode, scra
*** 1263,1271 ****
  
  	     So we force the plabel into memory, load operand0 from
  	     the memory location, then add in the constant part.  */
! 	  if (GET_CODE (operand1) == CONST
! 	      && GET_CODE (XEXP (operand1, 0)) == PLUS
! 	      && function_label_operand (XEXP (XEXP (operand1, 0), 0), Pmode))
  	    {
  	      rtx temp, const_part;
  
--- 1267,1276 ----
  
  	     So we force the plabel into memory, load operand0 from
  	     the memory location, then add in the constant part.  */
! 	  if ((GET_CODE (operand1) == CONST
! 	       && GET_CODE (XEXP (operand1, 0)) == PLUS
! 	       && function_label_operand (XEXP (XEXP (operand1, 0), 0), Pmode))
! 	      || function_label_operand (operand1, mode))
  	    {
  	      rtx temp, const_part;
  
*************** emit_move_sequence (operands, mode, scra
*** 1275,1288 ****
  	      else if (flag_pic)
  		scratch_reg = gen_reg_rtx (Pmode);
  
! 	      /* Save away the constant part of the expression.  */
! 	      const_part = XEXP (XEXP (operand1, 0), 1);
! 	      if (GET_CODE (const_part) != CONST_INT)
! 		abort ();
  
- 	      /* Force the function label into memory.  */
- 	      temp = force_const_mem (mode, XEXP (XEXP (operand1, 0), 0));
- 
  	      /* Get the address of the memory location.  PIC-ify it if
  		 necessary.  */
  	      temp = XEXP (temp, 0);
--- 1280,1305 ----
  	      else if (flag_pic)
  		scratch_reg = gen_reg_rtx (Pmode);
  
! 	      if (GET_CODE (operand1) == CONST)
! 		{
! 		  /* Save away the constant part of the expression.  */
! 		  const_part = XEXP (XEXP (operand1, 0), 1);
! 		  if (GET_CODE (const_part) != CONST_INT)
! 		    abort ();
! 
! 		  /* Force the function label into memory.  */
! 		  temp = force_const_mem (mode, XEXP (XEXP (operand1, 0), 0));
! 		}
! 	      else
! 		{
! 		  /* No constant part.  */
! 		  const_part = NULL_RTX;
! 
! 		  /* Force the function label into memory.  */
! 		  temp = force_const_mem (mode, operand1);
! 		}
! 		
  
  	      /* Get the address of the memory location.  PIC-ify it if
  		 necessary.  */
  	      temp = XEXP (temp, 0);
*************** emit_move_sequence (operands, mode, scra
*** 1300,1306 ****
  	      emit_move_sequence (operands, mode, scratch_reg);
  
  	      /* And add back in the constant part.  */
! 	      expand_inc (operand0, const_part);
  
  	      return 1;
  	    }
--- 1317,1324 ----
  	      emit_move_sequence (operands, mode, scratch_reg);
  
  	      /* And add back in the constant part.  */
! 	      if (const_part != NULL_RTX)
! 		expand_inc (operand0, const_part);
  
  	      return 1;
  	    }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]