def word64.shl
import bendonnect-rpc@0.1.0.0/src/pb.bend as Pbimport Base
import bend-kit-protobuf@0.1.0.0/protobuf.bend as Pb
80# Logical shifts, n in 0..63.
81def word64.shl(w: Pb.Word64, +n: U32) -> Pb.Word64:
82 Pb.Word64{+h, +l} = w
83 +a = (n .&. 31 : U32)
84 +big = U32.is_ge(n, 32)
85 Pb.Word64{
86 Bool.pick(U32, big, (l << U32.to_nat(a) : U32), ((h << U32.to_nat(a)) .|. (l >> U32.to_nat((32 - a : U32))) : U32)),
87 Bool.pick(U32, big, 0, (l << U32.to_nat(a) : U32))}