def W64.shl.pick

bend-osdev-word64@0.1.1.0 · word64.bend:175

import bend-osdev-word64@0.1.1.0/word64.bend as Word64
import Base

175# shifts by k bits: 0 leaves the word, 64 or more gives 0
176def W64.shl.pick(z: Bool, lt32: Bool, lt64: Bool, +k: Nat, a: W64) -> W64:
177  match z lt32 lt64:
178    case True{} _ _:
179      a
180    case False{} True{} _:
181      match a:
182        case W64{h, +l}:
183          W64{U32.or(U32.shln(h, k), U32.shrn(l, Nat.sub(32n, k))), U32.shln(l, k)}
184    case False{} False{} True{}:
185      match a:
186        case W64{h, l}:
187          W64{U32.shln(l, Nat.sub(k, 32n)), 0}
188    case False{} False{} False{}:
189      W64.zero()

Uses (8)

Used by (3)