def BpfOp.encode
bend-osdev-bpf@0.1.0.0 · insn.bend:192
import bend-osdev-bpf@0.1.0.0/insn.bend as Insn
import Base
192
193def BpfOp.encode(op: BpfOp) -> BpfRaw:
194 match op:
195 case BpfLdAbs{size, k}:
196 BpfRaw{U32.or(32, BpfSize.bits(size)), 0, 0, k}
197 case BpfLdInd{size, k}:
198 BpfRaw{U32.or(64, BpfSize.bits(size)), 0, 0, k}
199 case BpfLdImm{k}:
200 BpfRaw{0, 0, 0, k}
201 case BpfLdLen{}:
202 BpfRaw{128, 0, 0, 0}
203 case BpfLdMem{k}:
204 BpfRaw{96, 0, 0, k}
205 case BpfLdxImm{k}:
206 BpfRaw{1, 0, 0, k}
207 case BpfLdxMem{k}:
208 BpfRaw{97, 0, 0, k}
209 case BpfLdxLen{}:
210 BpfRaw{129, 0, 0, 0}
211 case BpfLdxMsh{k}:
212 BpfRaw{177, 0, 0, k}
213 case BpfSt{k}:
214 BpfRaw{2, 0, 0, k}
215 case BpfStx{k}:
216 BpfRaw{3, 0, 0, k}
217 case BpfAlu{o, +src}:
218 BpfRaw{U32.or(4, U32.or(BpfAluOp.bits(o), BpfSrc.bits(src))), 0, 0, BpfSrc.k(src)}
219 case BpfNeg{}:
220 BpfRaw{132, 0, 0, 0}
221 case BpfJa{k}:
222 BpfRaw{5, 0, 0, k}
223 case BpfJmp{c, +src, jt, jf}:
224 BpfRaw{U32.or(5, U32.or(BpfCond.bits(c), BpfSrc.bits(src))), jt, jf, BpfSrc.k(src)}
225 case BpfRet{r}:
226 BpfRval.encode(r)
227 case BpfTax{}:
228 BpfRaw{7, 0, 0, 0}
229 case BpfTxa{}:
230 BpfRaw{135, 0, 0, 0}