tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: introducing flags_t



David Laight wrote:
On Wed, Apr 22, 2009 at 08:20:22AM +1000, matthew green wrote:
In many places we use 'int' for flags.
   Also in most places, the flag is checked this way:
if (flags & FLAGX)
          do_something();
This is problematic when the top-most bit is used.


i'm curious what the actual problem is here.  afaict, the
code generated for the above test is the same no matter
the type of 'flags', on several platforms.

If FLAGX is the msb this might be (1 << 31), (1u << 31), 0x80000000 or
0x80000000u I think the compiler might object to the first - but the
other 3 are all unsigned (on a 32bit arch).

'int_var & unsigned_var' will implicitly cast the int to unsigned - which
is (at least for 2s compiliment systems) defined to copy the bit-pattern
over. So this will DTRT.

So the only plausible problem is if the compiler saturates the (1 << 31)
calculation generating ((1 << 31) - 1). I don't think gcc ever does this!

It would be a serious compiler bug if (1 << 31) would actually generate ((1 << 31) - 1) I think.

        Johnny

--
Johnny Billquist                  || "I'm on a bus
                                  ||  on a psychedelic trip
email: bqt%softjar.se@localhost             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


Home | Main Index | Thread Index | Old Index