Lines Matching refs:rvoff

210 static void emit_bcc(u8 cond, u8 rd, u8 rs, int rvoff,  in emit_bcc()  argument
215 emit(rv_beq(rd, rs, rvoff >> 1), ctx); in emit_bcc()
218 emit(rv_bltu(rs, rd, rvoff >> 1), ctx); in emit_bcc()
221 emit(rv_bltu(rd, rs, rvoff >> 1), ctx); in emit_bcc()
224 emit(rv_bgeu(rd, rs, rvoff >> 1), ctx); in emit_bcc()
227 emit(rv_bgeu(rs, rd, rvoff >> 1), ctx); in emit_bcc()
230 emit(rv_bne(rd, rs, rvoff >> 1), ctx); in emit_bcc()
233 emit(rv_blt(rs, rd, rvoff >> 1), ctx); in emit_bcc()
236 emit(rv_blt(rd, rs, rvoff >> 1), ctx); in emit_bcc()
239 emit(rv_bge(rd, rs, rvoff >> 1), ctx); in emit_bcc()
242 emit(rv_bge(rs, rd, rvoff >> 1), ctx); in emit_bcc()
246 static void emit_branch(u8 cond, u8 rd, u8 rs, int rvoff, in emit_branch() argument
251 if (is_13b_int(rvoff)) { in emit_branch()
252 emit_bcc(cond, rd, rs, rvoff, ctx); in emit_branch()
257 rvoff -= 4; in emit_branch()
268 if (is_21b_int(rvoff)) { in emit_branch()
270 emit(rv_jal(RV_REG_ZERO, rvoff >> 1), ctx); in emit_branch()
277 upper = (rvoff + (1 << 11)) >> 12; in emit_branch()
278 lower = rvoff & 0xfff; in emit_branch()
397 static int emit_jump_and_link(u8 rd, s64 rvoff, bool force_jalr, in emit_jump_and_link() argument
402 if (rvoff && is_21b_int(rvoff) && !force_jalr) { in emit_jump_and_link()
403 emit(rv_jal(rd, rvoff >> 1), ctx); in emit_jump_and_link()
405 } else if (in_auipc_jalr_range(rvoff)) { in emit_jump_and_link()
406 upper = (rvoff + (1 << 11)) >> 12; in emit_jump_and_link()
407 lower = rvoff & 0xfff; in emit_jump_and_link()
413 pr_err("bpf-jit: target offset 0x%llx is out of range\n", rvoff); in emit_jump_and_link()
448 int s, e, rvoff, ret, i = insn - ctx->prog->insnsi; in bpf_jit_emit_insn() local
733 rvoff = rv_offset(i, off, ctx); in bpf_jit_emit_insn()
734 ret = emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx); in bpf_jit_emit_insn()
762 rvoff = rv_offset(i, off, ctx); in bpf_jit_emit_insn()
772 rvoff -= ninsns_rvoff(e - s); in bpf_jit_emit_insn()
777 rvoff -= 4; in bpf_jit_emit_insn()
779 emit_branch(BPF_JNE, RV_REG_T1, RV_REG_ZERO, rvoff, in bpf_jit_emit_insn()
782 emit_branch(BPF_OP(code), rd, rs, rvoff, ctx); in bpf_jit_emit_insn()
807 rvoff = rv_offset(i, off, ctx); in bpf_jit_emit_insn()
825 rvoff -= ninsns_rvoff(e - s); in bpf_jit_emit_insn()
826 emit_branch(BPF_OP(code), rd, rs, rvoff, ctx); in bpf_jit_emit_insn()
831 rvoff = rv_offset(i, off, ctx); in bpf_jit_emit_insn()
846 rvoff -= ninsns_rvoff(e - s); in bpf_jit_emit_insn()
847 emit_branch(BPF_JNE, RV_REG_T1, RV_REG_ZERO, rvoff, ctx); in bpf_jit_emit_insn()
877 rvoff = epilogue_offset(ctx); in bpf_jit_emit_insn()
878 ret = emit_jump_and_link(RV_REG_ZERO, rvoff, false, ctx); in bpf_jit_emit_insn()