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

Reply via email to