public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-8911] libgcc: Fix BIL_TYPE_SIZE == 32 support in _BitInt <-> dfp support
@ 2024-02-10 11:53 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2024-02-10 11:53 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:b2684e5512b097fbaa63dd18c35f8af4b351920c

commit r14-8911-gb2684e5512b097fbaa63dd18c35f8af4b351920c
Author: Jakub Jelinek <jakub@redhat.com>
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  <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.

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-02-10 11:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-10 11:53 [gcc r14-8911] libgcc: Fix BIL_TYPE_SIZE == 32 support in _BitInt <-> dfp support Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).