Your constants are treated as Int32 values, and calculations work with 32-bit values, and casting to Int64 occurs after all calculations.
SHL executes as
{Value shl (Shift mod DATASIZE)}
, where DATASIZE is 32, so {shl 32} is equivalent to {shl 0} for 32-bit type. Compare
i64 := Int64($FF) shl 32;
and
i64 := $FF shl 32;
(for 32-bit compiler, at least)
Just cast constant(s) to Int64 to help the compiler a bit.