From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id DA61B3858D32; Sat, 10 Feb 2024 11:53:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DA61B3858D32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1707565980; bh=BsPiGA0p8cgRkpwVIYuS6ntInz77UEHZFfjyNw6dMCo=; h=From:To:Subject:Date:From; b=cjZYLCk9dZCzG7llGRwEBKW5ETrJf1BB/sR9ExEgkMgzhXWD2sl/UMtml3X8/SE2l bhSz9fjJv+fhtrteooGBvJidq/WdrUXPcZbV3Xw8C8HelC9ZZwmno9TNHBQhiPYI+U e1PIXXv4xd0HlpGi7/QIb/xGg5rumjKIoIcnlx9M= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-8911] libgcc: Fix BIL_TYPE_SIZE == 32 support in _BitInt <-> dfp support X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/master X-Git-Oldrev: 39920447f876128ff7942a9cd931021800865894 X-Git-Newrev: b2684e5512b097fbaa63dd18c35f8af4b351920c Message-Id: <20240210115300.DA61B3858D32@sourceware.org> Date: Sat, 10 Feb 2024 11:53:00 +0000 (GMT) List-Id: https://gcc.gnu.org/g:b2684e5512b097fbaa63dd18c35f8af4b351920c commit r14-8911-gb2684e5512b097fbaa63dd18c35f8af4b351920c Author: Jakub Jelinek Date: Sat Feb 10 12:50:52 2024 +0100 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 * 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. Diff: --- libgcc/soft-fp/fixddbitint.c | 2 +- libgcc/soft-fp/fixsdbitint.c | 2 +- libgcc/soft-fp/fixtdbitint.c | 4 ++-- libgcc/soft-fp/floatbitintdd.c | 10 +++++----- libgcc/soft-fp/floatbitinttd.c | 18 +++++++++++------- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/libgcc/soft-fp/fixddbitint.c b/libgcc/soft-fp/fixddbitint.c index bd212aec9687..7b0162e9058a 100644 --- a/libgcc/soft-fp/fixddbitint.c +++ b/libgcc/soft-fp/fixddbitint.c @@ -103,7 +103,7 @@ __bid_fixddbitint (UBILtype *r, SItype rprec, _Decimal64 a) #if BIL_TYPE_SIZE == 64 d = limbs[0]; #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 # error Unsupported BIL_TYPE_SIZE #endif diff --git a/libgcc/soft-fp/fixsdbitint.c b/libgcc/soft-fp/fixsdbitint.c index 98e3ab9f13a3..2ba550ff99fe 100644 --- a/libgcc/soft-fp/fixsdbitint.c +++ b/libgcc/soft-fp/fixsdbitint.c @@ -104,7 +104,7 @@ __bid_fixsdbitint (UBILtype *r, SItype rprec, _Decimal32 a) #if BIL_TYPE_SIZE == 64 d = limbs[0]; #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 # error Unsupported BIL_TYPE_SIZE #endif diff --git a/libgcc/soft-fp/fixtdbitint.c b/libgcc/soft-fp/fixtdbitint.c index 6d33ec2a05d1..66aca1cbdcce 100644 --- a/libgcc/soft-fp/fixtdbitint.c +++ b/libgcc/soft-fp/fixtdbitint.c @@ -126,9 +126,9 @@ __bid_fixtdbitint (UBILtype *r, SItype rprec, _Decimal128 a) mantissalo = limbs[BITINT_END (5, 4)]; rem = limbs[6] | limbs[7]; #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)]; - mantissalo = limbs[BITINT_END (10, 9)] << 32; + mantissalo = (UDItype) limbs[BITINT_END (10, 9)] << 32; mantissalo |= limbs[BITINT_END (11, 8)]; rem = limbs[12] | limbs[13] | limbs[14] | limbs[15]; #endif diff --git a/libgcc/soft-fp/floatbitintdd.c b/libgcc/soft-fp/floatbitintdd.c index 0fcc845e1fdd..77c5fd75e0e3 100644 --- a/libgcc/soft-fp/floatbitintdd.c +++ b/libgcc/soft-fp/floatbitintdd.c @@ -132,7 +132,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec) #if BIL_TYPE_SIZE == 64 m = buf[BITINT_END (1, 0)]; #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 # error Unsupported BIL_TYPE_SIZE #endif @@ -212,7 +212,8 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec) mantissa = buf[q_limbs + pow10_limbs * 2 + 1]; #else 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)]); #endif } @@ -220,8 +221,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec) #if BIL_TYPE_SIZE == 64 mantissa = buf[BITINT_END (1, 0)]; #else - mantissa - = ((buf[1] << 32) | buf[BITINT_END (2, 0)]); + mantissa = (UDItype) buf[1] << 32 | buf[BITINT_END (2, 0)]; #endif } else @@ -232,7 +232,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec) if (in == 1) mantissa = iprec < 0 ? (UDItype) (BILtype) msb : (UDItype) msb; else - mantissa = ((msb << 32) | i[BITINT_END (1, 0)]); + mantissa = (UDItype) msb << 32 | i[BITINT_END (1, 0)]; #endif if (iprec < 0) mantissa = -mantissa; diff --git a/libgcc/soft-fp/floatbitinttd.c b/libgcc/soft-fp/floatbitinttd.c index 329ce1b2844e..3bc18e201021 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