This is the mail archive of the gcc-bugs@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: Another new egcs bootstrap failure on OSF4: ICE final.c:3555


On Sun, Apr 25, 1999 at 03:44:50PM -0400, Kaveh R. Ghazi wrote:
> 	Hmm, it still doesn't bootstrap. :-)

Blah.

> 	Regarding your ev56 system, it may help to reproduce my error
> if you configure as the system I have, namely alphaev5-dec-osf4.0b.
> (The ev56 will run ev5 code, right?)

Yes.  Due to the number of goofs I've had in this area
recently, I've now got two parallel build trees that I
plan on keeping up to date.


r~


        * alpha.c (print_operand_address): Account for the subreg word.

Index: config/alpha/alpha.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/alpha/alpha.c,v
retrieving revision 1.84
diff -c -p -d -r1.84 alpha.c
*** alpha.c	1999/04/24 20:50:44	1.84
--- alpha.c	1999/04/26 07:25:53
***************
*** 1,6 ****
  /* Subroutines used for code generation on the DEC Alpha.
!    Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 1999 Free Software
!    Foundation, Inc. 
     Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
  
  This file is part of GNU CC.
--- 1,5 ----
  /* Subroutines used for code generation on the DEC Alpha.
!    Copyright (C) 1992, 93-98, 1999 Free Software Foundation, Inc. 
     Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
  
  This file is part of GNU CC.
*************** print_operand_address (file, addr)
*** 2935,2967 ****
      FILE *file;
       rtx addr;
  {
!   rtx basereg = NULL_RTX;
    HOST_WIDE_INT offset = 0;
  
    if (GET_CODE (addr) == AND)
      addr = XEXP (addr, 0);
-   if (GET_CODE (addr) == SUBREG)
-     addr = SUBREG_REG (addr);
  
!   if (GET_CODE (addr) == REG)
!     basereg = addr;
!   else if (GET_CODE (addr) == CONST_INT)
!     offset = INTVAL (addr);
!   else if (GET_CODE (addr) == PLUS
!            && GET_CODE (XEXP (addr, 1)) == CONST_INT)
      {
        offset = INTVAL (XEXP (addr, 1));
!       basereg = XEXP (addr, 0);
!       if (GET_CODE (basereg) == SUBREG)
! 	basereg = SUBREG_REG (basereg);
!       if (GET_CODE (basereg) != REG)
! 	abort ();
      }
    else
      abort ();
  
    fprintf (file, HOST_WIDE_INT_PRINT_DEC, offset);
!   fprintf (file, "($%d)", basereg ? REGNO (basereg) : 31);
  }
  
  /* Emit RTL insns to initialize the variable parts of a trampoline at
--- 2934,2963 ----
      FILE *file;
       rtx addr;
  {
!   int basereg = 31;
    HOST_WIDE_INT offset = 0;
  
    if (GET_CODE (addr) == AND)
      addr = XEXP (addr, 0);
  
!   if (GET_CODE (addr) == PLUS
!       && GET_CODE (XEXP (addr, 1)) == CONST_INT)
      {
        offset = INTVAL (XEXP (addr, 1));
!       addr = XEXP (addr, 0);
      }
+   if (GET_CODE (addr) == REG)
+     basereg = REGNO (addr);
+   else if (GET_CODE (addr) == SUBREG
+ 	   && GET_CODE (SUBREG_REG (addr)) == REG)
+     basereg = REGNO (SUBREG_REG (addr)) + SUBREG_WORD (addr);
+   else if (GET_CODE (addr) == CONST_INT)
+     offset = INTVAL (addr);
    else
      abort ();
  
    fprintf (file, HOST_WIDE_INT_PRINT_DEC, offset);
!   fprintf (file, "($%d)", basereg);
  }
  
  /* Emit RTL insns to initialize the variable parts of a trampoline at


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