From: amodra Date: Fri, 31 Mar 2006 01:25:35 +0000 (+0000) Subject: PR target/26459 X-Git-Tag: upstream/4.9.2~55138 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=14ee7385acdb73216a403418c57174becc10ea8a;p=platform%2Fupstream%2Flinaro-gcc.git PR target/26459 * config/rs6000/rs6000.h (CANNOT_CHANGE_MODE_CLASS): Limit 2003-12-08 change to FLOAT_REGS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112561 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43acab7..706f592 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2006-03-31 Alan Modra + PR target/26459 + * config/rs6000/rs6000.h (CANNOT_CHANGE_MODE_CLASS): Limit 2003-12-08 + change to FLOAT_REGS. + * config/rs6000/rs6000.c (rs6000_explicit_options): Add ieee. (rs6000_override_options): Use it. (rs6000_handle_option): Set it. Set rs6000_explicit_options.abi diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index b31d437..75ff4a6 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1112,22 +1112,19 @@ enum reg_class ? 1 \ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) - -/* Return a class of registers that cannot change FROM mode to TO mode. */ - -#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ - (!TARGET_IEEEQUAD \ - && GET_MODE_SIZE (FROM) >= 8 && GET_MODE_SIZE (TO) >= 8 \ - ? 0 \ - : GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ - ? reg_classes_intersect_p (FLOAT_REGS, CLASS) \ - : (TARGET_E500_DOUBLE && (((TO) == DFmode) + ((FROM) == DFmode)) == 1) \ - ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \ - : (TARGET_E500_DOUBLE && (((TO) == DImode) + ((FROM) == DImode)) == 1) \ - ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \ - : (TARGET_SPE && (SPE_VECTOR_MODE (FROM) + SPE_VECTOR_MODE (TO)) == 1) \ - ? reg_classes_intersect_p (GENERAL_REGS, CLASS) \ - : 0) +/* Return nonzero if for CLASS a mode change from FROM to TO is invalid. */ + +#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ + (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ + ? ((GET_MODE_SIZE (FROM) < 8 || GET_MODE_SIZE (TO) < 8 \ + || TARGET_IEEEQUAD) \ + && reg_classes_intersect_p (FLOAT_REGS, CLASS)) \ + : (((TARGET_E500_DOUBLE \ + && ((((TO) == DFmode) + ((FROM) == DFmode)) == 1 \ + || (((TO) == DImode) + ((FROM) == DImode)) == 1)) \ + || (TARGET_SPE \ + && (SPE_VECTOR_MODE (FROM) + SPE_VECTOR_MODE (TO)) == 1)) \ + && reg_classes_intersect_p (GENERAL_REGS, CLASS))) /* Stack layout; function entry, exit and calling. */