Lines Matching defs:rs2

225 static inline u32 rv_r_insn(u8 funct7, u8 rs2, u8 rs1, u8 funct3, u8 rd,
228 return (funct7 << 25) | (rs2 << 20) | (rs1 << 15) | (funct3 << 12) |
238 static inline u32 rv_s_insn(u16 imm11_0, u8 rs2, u8 rs1, u8 funct3, u8 opcode)
242 return (imm11_5 << 25) | (rs2 << 20) | (rs1 << 15) | (funct3 << 12) |
246 static inline u32 rv_b_insn(u16 imm12_1, u8 rs2, u8 rs1, u8 funct3, u8 opcode)
251 return (imm12 << 25) | (rs2 << 20) | (rs1 << 15) | (funct3 << 12) |
270 static inline u32 rv_amo_insn(u8 funct5, u8 aq, u8 rl, u8 rs2, u8 rs1,
275 return rv_r_insn(funct7, rs2, rs1, funct3, rd, opcode);
280 static inline u16 rv_cr_insn(u8 funct4, u8 rd, u8 rs2, u8 op)
282 return (funct4 << 12) | (rd << 7) | (rs2 << 2) | op;
293 static inline u16 rv_css_insn(u8 funct3, u32 uimm, u8 rs2, u8 op)
295 return (funct3 << 13) | (uimm << 7) | (rs2 << 2) | op;
310 static inline u16 rv_cs_insn(u8 funct3, u32 imm_hi, u8 rs1, u32 imm_lo, u8 rs2,
314 (imm_lo << 5) | ((rs2 & 0x7) << 2) | op;
317 static inline u16 rv_ca_insn(u8 funct6, u8 rd, u8 funct2, u8 rs2, u8 op)
320 ((rs2 & 0x7) << 2) | op;
378 static inline u32 rv_add(u8 rd, u8 rs1, u8 rs2)
380 return rv_r_insn(0, rs2, rs1, 0, rd, 0x33);
383 static inline u32 rv_sub(u8 rd, u8 rs1, u8 rs2)
385 return rv_r_insn(0x20, rs2, rs1, 0, rd, 0x33);
388 static inline u32 rv_sltu(u8 rd, u8 rs1, u8 rs2)
390 return rv_r_insn(0, rs2, rs1, 3, rd, 0x33);
393 static inline u32 rv_and(u8 rd, u8 rs1, u8 rs2)
395 return rv_r_insn(0, rs2, rs1, 7, rd, 0x33);
398 static inline u32 rv_or(u8 rd, u8 rs1, u8 rs2)
400 return rv_r_insn(0, rs2, rs1, 6, rd, 0x33);
403 static inline u32 rv_xor(u8 rd, u8 rs1, u8 rs2)
405 return rv_r_insn(0, rs2, rs1, 4, rd, 0x33);
408 static inline u32 rv_sll(u8 rd, u8 rs1, u8 rs2)
410 return rv_r_insn(0, rs2, rs1, 1, rd, 0x33);
413 static inline u32 rv_srl(u8 rd, u8 rs1, u8 rs2)
415 return rv_r_insn(0, rs2, rs1, 5, rd, 0x33);
418 static inline u32 rv_sra(u8 rd, u8 rs1, u8 rs2)
420 return rv_r_insn(0x20, rs2, rs1, 5, rd, 0x33);
423 static inline u32 rv_mul(u8 rd, u8 rs1, u8 rs2)
425 return rv_r_insn(1, rs2, rs1, 0, rd, 0x33);
428 static inline u32 rv_mulhu(u8 rd, u8 rs1, u8 rs2)
430 return rv_r_insn(1, rs2, rs1, 3, rd, 0x33);
433 static inline u32 rv_divu(u8 rd, u8 rs1, u8 rs2)
435 return rv_r_insn(1, rs2, rs1, 5, rd, 0x33);
438 static inline u32 rv_remu(u8 rd, u8 rs1, u8 rs2)
440 return rv_r_insn(1, rs2, rs1, 7, rd, 0x33);
453 static inline u32 rv_beq(u8 rs1, u8 rs2, u16 imm12_1)
455 return rv_b_insn(imm12_1, rs2, rs1, 0, 0x63);
458 static inline u32 rv_bne(u8 rs1, u8 rs2, u16 imm12_1)
460 return rv_b_insn(imm12_1, rs2, rs1, 1, 0x63);
463 static inline u32 rv_bltu(u8 rs1, u8 rs2, u16 imm12_1)
465 return rv_b_insn(imm12_1, rs2, rs1, 6, 0x63);
468 static inline u32 rv_bgtu(u8 rs1, u8 rs2, u16 imm12_1)
470 return rv_bltu(rs2, rs1, imm12_1);
473 static inline u32 rv_bgeu(u8 rs1, u8 rs2, u16 imm12_1)
475 return rv_b_insn(imm12_1, rs2, rs1, 7, 0x63);
478 static inline u32 rv_bleu(u8 rs1, u8 rs2, u16 imm12_1)
480 return rv_bgeu(rs2, rs1, imm12_1);
483 static inline u32 rv_blt(u8 rs1, u8 rs2, u16 imm12_1)
485 return rv_b_insn(imm12_1, rs2, rs1, 4, 0x63);
488 static inline u32 rv_bgt(u8 rs1, u8 rs2, u16 imm12_1)
490 return rv_blt(rs2, rs1, imm12_1);
493 static inline u32 rv_bge(u8 rs1, u8 rs2, u16 imm12_1)
495 return rv_b_insn(imm12_1, rs2, rs1, 5, 0x63);
498 static inline u32 rv_ble(u8 rs1, u8 rs2, u16 imm12_1)
500 return rv_bge(rs2, rs1, imm12_1);
518 static inline u32 rv_sb(u8 rs1, u16 imm11_0, u8 rs2)
520 return rv_s_insn(imm11_0, rs2, rs1, 0, 0x23);
523 static inline u32 rv_sh(u8 rs1, u16 imm11_0, u8 rs2)
525 return rv_s_insn(imm11_0, rs2, rs1, 1, 0x23);
528 static inline u32 rv_sw(u8 rs1, u16 imm11_0, u8 rs2)
530 return rv_s_insn(imm11_0, rs2, rs1, 2, 0x23);
533 static inline u32 rv_amoadd_w(u8 rd, u8 rs2, u8 rs1, u8 aq, u8 rl)
535 return rv_amo_insn(0, aq, rl, rs2, rs1, 2, rd, 0x2f);
558 static inline u16 rvc_sw(u8 rs1, u32 imm7, u8 rs2)
564 return rv_cs_insn(0x6, imm_hi, rs1, imm_lo, rs2, 0x0);
659 static inline u16 rvc_swsp(u32 imm8, u8 rs2)
664 return rv_css_insn(0x6, imm, rs2, 0x2);
696 static inline u32 rv_addw(u8 rd, u8 rs1, u8 rs2)
698 return rv_r_insn(0, rs2, rs1, 0, rd, 0x3b);
701 static inline u32 rv_subw(u8 rd, u8 rs1, u8 rs2)
703 return rv_r_insn(0x20, rs2, rs1, 0, rd, 0x3b);
706 static inline u32 rv_sllw(u8 rd, u8 rs1, u8 rs2)
708 return rv_r_insn(0, rs2, rs1, 1, rd, 0x3b);
711 static inline u32 rv_srlw(u8 rd, u8 rs1, u8 rs2)
713 return rv_r_insn(0, rs2, rs1, 5, rd, 0x3b);
716 static inline u32 rv_sraw(u8 rd, u8 rs1, u8 rs2)
718 return rv_r_insn(0x20, rs2, rs1, 5, rd, 0x3b);
721 static inline u32 rv_mulw(u8 rd, u8 rs1, u8 rs2)
723 return rv_r_insn(1, rs2, rs1, 0, rd, 0x3b);
726 static inline u32 rv_divuw(u8 rd, u8 rs1, u8 rs2)
728 return rv_r_insn(1, rs2, rs1, 5, rd, 0x3b);
731 static inline u32 rv_remuw(u8 rd, u8 rs1, u8 rs2)
733 return rv_r_insn(1, rs2, rs1, 7, rd, 0x3b);
746 static inline u32 rv_sd(u8 rs1, u16 imm11_0, u8 rs2)
748 return rv_s_insn(imm11_0, rs2, rs1, 3, 0x23);
751 static inline u32 rv_amoadd_d(u8 rd, u8 rs2, u8 rs1, u8 aq, u8 rl)
753 return rv_amo_insn(0, aq, rl, rs2, rs1, 3, rd, 0x2f);
767 static inline u16 rvc_sd(u8 rs1, u32 imm8, u8 rs2)
773 return rv_cs_insn(0x7, imm_hi, rs1, imm_lo, rs2, 0x0);
794 static inline u16 rvc_sdsp(u32 imm9, u8 rs2)
799 return rv_css_insn(0x7, imm, rs2, 0x2);
824 static inline void emit_add(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
826 if (rvc_enabled() && rd && rd == rs1 && rs2)
827 emitc(rvc_add(rd, rs2), ctx);
829 emit(rv_add(rd, rs1, rs2), ctx);
893 static inline void emit_sub(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
895 if (rvc_enabled() && is_creg(rd) && rd == rs1 && is_creg(rs2))
896 emitc(rvc_sub(rd, rs2), ctx);
898 emit(rv_sub(rd, rs1, rs2), ctx);
901 static inline void emit_or(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
903 if (rvc_enabled() && is_creg(rd) && rd == rs1 && is_creg(rs2))
904 emitc(rvc_or(rd, rs2), ctx);
906 emit(rv_or(rd, rs1, rs2), ctx);
909 static inline void emit_and(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
911 if (rvc_enabled() && is_creg(rd) && rd == rs1 && is_creg(rs2))
912 emitc(rvc_and(rd, rs2), ctx);
914 emit(rv_and(rd, rs1, rs2), ctx);
917 static inline void emit_xor(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
919 if (rvc_enabled() && is_creg(rd) && rd == rs1 && is_creg(rs2))
920 emitc(rvc_xor(rd, rs2), ctx);
922 emit(rv_xor(rd, rs1, rs2), ctx);
935 static inline void emit_sw(u8 rs1, s32 off, u8 rs2, struct rv_jit_context *ctx)
938 emitc(rvc_swsp(off, rs2), ctx);
939 else if (rvc_enabled() && is_creg(rs1) && is_creg(rs2) && is_7b_uint(off) && !(off & 0x3))
940 emitc(rvc_sw(rs1, off, rs2), ctx);
942 emit(rv_sw(rs1, off, rs2), ctx);
966 static inline void emit_sd(u8 rs1, s32 off, u8 rs2, struct rv_jit_context *ctx)
969 emitc(rvc_sdsp(off, rs2), ctx);
970 else if (rvc_enabled() && is_creg(rs1) && is_creg(rs2) && is_8b_uint(off) && !(off & 0x7))
971 emitc(rvc_sd(rs1, off, rs2), ctx);
973 emit(rv_sd(rs1, off, rs2), ctx);
976 static inline void emit_subw(u8 rd, u8 rs1, u8 rs2, struct rv_jit_context *ctx)
978 if (rvc_enabled() && is_creg(rd) && rd == rs1 && is_creg(rs2))
979 emitc(rvc_subw(rd, rs2), ctx);
981 emit(rv_subw(rd, rs1, rs2), ctx);