Sequential multiplications by 2^N are optimized but sequential divisions are not
Divisions in this example have no reasons not to compile into "shr 9", as multiplications do. X isn't even signed.
var
x: SizeUint;
begin
// produces "shl 9"
x := SizeUint(random(0)) * 2 * 2 * 2 * 4 * 4 * 4;
writeln(x);
// produces six "shr"s
x := SizeUint(random(0)) div 2 div 2 div 2 div 4 div 4 div 4;
writeln(x);
end.