BPF Target

Instructions

ADDR_SPACE_CAST

dst = addr_space_cast(src, dst_as, src_as)
Diagram

ADD_ri

dst += imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

ADD_ri_32

dst += imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

ADD_rr

dst += src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

ADD_rr_32

dst += src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

AND_ri

dst &= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

AND_ri_32

dst &= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

AND_rr

dst &= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

AND_rr_32

dst &= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

CMPXCHGD

r0 = cmpxchg_64(addr, r0, new)
Diagram

DIV_ri

dst /= imm
Diagram
Note

Constraints: dst = src2

DIV_ri_32

dst /= imm
Diagram
Note

Constraints: dst = src2

DIV_rr

dst /= src
Diagram
Note

Constraints: dst = src2

DIV_rr_32

dst /= src
Diagram
Note

Constraints: dst = src2

JAL

call BrDst
Diagram
Note

Properties: isCall

JALX

callx BrDst
Diagram
Note

Properties: isCall

JCOND

may_goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JEQ_ri

if dst == imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JEQ_ri_32

if dst == imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JEQ_rr

if dst == src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JEQ_rr_32

if dst == src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JMP

goto BrDst
Diagram
Note

Properties: isBarrier, isBranch, isTerminator

JMPL

gotol BrDst
Diagram
Note

Properties: isBarrier, isBranch, isTerminator

JNE_ri

if dst != imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JNE_ri_32

if dst != imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JNE_rr

if dst != src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JNE_rr_32

if dst != src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSET_ri

if dst & imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSET_ri_32

if dst & imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSET_rr

if dst & src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSET_rr_32

if dst & src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGE_ri

if dst s>= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGE_ri_32

if dst s>= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGE_rr

if dst s>= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGE_rr_32

if dst s>= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGT_ri

if dst s> imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGT_ri_32

if dst s> imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGT_rr

if dst s> src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSGT_rr_32

if dst s> src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLE_ri

if dst s<= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLE_ri_32

if dst s<= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLE_rr

if dst s<= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLE_rr_32

if dst s<= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLT_ri

if dst s< imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLT_ri_32

if dst s< imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLT_rr

if dst s< src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JSLT_rr_32

if dst s< src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGE_ri

if dst >= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGE_ri_32

if dst >= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGE_rr

if dst >= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGE_rr_32

if dst >= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGT_ri

if dst > imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGT_ri_32

if dst > imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGT_rr

if dst > src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JUGT_rr_32

if dst > src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULE_ri

if dst <= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULE_ri_32

if dst <= imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULE_rr

if dst <= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULE_rr_32

if dst <= src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULT_ri

if dst < imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULT_ri_32

if dst < imm goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULT_rr

if dst < src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

JULT_rr_32

if dst < src goto BrDst
Diagram
Note

Properties: isBranch, isTerminator

LDD

dst = *(u64 *)(addr)
Diagram

LD_ABS_B

r0 = *(u8 *)skb[imm]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_ABS_H

r0 = *(u16 *)skb[imm]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_ABS_W

r0 = *(u32 *)skb[imm]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_IND_B

r0 = *(u8 *)skb[val]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_IND_H

r0 = *(u16 *)skb[val]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_IND_W

r0 = *(u32 *)skb[val]
Diagram
Note

Properties: hasSideEffects, mayLoad

LD_imm64

dst = imm ll
Diagram
Note

Properties: isAsCheapAsAMove

LD_pseudo

ld_pseudo	dst, pseudo, imm
Diagram

MOD_ri

dst %= imm
Diagram
Note

Constraints: dst = src2

MOD_ri_32

dst %= imm
Diagram
Note

Constraints: dst = src2

MOD_rr

dst %= src
Diagram
Note

Constraints: dst = src2

MOD_rr_32

dst %= src
Diagram
Note

Constraints: dst = src2

MOV_ri

dst = imm
Diagram
Note

Properties: isAsCheapAsAMove

MOV_ri_32

dst = imm
Diagram
Note

Properties: isAsCheapAsAMove

MOV_rr

dst = src
Diagram
Note

Properties: isAsCheapAsAMove

MOV_rr_32

dst = src
Diagram
Note

Properties: isAsCheapAsAMove

MUL_ri

dst *= imm
Diagram
Note

Constraints: dst = src2

MUL_ri_32

dst *= imm
Diagram
Note

Constraints: dst = src2

MUL_rr

dst *= src
Diagram
Note

Constraints: dst = src2

MUL_rr_32

dst *= src
Diagram
Note

Constraints: dst = src2

NEG_32

dst = -src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src

NEG_64

dst = -src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src

OR_ri

dst |= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

OR_ri_32

dst |= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

OR_rr

dst |= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

OR_rr_32

dst |= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

RET

exit
Diagram
Note

Properties: isBarrier, isNotDuplicable, isReturn, isTerminator

SLL_ri

dst <<= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SLL_ri_32

dst <<= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SLL_rr

dst <<= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SLL_rr_32

dst <<= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRA_ri

dst s>>= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRA_ri_32

dst s>>= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRA_rr

dst s>>= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRA_rr_32

dst s>>= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRL_ri

dst >>= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRL_ri_32

dst >>= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRL_rr

dst >>= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SRL_rr_32

dst >>= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

STD

*(u64 *)(addr) = src
Diagram

SUB_ri

dst -= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SUB_ri_32

dst -= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SUB_rr

dst -= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

SUB_rr_32

dst -= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

XADDD

lock *(u64 *)(addr) += val
Diagram
Note

Constraints: dst = val

XADDW

lock *(u32 *)(addr) += val
Diagram
Note

Constraints: dst = val

XANDD

lock *(u64 *)(addr) &= val
Diagram
Note

Constraints: dst = val

XCHGD

dst = xchg_64(addr, val)
Diagram
Note

Constraints: dst = val

XFANDD

dst = atomic_fetch_and((u64 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFORD

dst = atomic_fetch_or((u64 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFXORD

dst = atomic_fetch_xor((u64 *)(addr), val)
Diagram
Note

Constraints: dst = val

XORD

lock *(u64 *)(addr) |= val
Diagram
Note

Constraints: dst = val

XOR_ri

dst ^= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

XOR_ri_32

dst ^= imm
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

XOR_rr

dst ^= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

XOR_rr_32

dst ^= src
Diagram
Note

Properties: isAsCheapAsAMove

Note

Constraints: dst = src2

XXORD

lock *(u64 *)(addr) ^= val
Diagram
Note

Constraints: dst = val

CMPXCHGW32 [BPFHasALU32]

w0 = cmpxchg32_32(addr, w0, new)
Diagram

LDB32 [BPFHasALU32]

dst = *(u8 *)(addr)
Diagram

LDH32 [BPFHasALU32]

dst = *(u16 *)(addr)
Diagram

LDW32 [BPFHasALU32]

dst = *(u32 *)(addr)
Diagram

STB32 [BPFHasALU32]

*(u8 *)(addr) = src
Diagram

STH32 [BPFHasALU32]

*(u16 *)(addr) = src
Diagram

STW32 [BPFHasALU32]

*(u32 *)(addr) = src
Diagram

XADDW32 [BPFHasALU32]

lock *(u32 *)(addr) += val
Diagram
Note

Constraints: dst = val

XANDW32 [BPFHasALU32]

lock *(u32 *)(addr) &= val
Diagram
Note

Constraints: dst = val

XCHGW32 [BPFHasALU32]

dst = xchg32_32(addr, val)
Diagram
Note

Constraints: dst = val

XFADDD [BPFHasALU32]

dst = atomic_fetch_add((u64 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFADDW32 [BPFHasALU32]

dst = atomic_fetch_add((u32 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFANDW32 [BPFHasALU32]

dst = atomic_fetch_and((u32 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFORW32 [BPFHasALU32]

dst = atomic_fetch_or((u32 *)(addr), val)
Diagram
Note

Constraints: dst = val

XFXORW32 [BPFHasALU32]

dst = atomic_fetch_xor((u32 *)(addr), val)
Diagram
Note

Constraints: dst = val

XORW32 [BPFHasALU32]

lock *(u32 *)(addr) |= val
Diagram
Note

Constraints: dst = val

XXORW32 [BPFHasALU32]

lock *(u32 *)(addr) ^= val
Diagram
Note

Constraints: dst = val

LDBACQ32 [BPFHasLoadAcqStoreRel]

dst = load_acquire((u8 *)(addr))
Diagram

LDDACQ [BPFHasLoadAcqStoreRel]

dst = load_acquire((u64 *)(addr))
Diagram

LDHACQ32 [BPFHasLoadAcqStoreRel]

dst = load_acquire((u16 *)(addr))
Diagram

LDWACQ32 [BPFHasLoadAcqStoreRel]

dst = load_acquire((u32 *)(addr))
Diagram

SDIV_ri [BPFHasSdivSmod]

dst s/= imm
Diagram
Note

Constraints: dst = src2

SDIV_ri_32 [BPFHasSdivSmod]

dst s/= imm
Diagram
Note

Constraints: dst = src2

SDIV_rr [BPFHasSdivSmod]

dst s/= src
Diagram
Note

Constraints: dst = src2

SDIV_rr_32 [BPFHasSdivSmod]

dst s/= src
Diagram
Note

Constraints: dst = src2

SMOD_ri [BPFHasSdivSmod]

dst s%= imm
Diagram
Note

Constraints: dst = src2

SMOD_ri_32 [BPFHasSdivSmod]

dst s%= imm
Diagram
Note

Constraints: dst = src2

SMOD_rr [BPFHasSdivSmod]

dst s%= src
Diagram
Note

Constraints: dst = src2

SMOD_rr_32 [BPFHasSdivSmod]

dst s%= src
Diagram
Note

Constraints: dst = src2

STBREL32 [BPFHasLoadAcqStoreRel]

store_release((u8 *)(addr), src)
Diagram

STDREL [BPFHasLoadAcqStoreRel]

store_release((u64 *)(addr), src)
Diagram

STHREL32 [BPFHasLoadAcqStoreRel]

store_release((u16 *)(addr), src)
Diagram

STWREL32 [BPFHasLoadAcqStoreRel]

store_release((u32 *)(addr), src)
Diagram

LDB [BPFNoALU32]

dst = *(u8 *)(addr)
Diagram

LDH [BPFNoALU32]

dst = *(u16 *)(addr)
Diagram

LDW [BPFNoALU32]

dst = *(u32 *)(addr)
Diagram

STB [BPFNoALU32]

*(u8 *)(addr) = src
Diagram

STH [BPFNoALU32]

*(u16 *)(addr) = src
Diagram

STW [BPFNoALU32]

*(u32 *)(addr) = src
Diagram

MOVSX_rr_16 [BPFHasMovsx]

dst = (s16)src
Diagram
Note

Properties: isAsCheapAsAMove

MOVSX_rr_32 [BPFHasMovsx]

dst = (s32)src
Diagram
Note

Properties: isAsCheapAsAMove

MOVSX_rr_32_16 [BPFHasMovsx]

dst = (s16)src
Diagram
Note

Properties: isAsCheapAsAMove

MOVSX_rr_32_8 [BPFHasMovsx]

dst = (s8)src
Diagram
Note

Properties: isAsCheapAsAMove

MOVSX_rr_8 [BPFHasMovsx]

dst = (s8)src
Diagram
Note

Properties: isAsCheapAsAMove

STB_imm [BPFHasStoreImm]

*(u8 *)(addr) = imm
Diagram

STD_imm [BPFHasStoreImm]

*(u64 *)(addr) = imm
Diagram

STH_imm [BPFHasStoreImm]

*(u16 *)(addr) = imm
Diagram

STW_imm [BPFHasStoreImm]

*(u32 *)(addr) = imm
Diagram

BE16 [BPFIsLittleEndian]

dst = be16 src
Diagram
Note

Constraints: dst = src

BE32 [BPFIsLittleEndian]

dst = be32 src
Diagram
Note

Constraints: dst = src

BE64 [BPFIsLittleEndian]

dst = be64 src
Diagram
Note

Constraints: dst = src

BSWAP16 [BPFHasBswap]

dst = bswap16 src
Diagram
Note

Constraints: dst = src

BSWAP32 [BPFHasBswap]

dst = bswap32 src
Diagram
Note

Constraints: dst = src

BSWAP64 [BPFHasBswap]

dst = bswap64 src
Diagram
Note

Constraints: dst = src

LDBSX [BPFHasLdsx]

dst = *(s8 *)(addr)
Diagram

LDHSX [BPFHasLdsx]

dst = *(s16 *)(addr)
Diagram

LDWSX [BPFHasLdsx]

dst = *(s32 *)(addr)
Diagram

LE16 [BPFIsBigEndian]

dst = le16 src
Diagram
Note

Constraints: dst = src

LE32 [BPFIsBigEndian]

dst = le32 src
Diagram
Note

Constraints: dst = src

LE64 [BPFIsBigEndian]

dst = le64 src
Diagram
Note

Constraints: dst = src