This patch is the first in a series of patches that will eventually add support for IEEE 128-bit floating point support to the PowerPC GCC compiler. At the current time, we do not plan to change the default for long double. I added a new type keyword (__float128) to get access to IEEE 128-bit floating point, and another (__ibm128) to get access to IBM extended double type. Until all of the GCC and LIBGCC patches have been committed, you will not be able to use IEEE 128-bit floating point, and -mfloat128-software will not be turned on by default. This patch adds the new modes (KFmode and IFmode) and the switches (-mfloat128-{none,software}). Due to the fact that TFmode in the PowerPC compiler either represents IEEE 128-bit floating point or the IBM extended double (double-double) format. For most PowerPC users, the default is to use IBM extended double for long double. Because TFmode can be either floating point format, I added new new modes: KFmode -- IEEE 128-bit floating point IFmode -- IBM extended double floating point If the default for TFmode is ibm extended double, the port will eventually use KFmode for IEEE 128-bit floating point. Likewise if the default for TFmode is IEEE 128-bit floating point, the port will use TFmode for IEEE 128-bit floating point, and IFmode for IBM extended double. I have bootstraped these patches on a power7 and compared them to the unpatched compiler. There were no changes when running make check. Are these patches ok to install in the trunk? 2015-05-22 Michael Meissner * config/rs6000/rs6000-modes.def (IFmode): Define IFmode to provide access to the IBM extended double floating point mode if long double is IEEE 128-bit floating point. (KFmode): Define KFmode to provide access to IEEE 128-bit floating point if long double is the IBM extended double type. * config/rs6000/rs6000.opt (-mfloat128-none): New switches to enable adding IEEE 128-bit floating point support. (-mfloat128-software): Likewise. (-mfloat128-sw): Likewise. * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Do not allow 128-bit floating point types to occupy any register if -mlong-double-64. Do not allow use of IFmode/KFmode unless -mfloat128-software is enabled. (rs6000_debug_reg_global): Add IEEE 128-bit floating point debug support. (rs6000_option_override_internal): Add -mfloat128-* support. (rs6000_init_builtins): Setup __ibm128 and __float128 type modes. * config/rs6000/rs6000.h (rs6000_builtin_type_index): Add ibm128 and float128 type nodes. (ieee128_float_type_node): Likewise. (ibm128_float_type_node): Likewise. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797