Commit ca0e79d9 by Alan Modra Committed by Alan Modra

re PR target/26459 (gcc fails to build on powerpc e500-double targets)

	PR target/26459
	* config/rs6000/rs6000.h (CANNOT_CHANGE_MODE_CLASS): Limit 2003-12-08
	change to FLOAT_REGS.

From-SVN: r112561
parent 26436493
2006-03-31 Alan Modra <amodra@bigpond.net.au> 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. * config/rs6000/rs6000.c (rs6000_explicit_options): Add ieee.
(rs6000_override_options): Use it. (rs6000_override_options): Use it.
(rs6000_handle_option): Set it. Set rs6000_explicit_options.abi (rs6000_handle_option): Set it. Set rs6000_explicit_options.abi
......
...@@ -1112,22 +1112,19 @@ enum reg_class ...@@ -1112,22 +1112,19 @@ enum reg_class
? 1 \ ? 1 \
: ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
/* Return nonzero if for CLASS a mode change from FROM to TO is invalid. */
/* Return a class of registers that cannot change FROM mode to TO mode. */
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
(!TARGET_IEEEQUAD \ ? ((GET_MODE_SIZE (FROM) < 8 || GET_MODE_SIZE (TO) < 8 \
&& GET_MODE_SIZE (FROM) >= 8 && GET_MODE_SIZE (TO) >= 8 \ || TARGET_IEEEQUAD) \
? 0 \ && reg_classes_intersect_p (FLOAT_REGS, CLASS)) \
: GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ : (((TARGET_E500_DOUBLE \
? reg_classes_intersect_p (FLOAT_REGS, CLASS) \ && ((((TO) == DFmode) + ((FROM) == DFmode)) == 1 \
: (TARGET_E500_DOUBLE && (((TO) == DFmode) + ((FROM) == DFmode)) == 1) \ || (((TO) == DImode) + ((FROM) == DImode)) == 1)) \
? reg_classes_intersect_p (GENERAL_REGS, CLASS) \ || (TARGET_SPE \
: (TARGET_E500_DOUBLE && (((TO) == DImode) + ((FROM) == DImode)) == 1) \ && (SPE_VECTOR_MODE (FROM) + SPE_VECTOR_MODE (TO)) == 1)) \
? reg_classes_intersect_p (GENERAL_REGS, CLASS) \ && 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)
/* Stack layout; function entry, exit and calling. */ /* Stack layout; function entry, exit and calling. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment