There are 3 patches left in the basic IEEE 128-bit floating point support for the compiler. I will submit these at the same time. They are split to make the review process similar. Patch #5 and #6 are indpendent of each other and can be applied in either order. Patch #7 assumes that patches 1-6 have been applied. Patch #5 adds the following: * Support for the reload handlers that will be enabled in patch #7. * Adds IFmode/KFmode to other iterators as appropriate. * Adds the basic negate, absolute value, and negative absolute value support. * Adds the insns for the 128-bit pack/unpack routines. Patch #6 adds the following: * Adds support for comparisons. * Updates the cannot change mode support. Patch #7 finishes up the initial basic support. * It defines macros for IEEE 128-bit floating point users. * It defines the basic move support. * It sets up the calling sequence. * It registers the __float128 and __ibm128 keywords. * It sets up the various handler functions. * It adds 'q' and 'Q' as the suffix for IEEE 128-bit floating point. * It adds target attribute/pragma support for the IEEE 128-bit options. * It treats IEEE 128-bit in VSX register modes as vector. * It uses a unique mangling for IEEE 128-bit in VSX registers. * It moves vector modes tieable above scalar floating point. * It adds a simple minded test to make sure IEEE args are passed as vectors. Things to be done: * Work with GDB to add debug support. * Work with GLIBC to add basic software emulation support. * Work with GLIBC on other IEEE 128-bit support. * Look into Complex support. * Look into libquadmath support. * Enable -mfloat128-software if -mvsx. * Add more tests. * Fix bugs that show up if -mabi=ieeelongdouble is used. Each patch bootstraps without error and has no regressions. Are they ok to install in the trunk? This is patch #7: [gcc] 2015-08-13 Michael Meissner * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define user macros for IEEE 128-bit floating point in VSX registers. * config/rs6000/rs6000.c (TARGET_C_MODE_FOR_SUFFIX): Add 'q' or 'Q' as the suffix for IEEE 128-bit floating point in VSX registers. (rs6000_c_mode_for_suffix): Likewise. (rs6000_init_hard_regno_mode_ok): Set up IEEE 128-bit floating point in VSX register mode support. (rs6000_gen_le_vsx_permute): Use ROTATE instead of VEC_SELECT for IEEE 128-bit floating point in VSX registers. (init_cumulative_args): When calling the library support functions, suppress passing values to IEEE 128-bit floating point in VSX registers in both the GPRs and VSX registers. (rs6000_function_arg): Likewise. (rs6000_arg_partial_bytes): Likewise. (rs6000_init_builtins): Likewise. (init_float128_ibm): Split 128-bit floating point support into two functions, and add support for IEEE 128-bit floating point in VSX registers. (init_float128_ieee): Likewise. (rs6000_init_libfuncs): Likewise. (rs6000_mangle_type): Use U10__float128 as the mangled type for IEEE 128-bit floating point in VSX registers. (struct rs6000_opt_var): Fix typo. (struct rs6000_float128_var): Add target attribute and pragma support for the IEEE 128-bit floating point in VSX registers. (rs6000_float128_vars): Likewise. (rs6000_inner_target_options): Likewise. * config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Treat IEEE 128-bit floating point in vector registers as a vector type. (MODES_TIEABLE_P): Move vector tests above floating point scalar tests, so that IEEE 128-bit floating point in VSX registers ties like a vector operand and not a scalar floating point operand. (struct rs6000_args): Add libcall field to support IEEE 128-bit floating point in VSX registers. * doc/extend.texi (additional floating types): Document PowerPC use of __float128 and __ibm128 types. * doc/invoke.texi (RS/6000 and PowerPC Options): Document -mfloat128-software and -mfloat128-none. [gcc/testsuite] 2015-08-13 Michael Meissner * gcc.target/powerpc/float128-call.c: New function, test whether IEEE 128-bit floating point in VSX registers is passed correctly. -- 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