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.
This commit is contained in:
Jakub Jelinek 2024-02-10 12:50:52 +01:00
parent 39920447f8
commit b2684e5512
5 changed files with 20 additions and 16 deletions

View file

@ -103,7 +103,7 @@ __bid_fixddbitint (UBILtype *r, SItype rprec, _Decimal64 a)
#if BIL_TYPE_SIZE == 64 #if BIL_TYPE_SIZE == 64
d = limbs[0]; d = limbs[0];
#elif BIL_TYPE_SIZE == 32 #elif BIL_TYPE_SIZE == 32
d = (limbs[BITINT_END (0, 1)] << 32) | limbs[BITINT_END (1, 0)]; d = (UDItype) limbs[BITINT_END (0, 1)] << 32 | limbs[BITINT_END (1, 0)];
#else #else
# error Unsupported BIL_TYPE_SIZE # error Unsupported BIL_TYPE_SIZE
#endif #endif

View file

@ -104,7 +104,7 @@ __bid_fixsdbitint (UBILtype *r, SItype rprec, _Decimal32 a)
#if BIL_TYPE_SIZE == 64 #if BIL_TYPE_SIZE == 64
d = limbs[0]; d = limbs[0];
#elif BIL_TYPE_SIZE == 32 #elif BIL_TYPE_SIZE == 32
d = (limbs[BITINT_END (0, 1)] << 32) | limbs[BITINT_END (1, 0)]; d = (UDItype) limbs[BITINT_END (0, 1)] << 32 | limbs[BITINT_END (1, 0)];
#else #else
# error Unsupported BIL_TYPE_SIZE # error Unsupported BIL_TYPE_SIZE
#endif #endif

View file

@ -126,9 +126,9 @@ __bid_fixtdbitint (UBILtype *r, SItype rprec, _Decimal128 a)
mantissalo = limbs[BITINT_END (5, 4)]; mantissalo = limbs[BITINT_END (5, 4)];
rem = limbs[6] | limbs[7]; rem = limbs[6] | limbs[7];
#elif BIL_TYPE_SIZE == 32 #elif BIL_TYPE_SIZE == 32
mantissahi = limbs[BITINT_END (8, 11)] << 32; mantissahi = (UDItype) limbs[BITINT_END (8, 11)] << 32;
mantissahi |= limbs[BITINT_END (9, 10)]; mantissahi |= limbs[BITINT_END (9, 10)];
mantissalo = limbs[BITINT_END (10, 9)] << 32; mantissalo = (UDItype) limbs[BITINT_END (10, 9)] << 32;
mantissalo |= limbs[BITINT_END (11, 8)]; mantissalo |= limbs[BITINT_END (11, 8)];
rem = limbs[12] | limbs[13] | limbs[14] | limbs[15]; rem = limbs[12] | limbs[13] | limbs[14] | limbs[15];
#endif #endif

View file

@ -132,7 +132,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
#if BIL_TYPE_SIZE == 64 #if BIL_TYPE_SIZE == 64
m = buf[BITINT_END (1, 0)]; m = buf[BITINT_END (1, 0)];
#elif BIL_TYPE_SIZE == 32 #elif BIL_TYPE_SIZE == 32
m = ((UDItype) buf[1] << 32) | buf[BITINT_END (2, 0)]; m = (UDItype) buf[1] << 32 | buf[BITINT_END (2, 0)];
#else #else
# error Unsupported BIL_TYPE_SIZE # error Unsupported BIL_TYPE_SIZE
#endif #endif
@ -212,7 +212,8 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
mantissa = buf[q_limbs + pow10_limbs * 2 + 1]; mantissa = buf[q_limbs + pow10_limbs * 2 + 1];
#else #else
mantissa mantissa
= ((buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (0, 1)] << 32) = ((UDItype)
buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (0, 1)] << 32
| buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 0)]); | buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 0)]);
#endif #endif
} }
@ -220,8 +221,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
#if BIL_TYPE_SIZE == 64 #if BIL_TYPE_SIZE == 64
mantissa = buf[BITINT_END (1, 0)]; mantissa = buf[BITINT_END (1, 0)];
#else #else
mantissa mantissa = (UDItype) buf[1] << 32 | buf[BITINT_END (2, 0)];
= ((buf[1] << 32) | buf[BITINT_END (2, 0)]);
#endif #endif
} }
else else
@ -232,7 +232,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
if (in == 1) if (in == 1)
mantissa = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; mantissa = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb;
else else
mantissa = ((msb << 32) | i[BITINT_END (1, 0)]); mantissa = (UDItype) msb << 32 | i[BITINT_END (1, 0)];
#endif #endif
if (iprec < 0) if (iprec < 0)
mantissa = -mantissa; mantissa = -mantissa;

View file

@ -196,10 +196,12 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
mantissalo = buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 0)]; mantissalo = buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 0)];
#else #else
mantissahi 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)]); | buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (1, 2)]);
mantissalo 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)]); | buf[q_limbs + pow10_limbs * 2 + 1 + BITINT_END (3, 0)]);
#endif #endif
} }
@ -209,8 +211,10 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
mantissahi = buf[BITINT_END (0, 1)]; mantissahi = buf[BITINT_END (0, 1)];
mantissalo = buf[BITINT_END (1, 0)]; mantissalo = buf[BITINT_END (1, 0)];
#else #else
mantissahi = (buf[BITINT_END (0, 3)] << 32) | buf[BITINT_END (1, 2)]; mantissahi = ((UDItype) buf[BITINT_END (0, 3)] << 32
mantissalo = (buf[BITINT_END (2, 1)] << 32) | buf[BITINT_END (3, 0)]; | buf[BITINT_END (1, 2)]);
mantissalo = ((UDItype) buf[BITINT_END (2, 1)] << 32
| buf[BITINT_END (3, 0)]);
#endif #endif
} }
} }
@ -231,15 +235,15 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
if (in == 1) if (in == 1)
mantissalo = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; mantissalo = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb;
else else
mantissalo = (msb << 32) | i[BITINT_END (1, 0)]; mantissalo = (UDItype) msb << 32 | i[BITINT_END (1, 0)];
} }
else else
{ {
if (in == 3) if (in == 3)
mantissahi = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; mantissahi = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb;
else else
mantissahi = (msb << 32) | i[BITINT_END (1, 2)]; mantissahi = (UDItype) msb << 32 | i[BITINT_END (1, 2)];
mantissalo = ((i[BITINT_END (in - 2, 1)] << 32) mantissalo = ((UDItype) i[BITINT_END (in - 2, 1)] << 32
| i[BITINT_END (in - 1, 0)]); | i[BITINT_END (in - 1, 0)]);
} }
#endif #endif