def fld.bits.set
bend-osdev-acpi@0.1.1.0 · aml_field.bend:305
import bend-osdev-acpi@0.1.1.0/aml_field.bend as AmlField
import Base
import bend-osdev-word64@0.1.1.0/word64.bend as W
import bend-osdev-bytes@0.1.1.0/bytes.bend as B
305def fld.bits.set(n: Nat, xs: List<&2, U32>, +i: Nat, +k: Nat, +v: W.W64) -> List<&2, U32>:
306 match n:
307 case 0n:
308 xs
309 case 1n+p:
310 +ys = xs
311 +j = Nat.div(i, 8n)
312 +bit = U32.shln(1, Nat.mod(i, 8n))
313 +old = Maybe.default(&2, U32, B.at(ys, j), 0)
314 +on = W.W64.is_eq(W.W64.and(W.W64.shr(v, k), W.W64.one()), W.W64.one())
315 fld.bits.set(p, List.set(&2, U32, ys, j, fld.bits.one(on, old, bit)), Nat.add(i, 1n), Nat.add(k, 1n), v)