sig
type size = W | H | B | DW
type reg = R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10
type int16 = int
type cond = [ `EQ | `GE | `GT | `NE | `SET | `SGE | `SGT ]
type +'label insn
val ldx : EBPF.size -> EBPF.reg -> EBPF.reg * EBPF.int16 -> 'a EBPF.insn
val lddw : EBPF.reg -> int64 -> 'a EBPF.insn
val stx : EBPF.size -> EBPF.reg * EBPF.int16 -> EBPF.reg -> 'a EBPF.insn
val st : EBPF.size -> EBPF.reg * EBPF.int16 -> int -> 'a EBPF.insn
val label : 'label -> 'label EBPF.insn
val ret : 'a EBPF.insn
val call : int -> 'a EBPF.insn
val jump : 'label -> 'label EBPF.insn
val jmpi : 'label -> EBPF.reg -> EBPF.cond -> int -> 'label EBPF.insn
val jmp : 'label -> EBPF.reg -> EBPF.cond -> EBPF.reg -> 'label EBPF.insn
val jump_ : EBPF.int16 -> 'a EBPF.insn
val jmpi_ : EBPF.int16 -> EBPF.reg -> EBPF.cond -> int -> 'a EBPF.insn
val jmp_ : EBPF.int16 -> EBPF.reg -> EBPF.cond -> EBPF.reg -> 'a EBPF.insn
module type ALU =
sig
val add : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val addi : EBPF.reg -> int -> 'a EBPF.insn
val sub : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val subi : EBPF.reg -> int -> 'a EBPF.insn
val mul : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val muli : EBPF.reg -> int -> 'a EBPF.insn
val div : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val divi : EBPF.reg -> int -> 'a EBPF.insn
val or_ : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val ori : EBPF.reg -> int -> 'a EBPF.insn
val and_ : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val andi : EBPF.reg -> int -> 'a EBPF.insn
val lsh : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val lshi : EBPF.reg -> int -> 'a EBPF.insn
val rsh : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val rshi : EBPF.reg -> int -> 'a EBPF.insn
val neg : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val negi : EBPF.reg -> int -> 'a EBPF.insn
val mod_ : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val modi : EBPF.reg -> int -> 'a EBPF.insn
val xor : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val xori : EBPF.reg -> int -> 'a EBPF.insn
val mov : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val movi : EBPF.reg -> int -> 'a EBPF.insn
val arsh : EBPF.reg -> EBPF.reg -> 'a EBPF.insn
val arshi : EBPF.reg -> int -> 'a EBPF.insn
end
module I32 : ALU
val add : reg -> reg -> 'a insn
val addi : reg -> int -> 'a insn
val sub : reg -> reg -> 'a insn
val subi : reg -> int -> 'a insn
val mul : reg -> reg -> 'a insn
val muli : reg -> int -> 'a insn
val div : reg -> reg -> 'a insn
val divi : reg -> int -> 'a insn
val or_ : reg -> reg -> 'a insn
val ori : reg -> int -> 'a insn
val and_ : reg -> reg -> 'a insn
val andi : reg -> int -> 'a insn
val lsh : reg -> reg -> 'a insn
val lshi : reg -> int -> 'a insn
val rsh : reg -> reg -> 'a insn
val rshi : reg -> int -> 'a insn
val neg : reg -> reg -> 'a insn
val negi : reg -> int -> 'a insn
val mod_ : reg -> reg -> 'a insn
val modi : reg -> int -> 'a insn
val xor : reg -> reg -> 'a insn
val xori : reg -> int -> 'a insn
val mov : reg -> reg -> 'a insn
val movi : reg -> int -> 'a insn
val arsh : reg -> reg -> 'a insn
val arshi : reg -> int -> 'a insn
val le16 : EBPF.reg -> 'a EBPF.insn
val be16 : EBPF.reg -> 'a EBPF.insn
val le32 : EBPF.reg -> 'a EBPF.insn
val be32 : EBPF.reg -> 'a EBPF.insn
val le64 : EBPF.reg -> 'a EBPF.insn
val be64 : EBPF.reg -> 'a EBPF.insn
type options = {
disable_all_checks : bool;
jump_back : bool;
jump_self : bool;
}
val default : EBPF.options
val assemble : ?options:EBPF.options -> 'a EBPF.insn list -> string
end