With these #define
s without arguments
#define r 31
#define UMASK (0xffffffffUL<<r)
#define LMASK (0xffffffffUL ^ UMASK)
will UMASK
be identical to (0xffffffffUL<<31)
and LMASK
be identical to (0xffffffffUL ^ (0xffffffffUL<<31))
in the actual code? Which is
uint32_t x = (state_array[k] & UMASK) | (state_array[j] & LMASK);
I want the compiler to see it as
uint32_t x = (state_array[k] & 0x80000000UL) | (state_array[j] & 0x7fffffffUL);
I just cannot decode the standard enough to spell it out.