diff options
author | Jakub Jelinek <jakub@redhat.com> | 2024-02-10 12:50:52 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2024-02-10 12:50:52 +0100 |
commit | b2684e5512b097fbaa63dd18c35f8af4b351920c (patch) | |
tree | 518c686730121bc0969d28916fd46def4d925ab4 /libgcc/soft-fp/floatbitinttd.c | |
parent | 39920447f876128ff7942a9cd931021800865894 (diff) | |
download | gcc-b2684e5512b097fbaa63dd18c35f8af4b351920c.zip gcc-b2684e5512b097fbaa63dd18c35f8af4b351920c.tar.gz gcc-b2684e5512b097fbaa63dd18c35f8af4b351920c.tar.bz2 |
libgcc: Fix BIL_TYPE_SIZE == 32 support in _BitInt <-> dfp support
I've tried last night to enable _BitInt support for i?86-linux, and
a few spots in libgcc emitted -Wshift-count-overflow warnings and clearly
didn't do what it was supposed to do.
Fixed thusly.
2024-02-10 Jakub Jelinek <jakub@redhat.com>
* soft-fp/fixddbitint.c (__bid_fixddbitint): Fix up
BIL_TYPE_SIZE == 32 shifts.
* soft-fp/fixsdbitint.c (__bid_fixsdbitint): Likewise.
* soft-fp/fixtdbitint.c (__bid_fixtdbitint): Likewise.
* soft-fp/floatbitintdd.c (__bid_floatbitintdd): Likewise.
* soft-fp/floatbitinttd.c (__bid_floatbitinttd): Likewise.
Diffstat (limited to 'libgcc/soft-fp/floatbitinttd.c')
-rw-r--r-- | libgcc/soft-fp/floatbitinttd.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libgcc/soft-fp/floatbitinttd.c b/libgcc/soft-fp/floatbitinttd.c index 329ce1b..3bc18e2 100644 --- a/libgcc/soft-fp/floatbitinttd.c +++ b/libgcc/soft-fp/floatbitinttd.c @@ -196,10 +196,12 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec) mantissalo = buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 0)]; #else mantissahi - = ((buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (0, 3)] << 32) + = ((UDItype) + buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (0, 3)] << 32 | buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 2)]); mantissalo - = ((buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (2, 1)] << 32) + = ((UDItype) + buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (2, 1)] << 32 | buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (3, 0)]); #endif } @@ -209,8 +211,10 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec) mantissahi = buf[BITINT_END (0, 1)]; mantissalo = buf[BITINT_END (1, 0)]; #else - mantissahi = (buf[BITINT_END (0, 3)] << 32) | buf[BITINT_END (1, 2)]; - mantissalo = (buf[BITINT_END (2, 1)] << 32) | buf[BITINT_END (3, 0)]; + mantissahi = ((UDItype) buf[BITINT_END (0, 3)] << 32 + | buf[BITINT_END (1, 2)]); + mantissalo = ((UDItype) buf[BITINT_END (2, 1)] << 32 + | buf[BITINT_END (3, 0)]); #endif } } @@ -231,15 +235,15 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec) if (in == 1) mantissalo = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; else - mantissalo = (msb << 32) | i[BITINT_END (1, 0)]; + mantissalo = (UDItype) msb << 32 | i[BITINT_END (1, 0)]; } else { if (in == 3) mantissahi = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; else - mantissahi = (msb << 32) | i[BITINT_END (1, 2)]; - mantissalo = ((i[BITINT_END (in - 2, 1)] << 32) + mantissahi = (UDItype) msb << 32 | i[BITINT_END (1, 2)]; + mantissalo = ((UDItype) i[BITINT_END (in - 2, 1)] << 32 | i[BITINT_END (in - 1, 0)]); } #endif |