From: David Edelsohn Date: Fri, 25 Feb 2005 16:41:56 +0000 (+0000) Subject: backport: re PR target/19019 (GCC ldouble format incompatibility with XLC long double) X-Git-Tag: releases/gcc-3.4.4~195 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a7024f2b460f98875dbbfa56581dddeabd15fc4;p=thirdparty%2Fgcc.git backport: re PR target/19019 (GCC ldouble format incompatibility with XLC long double) Backport from mainline: 2005-02-24 David Edelsohn PR target/19019 * reload.c (operands_match_p): Only increment register number for SCALAR_INT_MODE_P modes in multiple hard registers. * config/rs6000/rs6000.md (trunctfdf2): Remove register constraints. Fix formatting. From-SVN: r95536 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6abb9a5dbcf7..2899a3965d7e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-02-25 David Edelsohn + + Backport from mainline: + 2005-02-24 David Edelsohn + PR target/19019 + * reload.c (operands_match_p): Only increment register number for + SCALAR_INT_MODE_P modes in multiple hard registers. + * config/rs6000/rs6000.md (trunctfdf2): Remove register constraints. + Fix formatting. + 2005-02-24 Jakub Jelinek PR target/19019 diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index b67c210e2a9d..f4fd3df53f82 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -8260,11 +8260,11 @@ }) (define_expand "trunctfdf2" - [(set (match_operand:DF 0 "gpc_reg_operand" "=f") - (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "f")))] + [(set (match_operand:DF 0 "gpc_reg_operand" "") + (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "")))] "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128" -"") + "") (define_insn_and_split "trunctfdf2_internal1" [(set (match_operand:DF 0 "gpc_reg_operand" "=f,?f") diff --git a/gcc/reload.c b/gcc/reload.c index ed70d00492e6..9eae9ff7bfc0 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -2144,12 +2144,15 @@ operands_match_p (rtx x, rtx y) j = REGNO (y); /* On a WORDS_BIG_ENDIAN machine, point to the last register of a - multiple hard register group, so that for example (reg:DI 0) and - (reg:SI 1) will be considered the same register. */ + multiple hard register group of scalar integer registers, so that + for example (reg:DI 0) and (reg:SI 1) will be considered the same + register. */ if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD + && SCALAR_INT_MODE_P (GET_MODE (x)) && i < FIRST_PSEUDO_REGISTER) i += HARD_REGNO_NREGS (i, GET_MODE (x)) - 1; if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD + && SCALAR_INT_MODE_P (GET_MODE (y)) && j < FIRST_PSEUDO_REGISTER) j += HARD_REGNO_NREGS (j, GET_MODE (y)) - 1;