This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
enable-checking problems on PPC
- To: gcc-bugs at gcc dot gnu dot org
- Subject: enable-checking problems on PPC
- From: Franz Sirl <Franz dot Sirl-kernel at lauterbach dot com>
- Date: Sat, 25 Sep 1999 22:31:43 +0200
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;