Here is patch 2 of 2 to make __ibm128 a distinct type. This patch makes the long double pack and unpack builtins only work if the long double type is IBM extended double. It adds two new builtins to pack and unpack __ibm128 types.
This has been tested on a little endian power8 system with bootstrap and regression test (with the previous patch also applied). Can I check this into the trunk and the GCC 8 branch? [gcc] 2018-05-18 Michael Meissner <meiss...@linux.ibm.com> PR target/85657 * config/rs6000/rs6000-builtin.def (BU_IBM128_2): New helper macro for __builtin_{,un}pack_ibm128. (PACK_IF): Declare __builtin_{,un}pack_ibm128. (UNPACK_IF): Likewise. * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): The mask for long double builtins (RS6000_BTM_LDBL128) requires that long double is IBM extended double. (rs6000_invalid_builtin): Add a new error message if the long double {,un}pack builtins are used when long double is IEEE 128-bit floating point. * config/rs6000/rs6000.h (RS6000_BTM_LDBL128): Update comment. * doc/extend.texi (PowerPC builtins): Update documention for __builtin_{,un}pack_longdouble. Add documentation for __builtin_{,un}pack_ibm128. [gcc/testsuite] 2018-05-18 Michael Meissner <meiss...@linux.ibm.com> PR target/85657 * gcc.target/powerpc/pr85657-4.c: New tests for pack/unpack __ibm128 builtin functions, and whether an appropriate error message is generate if the long double pack/unpack are used when long double is IEEE 128. * gcc.target/powerpc/pr85657-5.c: Likewise. * gcc.target/powerpc/pr85657-6.c: Likewise. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797