rv_jit_context
static inline void emit_add(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_addi(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_li(u8 rd, s32 imm, struct rv_jit_context *ctx)
static inline void emit_lui(u8 rd, s32 imm, struct rv_jit_context *ctx)
static inline void emit_slli(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_andi(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_srli(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_srai(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_sub(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit(const u32 insn, struct rv_jit_context *ctx)
static inline void emit_or(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_and(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_xor(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_lw(u8 rd, s32 off, u8 rs1, struct rv_jit_context *ctx)
static inline void emit_sw(u8 rs1, s32 off, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_sh2add(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_sh3add(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_addiw(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
static inline void emit_ld(u8 rd, s32 off, u8 rs1, struct rv_jit_context *ctx)
static inline void emit_sd(u8 rs1, s32 off, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_subw(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
static inline void emit_sextb(u8 rd, u8 rs, struct rv_jit_context *ctx)
static inline void emitc(const u16 insn, struct rv_jit_context *ctx)
static inline void emit_sexth(u8 rd, u8 rs, struct rv_jit_context *ctx)
static inline void emit_sextw(u8 rd, u8 rs, struct rv_jit_context *ctx)
static inline void emit_zexth(u8 rd, u8 rs, struct rv_jit_context *ctx)
static inline void emit_zextw(u8 rd, u8 rs, struct rv_jit_context *ctx)
static inline void emit_bswap(u8 rd, s32 imm, struct rv_jit_context *ctx)
static inline int epilogue_offset(struct rv_jit_context *ctx)
static inline void emit_cmpxchg(u8 rd, u8 rs, u8 r0, bool is64, struct rv_jit_context *ctx)
void bpf_jit_build_prologue(struct rv_jit_context *ctx, bool is_subprog);
void bpf_jit_build_epilogue(struct rv_jit_context *ctx);
int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
static inline int rv_offset(int insn, int off, struct rv_jit_context *ctx)
static inline void emit_fence_r_rw(struct rv_jit_context *ctx)
static inline void emit_fence_rw_w(struct rv_jit_context *ctx)
static inline void emit_fence_rw_rw(struct rv_jit_context *ctx)
static inline void emit_jalr(u8 rd, u8 rs, s32 imm, struct rv_jit_context *ctx)
struct rv_jit_context ctx;
static inline void emit_mv(u8 rd, u8 rs, struct rv_jit_context *ctx)
static void emit_imm(const s8 rd, s32 imm, struct rv_jit_context *ctx)
static void emit_imm32(const s8 *rd, s32 imm, struct rv_jit_context *ctx)
void bpf_jit_build_prologue(struct rv_jit_context *ctx, bool is_subprog)
void bpf_jit_build_epilogue(struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static void __build_epilogue(bool is_tail_call, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx, const u8 op)
struct rv_jit_context *ctx, const u8 op)
struct rv_jit_context *ctx, const u8 op)
struct rv_jit_context *ctx, const u8 op)
struct rv_jit_context *ctx, const u8 op)
static int emit_bcc(u8 op, u8 rd, u8 rs, int rvoff, struct rv_jit_context *ctx)
struct rv_jit_context *ctx, const u8 op)
static void emit_call(bool fixed, u64 addr, struct rv_jit_context *ctx)
static int emit_bpf_tail_call(int insn, struct rv_jit_context *ctx)
struct rv_jit_context *ctx, const u8 size)
struct rv_jit_context *ctx, const u8 size,
static void emit_rev16(const s8 rd, struct rv_jit_context *ctx)
static void emit_rev32(const s8 rd, struct rv_jit_context *ctx)
static void emit_zext64(const s8 *dst, struct rv_jit_context *ctx)
int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
int cookie_off, struct rv_jit_context *ctx)
static void mark_fp(struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static void mark_call(struct rv_jit_context *ctx)
static bool seen_call(struct rv_jit_context *ctx)
static void mark_tail_call(struct rv_jit_context *ctx)
static bool seen_tail_call(struct rv_jit_context *ctx)
static u8 rv_tail_call_reg(struct rv_jit_context *ctx)
struct rv_jit_context ctx;
struct rv_jit_context ctx;
int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
static void emit_sextw_alt(u8 *rd, u8 ra, struct rv_jit_context *ctx)
static void emit_zextw_alt(u8 *rd, u8 ra, struct rv_jit_context *ctx)
static int emit_addr(u8 rd, u64 addr, bool extra_pass, struct rv_jit_context *ctx)
static void emit_imm(u8 rd, s64 val, struct rv_jit_context *ctx)
void bpf_jit_build_prologue(struct rv_jit_context *ctx, bool is_subprog)
void bpf_jit_build_epilogue(struct rv_jit_context *ctx)
static void __build_epilogue(bool is_tail_call, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static int emit_bpf_tail_call(int insn, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static int emit_call(u64 addr, bool fixed_addr, struct rv_jit_context *ctx)
static inline void emit_kcfi(u32 hash, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static void emit_stx_insn(u8 rd, s16 off, u8 rs, u8 size, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static void emit_st(u8 rd, s16 off, s32 imm, u8 size, struct rv_jit_context *ctx)
static void emit_stx(u8 rd, s16 off, u8 rs, u8 size, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
static u8 bpf_to_rv_reg(int bpf_reg, struct rv_jit_context *ctx)
static int sign_extend(u8 rd, u8 rs, u8 sz, bool sign, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context ctx;
static bool seen_reg(int reg, struct rv_jit_context *ctx)
static void store_args(int nr_arg_slots, int args_off, struct rv_jit_context *ctx)
static void restore_args(int nr_reg_args, int args_off, struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
struct rv_jit_context *ctx)
int run_ctx_off, bool save_ret, struct rv_jit_context *ctx)
static int build_body(struct rv_jit_context *ctx, bool extra_pass, int *offset)
struct rv_jit_context *ctx;