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# A op v, or None for a division or modulo by zero
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)}

Uses (15)

Used by (2)