]> git.ipfire.org Git - thirdparty/gcc.git/commit
libgcc: Small bitint_reduce_prec big-endian fixes
authorJakub Jelinek <jakub@redhat.com>
Tue, 20 May 2025 06:20:16 +0000 (08:20 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 20 May 2025 06:20:16 +0000 (08:20 +0200)
commit092dcef93d40ff3dfed6c35001325bf522785c25
treedb837dbbaab0c560f32d2e7da1fafa1f6a852609
parent1c32b55b99ea55035a7c726e358f75f8bf9df038
libgcc: Small bitint_reduce_prec big-endian fixes

The big-endian _BitInt support in libgcc was written without any
testing and so I haven't discovered I've made one mistake in it
(in multiple places).
The bitint_reduce_prec function attempts to optimize inputs
which have some larger precision but at runtime they are found
to need smaller number of limbs.
For little-endian that is handled just by returning smaller
precision (or negative precision for signed), but for
big-endian we need to adjust the passed in limb pointer so that
when it returns smaller precision the argument still contains
the least significant limbs for the returned precision.

2025-05-20  Jakub Jelinek  <jakub@redhat.com>

* libgcc2.c (bitint_reduce_prec): For big endian
__LIBGCC_BITINT_ORDER__ use ++*p and --*p instead of
++p and --p.
* soft-fp/bitint.h (bitint_reduce_prec): Likewise.
libgcc/libgcc2.c
libgcc/soft-fp/bitint.h