diff mbox

[LIBGCC] Avoid count_leading_zeros with undefined result (PR 78067)

Message ID 1478793533-13186-1-git-send-email-james.greenhalgh@arm.com
State New
Headers show

Commit Message

James Greenhalgh Nov. 10, 2016, 3:58 p.m. UTC
On Wed, Nov 09, 2016 at 10:16:35PM +0000, Joseph Myers wrote:
> On Wed, 9 Nov 2016, Bernd Edlinger wrote:
>
> > Yes, but maybe introduce a test if the half-wide value fits?
> >
> > like:
> >
> > #define M_OK2(M, T) ((M) > sizeof(T) * CHAR_BIT / 2 - 1)
>
> Something like that.

In patch form, that would look like this...

I've checked on my ARM and AArch64 trees with _Float16 support that this
lets the tests pass.

OK?

Thanks,
James

---
2016-11-10  James Greenhalgh  <james.greenhalgh@arm.com>

	* gcc.dg/torture/fp-int-convert.h (M_OK2): New, use it in
	WVAL0S tests added in r241817.

Comments

Joseph Myers Nov. 10, 2016, 4:46 p.m. UTC | #1
On Thu, 10 Nov 2016, James Greenhalgh wrote:

> 
> On Wed, Nov 09, 2016 at 10:16:35PM +0000, Joseph Myers wrote:
> > On Wed, 9 Nov 2016, Bernd Edlinger wrote:
> >
> > > Yes, but maybe introduce a test if the half-wide value fits?
> > >
> > > like:
> > >
> > > #define M_OK2(M, T) ((M) > sizeof(T) * CHAR_BIT / 2 - 1)
> >
> > Something like that.
> 
> In patch form, that would look like this...
> 
> I've checked on my ARM and AArch64 trees with _Float16 support that this
> lets the tests pass.
> 
> OK?

OK.
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert.h b/gcc/testsuite/gcc.dg/torture/fp-int-convert.h
index bbe9666..2b904b6 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-int-convert.h
+++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert.h
@@ -53,13 +53,14 @@  do {								\
   TEST_I_F_VAL (U, F, HVAL1U (P, U), P_OK (P, U));		\
   TEST_I_F_VAL (U, F, HVAL1U (P, U) + 1, P_OK (P, U));		\
   TEST_I_F_VAL (U, F, HVAL1U (P, U) - 1, P_OK (P, U));		\
-  TEST_I_F_VAL (I, F, WVAL0S (I), 1);				\
-  TEST_I_F_VAL (I, F, -WVAL0S (I), 1);				\
+  TEST_I_F_VAL (I, F, WVAL0S (I), M_OK2 (M, U));		\
+  TEST_I_F_VAL (I, F, -WVAL0S (I), M_OK2 (M, U));		\
 } while (0)
 
 #define P_OK(P, T) ((P) >= sizeof(T) * CHAR_BIT)
 #define P_OK1(P, T) ((P) >= sizeof(T) * CHAR_BIT - 1)
 #define M_OK1(M, T) ((M) > sizeof(T) * CHAR_BIT - 1)
+#define M_OK2(M, T) ((M) > sizeof(T) * CHAR_BIT / 2 - 1)
 #define HVAL0U(P, U) (U)(P_OK (P, U)					 \
 			 ? (U)1						 \
 			 : (((U)1 << (sizeof(U) * CHAR_BIT - 1))	 \