Eric Botcazou writes:
 > > > Not clear to me, (2U << i) should be zero if the shift count is masked.
 > > 
 > > 2U << 31 is undefined behavior on those targets.
 > 
 > Precisely not, or else we are not talking about the same notion of masking.

I believe Jakub is referring to the following in the C standard:

"Bitwise shift operators
...
Semantics
...  If the value of the right operand ... is greater than or equal to the
width of the promoted left operand, the behavior is undefined."

So on 16-bit int systems you can't portably shift 2U by more than 15.

(I'm not worried about the HW blowing up, but GCC itself has a long history
of exploiting no-undefinedness assumptions.)

/Mikael

Reply via email to