aboutsummaryrefslogtreecommitdiff
path: root/libgcc/soft-fp/floatbitinttd.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-02-10 12:50:52 +0100
committerJakub Jelinek <jakub@redhat.com>2024-02-10 12:50:52 +0100
commitb2684e5512b097fbaa63dd18c35f8af4b351920c (patch)
tree518c686730121bc0969d28916fd46def4d925ab4 /libgcc/soft-fp/floatbitinttd.c
parent39920447f876128ff7942a9cd931021800865894 (diff)
downloadgcc-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.c18
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