Hi Bart,
Since the return value of this function is 'u32', can the ' & 0xffffffff' be left out?
Absolutely, and I almost zapped it. However, I decided to leave it to emphasize the point that the reference tag is truncated to a 32-bit value. To me, this is more obvious than having to backtrack and spot the u32 in the function definition. I generally appreciate some sort of commentary around a return statement if the value deviates from the ordinary.
The parentheses around the shift value irk me but had to leave those in place to silence gcc.