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 #6:

2015-08-13  Michael Meissner  <meiss...@linux.vnet.ibm.com>

        * config/rs6000/rs6000-protos.h (rs6000_expand_float128_convert):
        Add declaration.

        * config/rs6000/rs6000.c (rs6000_emit_le_vsx_store): Fix a
        comment.
        (rs6000_cannot_change_mode_class): Add support for IEEE 128-bit
        floating point in VSX registers.
        (rs6000_output_move_128bit): Always print out the set insn if we
        can't generate an appropriate 128-bit move.
        (rs6000_generate_compare): Add support for IEEE 128-bit floating
        point in VSX registers comparisons.
        (rs6000_expand_float128_convert): Likewise.

        * config/rs6000/rs6000.md (extenddftf2): Add support for IEEE
        128-bit floating point in VSX registers.
        (extenddftf2_internal): Likewise.
        (trunctfdf2): Likewise.
        (trunctfdf2_internal2): Likewise.
        (fix_trunc_helper): Likewise.
        (fix_trunctfdi2"): Likewise.
        (floatditf2): Likewise.
        (floatuns<mode>tf2): Likewise.
        (extend<FLOAT128_SFDFTF:mode><IFKF:mode>2): Likewise.
        (trunc<IFKF:mode><FLOAT128_SFDFTF:mode>2): Likewise.
        (fix_trunc<IFKF:mode><SDI:mode>2): Likewise.
        (fixuns_trunc<IFKF:mode><SDI:mode>2): Likewise.
        (float<SDI:mode><IFKF:mode>2): Likewise.
        (floatuns<SDI:mode><IFKF:mode>2): Likewise.


-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797
2015-08-13  Michael Meissner  <meiss...@linux.vnet.ibm.com>

        * config/rs6000/rs6000-protos.h (rs6000_expand_float128_convert):
        Add declaration.

        * config/rs6000/rs6000.c (rs6000_emit_le_vsx_store): Fix a
        comment.
        (rs6000_cannot_change_mode_class): Add support for IEEE 128-bit
        floating point in VSX registers.
        (rs6000_output_move_128bit): Always print out the set insn if we
        can't generate an appropriate 128-bit move.
        (rs6000_generate_compare): Add support for IEEE 128-bit floating
        point in VSX registers comparisons.
        (rs6000_expand_float128_convert): Likewise.

        * config/rs6000/rs6000.md (extenddftf2): Add support for IEEE
        128-bit floating point in VSX registers.
        (extenddftf2_internal): Likewise.
        (trunctfdf2): Likewise.
        (trunctfdf2_internal2): Likewise.
        (fix_trunc_helper): Likewise.
        (fix_trunctfdi2"): Likewise.
        (floatditf2): Likewise.
        (floatuns<mode>tf2): Likewise.
        (extend<FLOAT128_SFDFTF:mode><IFKF:mode>2): Likewise.
        (trunc<IFKF:mode><FLOAT128_SFDFTF:mode>2): Likewise.
        (fix_trunc<IFKF:mode><SDI:mode>2): Likewise.
        (fixuns_trunc<IFKF:mode><SDI:mode>2): Likewise.
        (float<SDI:mode><IFKF:mode>2): Likewise.
        (floatuns<SDI:mode><IFKF:mode>2): Likewise.

Reply via email to