Package: gcc-2.95 Version: 1:2.95.3-11 This patch fixes a problem compiling binutils on ARM. It's already installed on the 2.95 branch in CVS, but if future packages are going to use the 2.95.3 tarball it would be good to have this included.
#! /bin/sh -e # DP: Fix for SUBREG problems src=gcc if [ $# -eq 3 -a "$2" = '-d' ]; then pdir="-d $3" src=$3/gcc elif [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch $pdir -f --no-backup-if-mismatch -p1 --fuzz 10 < $0 cd $src && autoconf ;; -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p1 --fuzz 10 < $0 cd $src && autoconf ;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 esac exit 0 2001-04-03 Bernd Schmidt <[EMAIL PROTECTED]> * loop.c (combine_movables): Restrict combinations of constants with different modes so that we don't introduce SUBREGs into memory addresses. --- src/gcc/loop.c 2001/01/25 14:03:18 1.156.4.20 +++ src/gcc/loop.c 2001/04/03 12:09:42 1.156.4.21 @@ -1481,10 +1481,16 @@ combine_movables (movables, nregs) width as M1. The check for integer is redundant, but safe, since the only case of differing destination modes with equal sources is when both sources are - VOIDmode, i.e., CONST_INT. */ + VOIDmode, i.e., CONST_INT. + + For 2.95, don't do this if the mode of M1 is Pmode. + This prevents us from substituting SUBREGs for REGs + in memory accesses; not all targets are prepared to + handle this properly. */ (GET_MODE (m->set_dest) == GET_MODE (m1->set_dest) || (GET_MODE_CLASS (GET_MODE (m->set_dest)) == MODE_INT && GET_MODE_CLASS (GET_MODE (m1->set_dest)) == MODE_INT + && GET_MODE (m1->set_dest) != Pmode && (GET_MODE_BITSIZE (GET_MODE (m->set_dest)) >= GET_MODE_BITSIZE (GET_MODE (m1->set_dest))))) /* See if the source of M1 says it matches M. */