def bpf_alu
bend-osdev-bpf@0.1.0.0 · bpf.bend:225
import bend-osdev-bpf@0.1.0.0/bpf.bend as Bpf
import Base
import bend-osdev-bpf@0.1.0.0/insn.bend as I
225
226def bpf_alu(o: I.BpfAluOp, +a: U32, +v: U32) -> Maybe<&2, U32>:
227 match o:
228 case I.BpfAdd{}:
229 Some{U32.add(a, v)}
230 case I.BpfSub{}:
231 Some{U32.sub(a, v)}
232 case I.BpfMul{}:
233 Some{U32.mul(a, v)}
234 case I.BpfDiv{}:
235 bpf_div(U32.is_zero(v), a, v)
236 case I.BpfOr{}:
237 Some{U32.or(a, v)}
238 case I.BpfAnd{}:
239 Some{U32.and(a, v)}
240 case I.BpfLsh{}:
241 Some{bpf_shl(U32.is_lt(v, 32), a, v)}
242 case I.BpfRsh{}:
243 Some{bpf_shr(U32.is_lt(v, 32), a, v)}
244 case I.BpfMod{}:
245 bpf_mod(U32.is_zero(v), a, v)
246 case I.BpfXor{}:
247 Some{U32.xor(a, v)}