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]

enable-checking problems on PPC


Hi,

I have some problems building GCC with --enable-checking on Linux/PPC. I was
able to tackle 2 problems myself with the appended minor patches (please
comment), but I can't find a solution for my current problem, this
code compiled wit -O2 -fPIC:

typedef          int SItype     __attribute__ ((mode (SI)));
typedef unsigned int USItype    __attribute__ ((mode (SI)));
typedef          int DItype     __attribute__ ((mode (DI)));
typedef unsigned int UDItype    __attribute__ ((mode (DI)));
typedef         float DFtype    __attribute__ ((mode (DF)));

DFtype
__floatdidf (DItype u)
{
  DFtype d;

  d = (SItype) (u >> (sizeof (SItype) * 8 ) );
  d *= (((UDItype) 1) << ((sizeof (SItype) * 8 )  / 2)) ;
  d *= (((UDItype) 1) << ((sizeof (SItype) * 8 )  / 2)) ;
  d += (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8 ) )  - 1));

  return d;
}

aborts with:
checking_bug.c: In function `__floatdidf':
checking_bug.c:19: RTL check: expected elt 0 type 'e' or 'u', have 's' (rtx symbol_ref)
checking_bug.c:19: Internal compiler error in `decode_rtx_const', at varasm.c:3358

I can't seem to find a valid solution for that one, and maybe it's a bug
earlier in the compiler. Any hints?

Franz.

	* haifa-sched.c (sched_note_set): use XEXP, not SET_DEST
	* rs6000.c (expand_block_move): use XWINT, not XINT

Index: gcc/haifa-sched.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/haifa-sched.c,v
retrieving revision 1.112
diff -u -p -r1.112 haifa-sched.c
--- haifa-sched.c	1999/09/21 22:28:47	1.112
+++ haifa-sched.c	1999/09/25 20:34:15
@@ -3974,7 +3974,7 @@ sched_note_set (x, death)
      int death;
 {
   register int regno;
-  register rtx reg = SET_DEST (x);
+  register rtx reg = XEXP (x, 0);
   int subreg_p = 0;
 
   if (reg == 0)
Index: gcc/config/rs6000/rs6000.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.98
diff -u -p -r1.98 rs6000.c
--- rs6000.c	1999/09/22 22:27:58	1.98
+++ rs6000.c	1999/09/25 20:34:16
@@ -2059,7 +2065,7 @@ expand_block_move (operands)
   rtx bytes_rtx	= operands[2];
   rtx align_rtx = operands[3];
   int constp	= (GET_CODE (bytes_rtx) == CONST_INT);
-  int align	= XINT (align_rtx, 0);
+  int align	= XWINT (align_rtx, 0);
   int bytes;
   int offset;
   int num_reg;


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