def fld.unit
bend-osdev-acpi@0.1.1.0 · aml_field.bend:64
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
64def fld.unit(+f: AmlFieldDesc, +k: Nat) -> AmlUnit:
65 match f:
66 case AmlFieldDesc{sp, +base, +rlen, +off, +bits, +flags}:
67 +w = AmlField.unit(flags)
68 +ubits = Nat.mul(w, 8n)
69 +start = Nat.mul(k, ubits)
70 +lo = fld.max(off, start)
71 +hi = fld.min(Nat.add(off, bits), Nat.add(start, ubits))
72 AmlUnit{W.W64.add(base, W.W64.from_nat(Nat.mul(k, w))), Nat.sub(lo, start), Nat.sub(hi, lo), Nat.sub(lo, off), W.W64.is_le(W.W64.from_nat(Nat.mul(Nat.add(k, 1n), w)), rlen)}