refractor,
OK unless I'm missing something, it's going to take 3 instructions using the code you posted to make certain that a value is within an arbitrary range. Two cycles to handle the upper bound and one to handle clamping to zero.
I suppose if you know from the operations you're performing on the data, you would only need to clamp against one of the bounds. In that case, there's no win in testing up front.
One other thing to mention, in the case of clamping to an aribtrary upper limit (non-pow2), you're going to run into problems if the max value can't be described with 8-bits that are shifted by an arbitrary amount (shifter-operand). It could take another instruction to load the correct immediate data.