https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102989

--- Comment #101 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:2ce182e258d3ab11310442d5f4dd1d063018aca9

commit r14-3750-g2ce182e258d3ab11310442d5f4dd1d063018aca9
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Sep 6 17:33:05 2023 +0200

    libgcc _BitInt support [PR102989]

    This patch adds the library helpers for multiplication, division + modulo
    and casts from and to floating point (both binary and decimal).
    As described in the intro, the first step is try to reduce further the
    passed in precision by skipping over most significant limbs with just zeros
    or sign bit copies.  For multiplication and division I've implemented
    a simple algorithm, using something smarter like Karatsuba or Toom N-Way
    might be faster for very large _BitInts (which we don't support right now
    anyway), but could mean more code in libgcc, which maybe isn't what people
    are willing to accept.
    For the to/from floating point conversions the patch uses soft-fp, because
    it already has tons of handy macros which can be used for that.  In theory
    it could be implemented using {,unsigned} long long or {,unsigned} __int128
    to/from floating point conversions with some frexp before/after, but at
that
    point we already need to force it into integer registers and analyze it
    anyway.  Plus, for 32-bit arches there is no __int128 that could be used
    for XF/TF mode stuff.
    I know that soft-fp is owned by glibc and I think the op-common.h change
    should be propagated there, but the bitint stuff is really GCC specific
    and IMHO doesn't belong into the glibc copy.

    2023-09-06  Jakub Jelinek  <ja...@redhat.com>

            PR c/102989
    libgcc/
            * config/aarch64/t-softfp (softfp_extras): Use += rather than :=.
            * config/i386/64/t-softfp (softfp_extras): Likewise.
            * config/i386/libgcc-glibc.ver (GCC_14.0.0): Export _BitInt support
            routines.
            * config/i386/t-softfp (softfp_extras): Add fixxfbitint and
            bf, hf and xf mode floatbitint.
            (CFLAGS-floatbitintbf.c, CFLAGS-floatbitinthf.c): Add -msse2.
            * config/riscv/t-softfp32 (softfp_extras): Use += rather than :=.
            * config/rs6000/t-e500v1-fp (softfp_extras): Likewise.
            * config/rs6000/t-e500v2-fp (softfp_extras): Likewise.
            * config/t-softfp (softfp_floatbitint_funcs): New.
            (softfp_bid_list): New.
            (softfp_func_list): Add sf and df mode from and to _BitInt
libcalls.
            (softfp_bid_file_list): New.
            (LIB2ADD_ST): Add $(softfp_bid_file_list).
            * config/t-softfp-sfdftf (softfp_extras): Add fixtfbitint and
            floatbitinttf.
            * config/t-softfp-tf (softfp_extras): Likewise.
            * libgcc2.c (bitint_reduce_prec): New inline function.
            (BITINT_INC, BITINT_END): Define.
            (bitint_mul_1, bitint_addmul_1): New helper functions.
            (__mulbitint3): New function.
            (bitint_negate, bitint_submul_1): New helper functions.
            (__divmodbitint4): New function.
            * libgcc2.h (LIBGCC2_UNITS_PER_WORD): When building _BitInt support
            libcalls, redefine depending on __LIBGCC_BITINT_LIMB_WIDTH__.
            (__mulbitint3, __divmodbitint4): Declare.
            * libgcc-std.ver.in (GCC_14.0.0): Export _BitInt support routines.
            * Makefile.in (lib2funcs): Add _mulbitint3.
            (LIB2_DIVMOD_FUNCS): Add _divmodbitint4.
            * soft-fp/bitint.h: New file.
            * soft-fp/fixdfbitint.c: New file.
            * soft-fp/fixsfbitint.c: New file.
            * soft-fp/fixtfbitint.c: New file.
            * soft-fp/fixxfbitint.c: New file.
            * soft-fp/floatbitintbf.c: New file.
            * soft-fp/floatbitintdf.c: New file.
            * soft-fp/floatbitinthf.c: New file.
            * soft-fp/floatbitintsf.c: New file.
            * soft-fp/floatbitinttf.c: New file.
            * soft-fp/floatbitintxf.c: New file.
            * soft-fp/op-common.h (_FP_FROM_INT): Add support for rsize up to
            4 * _FP_W_TYPE_SIZE rather than just 2 * _FP_W_TYPE_SIZE.
            * soft-fp/bitintpow10.c: New file.
            * soft-fp/fixsdbitint.c: New file.
            * soft-fp/fixddbitint.c: New file.
            * soft-fp/fixtdbitint.c: New file.
            * soft-fp/floatbitintsd.c: New file.
            * soft-fp/floatbitintdd.c: New file.
            * soft-fp/floatbitinttd.c: New file.

Reply via email to