# This filter is compiled to all_instructions.bpf by the `bpf_asm`
# tool, which can be found in the linux kernel source tree under
# tools/bpf.

# Load immediate
ld #42
ldx #42

# Load scratch
ld M[3]
ldx M[3]

# Load absolute
ldb [42]
ldh [42]
ld [42]

# Load indirect
ldb [x + 42]
ldh [x + 42]
ld [x + 42]

# Load IPv4 header length
ldx 4*([42]&0xf)

# Run extension function
ld #len
ld #proto
ld #type
ld #rand

# Store scratch
st M[3]
stx M[3]

# A <op> constant
add #42
sub #42
mul #42
div #42
or #42
and #42
lsh #42
rsh #42
mod #42
xor #42

# A <op> X
add x
sub x
mul x
div x
or x
and x
lsh x
rsh x
mod x
xor x

# !A
neg

# Jump A <op> constant
ja end
jeq #42,prev,end
jne #42,end
jlt #42,end
jle #42,end
jgt #42,prev,end
jge #42,prev,end
jset #42,prev,end

# Jump A <op> X
jeq x,prev,end
jne x,end
jlt x,end
jle x,end
jgt x,prev,end
jge x,prev,end
jset x,prev,end

# Register transfers
tax
txa

# Returns
prev: ret a
end: ret #42
