Thanks. I think that that behaviour is what most C programmers subconsciously expect out of the “<<” operator.
You mentioned the cost of “or-trees” in another thread. I suppose that the same or-tree used for saturating shifts is also used for the other shifts.
Putting an “and” before a “shiftlu” would be less instructions than the other way around for sure.
BTW, don’t widening instructions always widen? What about vector ops that would drop two elements on the belt?