Negative & large shifts are implementation specific. This should be made clear in the specification, and some testing should be done on various implementations/hosts to document the range of behaviors.