Lines Matching refs:rd
145 static int emit_addr(u8 rd, u64 addr, bool extra_pass, struct rv_jit_context *ctx) in emit_addr() argument
161 emit(rv_auipc(rd, upper), ctx); in emit_addr()
162 emit(rv_addi(rd, rd, lower), ctx); in emit_addr()
167 static void emit_imm(u8 rd, s64 val, struct rv_jit_context *ctx) in emit_imm() argument
188 emit_lui(rd, upper, ctx); in emit_imm()
191 emit_li(rd, lower, ctx); in emit_imm()
195 emit_addiw(rd, rd, lower, ctx); in emit_imm()
203 emit_imm(rd, upper, ctx); in emit_imm()
205 emit_slli(rd, rd, shift, ctx); in emit_imm()
207 emit_addi(rd, rd, lower, ctx); in emit_imm()
254 static void emit_bcc(u8 cond, u8 rd, u8 rs, int rvoff, in emit_bcc() argument
259 emit(rv_beq(rd, rs, rvoff >> 1), ctx); in emit_bcc()
262 emit(rv_bltu(rs, rd, rvoff >> 1), ctx); in emit_bcc()
265 emit(rv_bltu(rd, rs, rvoff >> 1), ctx); in emit_bcc()
268 emit(rv_bgeu(rd, rs, rvoff >> 1), ctx); in emit_bcc()
271 emit(rv_bgeu(rs, rd, rvoff >> 1), ctx); in emit_bcc()
274 emit(rv_bne(rd, rs, rvoff >> 1), ctx); in emit_bcc()
277 emit(rv_blt(rs, rd, rvoff >> 1), ctx); in emit_bcc()
280 emit(rv_blt(rd, rs, rvoff >> 1), ctx); in emit_bcc()
283 emit(rv_bge(rd, rs, rvoff >> 1), ctx); in emit_bcc()
286 emit(rv_bge(rs, rd, rvoff >> 1), ctx); in emit_bcc()
290 static void emit_branch(u8 cond, u8 rd, u8 rs, int rvoff, in emit_branch() argument
296 emit_bcc(cond, rd, rs, rvoff, ctx); in emit_branch()
313 emit_bcc(cond, rd, rs, 8, ctx); in emit_branch()
324 emit_bcc(cond, rd, rs, 12, ctx); in emit_branch()
387 static void init_regs(u8 *rd, u8 *rs, const struct bpf_insn *insn, in init_regs() argument
399 *rd = bpf_to_rv_reg(insn->dst_reg, ctx); in init_regs()
408 static void emit_zext_32_rd_rs(u8 *rd, u8 *rs, struct rv_jit_context *ctx) in emit_zext_32_rd_rs() argument
410 emit_mv(RV_REG_T2, *rd, ctx); in emit_zext_32_rd_rs()
414 *rd = RV_REG_T2; in emit_zext_32_rd_rs()
418 static void emit_sext_32_rd_rs(u8 *rd, u8 *rs, struct rv_jit_context *ctx) in emit_sext_32_rd_rs() argument
420 emit_addiw(RV_REG_T2, *rd, 0, ctx); in emit_sext_32_rd_rs()
422 *rd = RV_REG_T2; in emit_sext_32_rd_rs()
426 static void emit_zext_32_rd_t1(u8 *rd, struct rv_jit_context *ctx) in emit_zext_32_rd_t1() argument
428 emit_mv(RV_REG_T2, *rd, ctx); in emit_zext_32_rd_t1()
431 *rd = RV_REG_T2; in emit_zext_32_rd_t1()
434 static void emit_sext_32_rd(u8 *rd, struct rv_jit_context *ctx) in emit_sext_32_rd() argument
436 emit_addiw(RV_REG_T2, *rd, 0, ctx); in emit_sext_32_rd()
437 *rd = RV_REG_T2; in emit_sext_32_rd()
440 static int emit_jump_and_link(u8 rd, s64 rvoff, bool fixed_addr, in emit_jump_and_link() argument
446 emit(rv_jal(rd, rvoff >> 1), ctx); in emit_jump_and_link()
452 emit(rv_jalr(rd, RV_REG_T1, lower), ctx); in emit_jump_and_link()
483 static void emit_atomic(u8 rd, u8 rs, s16 off, s32 imm, bool is64, in emit_atomic() argument
491 emit_addi(RV_REG_T1, rd, off, ctx); in emit_atomic()
494 emit_add(RV_REG_T1, RV_REG_T1, rd, ctx); in emit_atomic()
496 rd = RV_REG_T1; in emit_atomic()
502 emit(is64 ? rv_amoadd_d(RV_REG_ZERO, rs, rd, 0, 0) : in emit_atomic()
503 rv_amoadd_w(RV_REG_ZERO, rs, rd, 0, 0), ctx); in emit_atomic()
506 emit(is64 ? rv_amoand_d(RV_REG_ZERO, rs, rd, 0, 0) : in emit_atomic()
507 rv_amoand_w(RV_REG_ZERO, rs, rd, 0, 0), ctx); in emit_atomic()
510 emit(is64 ? rv_amoor_d(RV_REG_ZERO, rs, rd, 0, 0) : in emit_atomic()
511 rv_amoor_w(RV_REG_ZERO, rs, rd, 0, 0), ctx); in emit_atomic()
514 emit(is64 ? rv_amoxor_d(RV_REG_ZERO, rs, rd, 0, 0) : in emit_atomic()
515 rv_amoxor_w(RV_REG_ZERO, rs, rd, 0, 0), ctx); in emit_atomic()
519 emit(is64 ? rv_amoadd_d(rs, rs, rd, 1, 1) : in emit_atomic()
520 rv_amoadd_w(rs, rs, rd, 1, 1), ctx); in emit_atomic()
525 emit(is64 ? rv_amoand_d(rs, rs, rd, 1, 1) : in emit_atomic()
526 rv_amoand_w(rs, rs, rd, 1, 1), ctx); in emit_atomic()
531 emit(is64 ? rv_amoor_d(rs, rs, rd, 1, 1) : in emit_atomic()
532 rv_amoor_w(rs, rs, rd, 1, 1), ctx); in emit_atomic()
537 emit(is64 ? rv_amoxor_d(rs, rs, rd, 1, 1) : in emit_atomic()
538 rv_amoxor_w(rs, rs, rd, 1, 1), ctx); in emit_atomic()
544 emit(is64 ? rv_amoswap_d(rs, rs, rd, 1, 1) : in emit_atomic()
545 rv_amoswap_w(rs, rs, rd, 1, 1), ctx); in emit_atomic()
554 emit(is64 ? rv_lr_d(r0, 0, rd, 0, 0) : in emit_atomic()
555 rv_lr_w(r0, 0, rd, 0, 0), ctx); in emit_atomic()
558 emit(is64 ? rv_sc_d(RV_REG_T3, rs, rd, 0, 1) : in emit_atomic()
559 rv_sc_w(RV_REG_T3, rs, rd, 0, 1), ctx); in emit_atomic()
1076 u8 rd = -1, rs = -1, code = insn->code; in bpf_jit_emit_insn() local
1080 init_regs(&rd, &rs, insn, ctx); in bpf_jit_emit_insn()
1088 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1093 emit_mv(rd, rs, ctx); in bpf_jit_emit_insn()
1098 emit_srai(rd, RV_REG_T1, 64 - insn->off, ctx); in bpf_jit_emit_insn()
1101 emit_addiw(rd, rs, 0, ctx); in bpf_jit_emit_insn()
1105 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1111 emit_add(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1113 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1118 emit_sub(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1120 emit_subw(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1123 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1127 emit_and(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1129 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1133 emit_or(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1135 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1139 emit_xor(rd, rd, rs, ctx); in bpf_jit_emit_insn()
1141 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1145 emit(is64 ? rv_mul(rd, rd, rs) : rv_mulw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1147 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1152 emit(is64 ? rv_div(rd, rd, rs) : rv_divw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1154 emit(is64 ? rv_divu(rd, rd, rs) : rv_divuw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1156 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1161 emit(is64 ? rv_rem(rd, rd, rs) : rv_remw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1163 emit(is64 ? rv_remu(rd, rd, rs) : rv_remuw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1165 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1169 emit(is64 ? rv_sll(rd, rd, rs) : rv_sllw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1171 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1175 emit(is64 ? rv_srl(rd, rd, rs) : rv_srlw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1177 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1181 emit(is64 ? rv_sra(rd, rd, rs) : rv_sraw(rd, rd, rs), ctx); in bpf_jit_emit_insn()
1183 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1189 emit_sub(rd, RV_REG_ZERO, rd, ctx); in bpf_jit_emit_insn()
1191 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1198 emit_slli(rd, rd, 48, ctx); in bpf_jit_emit_insn()
1199 emit_srli(rd, rd, 48, ctx); in bpf_jit_emit_insn()
1203 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1215 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1218 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1222 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1225 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1227 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1230 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1234 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1237 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1239 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1242 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1244 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1247 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1249 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1252 emit_srli(rd, rd, 8, ctx); in bpf_jit_emit_insn()
1254 emit_andi(RV_REG_T1, rd, 0xff, ctx); in bpf_jit_emit_insn()
1257 emit_mv(rd, RV_REG_T2, ctx); in bpf_jit_emit_insn()
1263 emit_imm(rd, imm, ctx); in bpf_jit_emit_insn()
1265 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1272 emit_addi(rd, rd, imm, ctx); in bpf_jit_emit_insn()
1275 emit_add(rd, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1278 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1283 emit_addi(rd, rd, -imm, ctx); in bpf_jit_emit_insn()
1286 emit_sub(rd, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1289 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1294 emit_andi(rd, rd, imm, ctx); in bpf_jit_emit_insn()
1297 emit_and(rd, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1300 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1305 emit(rv_ori(rd, rd, imm), ctx); in bpf_jit_emit_insn()
1308 emit_or(rd, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1311 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1316 emit(rv_xori(rd, rd, imm), ctx); in bpf_jit_emit_insn()
1319 emit_xor(rd, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1322 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1327 emit(is64 ? rv_mul(rd, rd, RV_REG_T1) : in bpf_jit_emit_insn()
1328 rv_mulw(rd, rd, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1330 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1336 emit(is64 ? rv_div(rd, rd, RV_REG_T1) : in bpf_jit_emit_insn()
1337 rv_divw(rd, rd, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1339 emit(is64 ? rv_divu(rd, rd, RV_REG_T1) : in bpf_jit_emit_insn()
1340 rv_divuw(rd, rd, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1342 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1348 emit(is64 ? rv_rem(rd, rd, RV_REG_T1) : in bpf_jit_emit_insn()
1349 rv_remw(rd, rd, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1351 emit(is64 ? rv_remu(rd, rd, RV_REG_T1) : in bpf_jit_emit_insn()
1352 rv_remuw(rd, rd, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1354 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1358 emit_slli(rd, rd, imm, ctx); in bpf_jit_emit_insn()
1361 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1366 emit_srli(rd, rd, imm, ctx); in bpf_jit_emit_insn()
1368 emit(rv_srliw(rd, rd, imm), ctx); in bpf_jit_emit_insn()
1371 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1376 emit_srai(rd, rd, imm, ctx); in bpf_jit_emit_insn()
1378 emit(rv_sraiw(rd, rd, imm), ctx); in bpf_jit_emit_insn()
1381 emit_zext_32(rd, ctx); in bpf_jit_emit_insn()
1423 emit_sext_32_rd_rs(&rd, &rs, ctx); in bpf_jit_emit_insn()
1425 emit_zext_32_rd_rs(&rd, &rs, ctx); in bpf_jit_emit_insn()
1435 emit_and(RV_REG_T1, rd, rs, ctx); in bpf_jit_emit_insn()
1439 emit_branch(BPF_OP(code), rd, rs, rvoff, ctx); in bpf_jit_emit_insn()
1475 emit_sext_32_rd(&rd, ctx); in bpf_jit_emit_insn()
1477 emit_zext_32_rd_t1(&rd, ctx); in bpf_jit_emit_insn()
1483 emit_branch(BPF_OP(code), rd, rs, rvoff, ctx); in bpf_jit_emit_insn()
1491 emit_andi(RV_REG_T1, rd, imm, ctx); in bpf_jit_emit_insn()
1494 emit_and(RV_REG_T1, rd, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1553 ret = emit_addr(rd, imm64, extra_pass, ctx); in bpf_jit_emit_insn()
1557 emit_imm(rd, imm64, ctx); in bpf_jit_emit_insn()
1591 emit(rv_lb(rd, off, rs), ctx); in bpf_jit_emit_insn()
1593 emit(rv_lbu(rd, off, rs), ctx); in bpf_jit_emit_insn()
1602 emit(rv_lb(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1604 emit(rv_lbu(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1611 emit(rv_lh(rd, off, rs), ctx); in bpf_jit_emit_insn()
1613 emit(rv_lhu(rd, off, rs), ctx); in bpf_jit_emit_insn()
1622 emit(rv_lh(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1624 emit(rv_lhu(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1631 emit(rv_lw(rd, off, rs), ctx); in bpf_jit_emit_insn()
1633 emit(rv_lwu(rd, off, rs), ctx); in bpf_jit_emit_insn()
1642 emit(rv_lw(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1644 emit(rv_lwu(rd, 0, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1650 emit_ld(rd, off, rs, ctx); in bpf_jit_emit_insn()
1658 emit_ld(rd, 0, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1663 ret = add_exception_handler(insn, ctx, rd, insn_len); in bpf_jit_emit_insn()
1679 emit(rv_sb(rd, off, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1684 emit_add(RV_REG_T2, RV_REG_T2, rd, ctx); in bpf_jit_emit_insn()
1691 emit(rv_sh(rd, off, RV_REG_T1), ctx); in bpf_jit_emit_insn()
1696 emit_add(RV_REG_T2, RV_REG_T2, rd, ctx); in bpf_jit_emit_insn()
1702 emit_sw(rd, off, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1707 emit_add(RV_REG_T2, RV_REG_T2, rd, ctx); in bpf_jit_emit_insn()
1713 emit_sd(rd, off, RV_REG_T1, ctx); in bpf_jit_emit_insn()
1718 emit_add(RV_REG_T2, RV_REG_T2, rd, ctx); in bpf_jit_emit_insn()
1725 emit(rv_sb(rd, off, rs), ctx); in bpf_jit_emit_insn()
1730 emit_add(RV_REG_T1, RV_REG_T1, rd, ctx); in bpf_jit_emit_insn()
1735 emit(rv_sh(rd, off, rs), ctx); in bpf_jit_emit_insn()
1740 emit_add(RV_REG_T1, RV_REG_T1, rd, ctx); in bpf_jit_emit_insn()
1745 emit_sw(rd, off, rs, ctx); in bpf_jit_emit_insn()
1750 emit_add(RV_REG_T1, RV_REG_T1, rd, ctx); in bpf_jit_emit_insn()
1755 emit_sd(rd, off, rs, ctx); in bpf_jit_emit_insn()
1760 emit_add(RV_REG_T1, RV_REG_T1, rd, ctx); in bpf_jit_emit_insn()
1765 emit_atomic(rd, rs, off, imm, in bpf_jit_emit_insn()