Your change to floor_log2_wide

Richard Kenner kenner@vlsi1.ultra.nyu.edu
Tue Jun 8 20:27:00 GMT 2004


It fails for 64-bit targets.  I think the following is needed:

*** toplev.c	8 Jun 2004 19:24:02 -0000	1.903
--- toplev.c	8 Jun 2004 20:25:40 -0000
*************** floor_log2_wide (unsigned HOST_WIDE_INT 
*** 1260,1278 ****
    if (x == 0)
      return -1;
!   if (sizeof (HOST_WIDE_INT)*8 > 64)
!     if (x >= (unsigned HOST_WIDE_INT)(1 << (t+64)))
        t += 64;
!   if (sizeof (HOST_WIDE_INT)*8 > 32)
!     if (x >= (unsigned HOST_WIDE_INT)(1 << (t+32)))
        t += 32;
!   if (x >= (unsigned HOST_WIDE_INT)(1 << (t+16)))
      t += 16;
!   if (x >= (unsigned HOST_WIDE_INT)(1 << (t+8)))
      t += 8;
!   if (x >= (unsigned HOST_WIDE_INT)(1 << (t+4)))
      t += 4;
!   if (x >= (unsigned HOST_WIDE_INT)(1 << (t+2)))
      t += 2;
!   if (x >= (unsigned HOST_WIDE_INT)(1 << (t+1)))
      t += 1;
    return t;
--- 1260,1278 ----
    if (x == 0)
      return -1;
!   if (sizeof (HOST_WIDE_INT) * 8 > 64)
!     if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64))
        t += 64;
!   if (sizeof (HOST_WIDE_INT) * 8 > 32)
!     if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 32))
        t += 32;
!   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 16))
      t += 16;
!   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 8))
      t += 8;
!   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 4))
      t += 4;
!   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 2))
      t += 2;
!   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1))
      t += 1;
    return t;



More information about the Gcc mailing list