diff options
| author | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-31 01:25:35 +0000 |
|---|---|---|
| committer | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-31 01:25:35 +0000 |
| commit | 14ee7385acdb73216a403418c57174becc10ea8a (patch) | |
| tree | d37937aae1f538de9f6a1b3926e4a2b8402425d7 | |
| parent | e60d991f2d82727d730963ce975344812c62aec6 (diff) | |
| download | ppe42-gcc-14ee7385acdb73216a403418c57174becc10ea8a.tar.gz ppe42-gcc-14ee7385acdb73216a403418c57174becc10ea8a.zip | |
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
| -rw-r--r-- | gcc/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/config/rs6000/rs6000.h | 29 |
2 files changed, 17 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43acab710a1..706f5921d5f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2006-03-31 Alan Modra <amodra@bigpond.net.au> + 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 b31d4372f95..75ff4a66cd6 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. */ |

