5#ifndef V8_CODEGEN_RISCV_EXTENSION_RISCV_V_H_
6#define V8_CODEGEN_RISCV_EXTENSION_RISCV_V_H_
22 return (
mask << 7) | (tail << 6) | ((vsew & 0x7) << 3) | (vlmul & 0x7);
52 VRegister vd, Register rs1, uint8_t lumop, VSew vsew, MaskType mask = NoMask
58 VRegister vd, Register rs1, Register rs2, VSew vsew, MaskType mask = NoMask
64 VRegister vd, Register rs1, VRegister rs2, VSew vsew, MaskType mask = NoMask
106#define DEFINE_OPIVV(name, funct6) \
107 void name##_vv(VRegister vd, VRegister vs2, VRegister vs1, \
108 MaskType mask = NoMask);
110#define DEFINE_OPIVX(name, funct6) \
111 void name##_vx(VRegister vd, VRegister vs2, Register rs1, \
112 MaskType mask = NoMask);
114#define DEFINE_OPIVI(name, funct6) \
115 void name##_vi(VRegister vd, VRegister vs2, int8_t imm5, \
116 MaskType mask = NoMask);
118#define DEFINE_OPMVV(name, funct6) \
119 void name##_vv(VRegister vd, VRegister vs2, VRegister vs1, \
120 MaskType mask = NoMask);
122#define DEFINE_OPMVX(name, funct6) \
123 void name##_vx(VRegister vd, VRegister vs2, Register rs1, \
124 MaskType mask = NoMask);
126#define DEFINE_OPFVV(name, funct6) \
127 void name##_vv(VRegister vd, VRegister vs2, VRegister vs1, \
128 MaskType mask = NoMask);
130#define DEFINE_OPFWV(name, funct6) \
131 void name##_wv(VRegister vd, VRegister vs2, VRegister vs1, \
132 MaskType mask = NoMask);
134#define DEFINE_OPFRED(name, funct6) \
135 void name##_vs(VRegister vd, VRegister vs2, VRegister vs1, \
136 MaskType mask = NoMask);
138#define DEFINE_OPFVF(name, funct6) \
139 void name##_vf(VRegister vd, VRegister vs2, FPURegister fs1, \
140 MaskType mask = NoMask);
142#define DEFINE_OPFWF(name, funct6) \
143 void name##_wf(VRegister vd, VRegister vs2, FPURegister fs1, \
144 MaskType mask = NoMask);
146#define DEFINE_OPFVV_FMA(name, funct6) \
147 void name##_vv(VRegister vd, VRegister vs1, VRegister vs2, \
148 MaskType mask = NoMask);
150#define DEFINE_OPFVF_FMA(name, funct6) \
151 void name##_vf(VRegister vd, FPURegister fs1, VRegister vs2, \
152 MaskType mask = NoMask);
154#define DEFINE_OPMVV_VIE(name) \
155 void name(VRegister vd, VRegister vs2, MaskType mask = NoMask);
359#undef DEFINE_OPFVV_FMA
360#undef DEFINE_OPFVF_FMA
361#undef DEFINE_OPMVV_VIE
364#define DEFINE_VFUNARY(name, funct6, vs1) \
365 void name(VRegister vd, VRegister vs2, MaskType mask = NoMask) { \
366 GenInstrV(funct6, OP_FVV, vd, vs1, vs2, mask); \
390 vxor_vi(dst, src, -1,
mask);
394 vrsub_vx(dst, src, zero_reg,
mask);
398 vfsngjn_vv(dst, src, src,
mask);
401 vfsngjx_vv(dst, src, src,
mask);
409 DCHECK(imm5 >= -15 && imm5 <= 16);
410 vmsle_vi(vd,
vs1, imm5 - 1,
mask);
415 DCHECK(imm5 >= 1 && imm5 <= 16);
416 vmsleu_vi(vd,
vs1, imm5 - 1,
mask);
void vsetvlmax(Register rd, VSew vsew, Vlmul vlmul, TailAgnosticType tail=tu, MaskAgnosticType mask=mu)
void vsu(VRegister vd, Register rs1, VRegister vs3, VSew vsew, MaskType mask=NoMask)
void vmadc_vv(VRegister vd, VRegister vs1, VRegister vs2)
void vmerge_vx(VRegister vd, Register rs1, VRegister vs2)
void vls(VRegister vd, Register rs1, Register rs2, VSew vsew, MaskType mask=NoMask)
void vredmin_vs(VRegister vd, VRegister vs2, VRegister vs1, MaskType mask=NoMask)
void vmerge_vv(VRegister vd, VRegister vs1, VRegister vs2)
void GenInstrV(Register rd, Register rs1, uint32_t zimm)
void vmv_vi(VRegister vd, uint8_t simm5)
SegInstr(vl) SegInstr(vs) SegInstr(vls) SegInstr(vss) SegInstr(vsx) SegInstr(vlx) void vmv_vv(VRegister vd
static int32_t GenZimm(VSew vsew, Vlmul vlmul, TailAgnosticType tail=tu, MaskAgnosticType mask=mu)
void vadc_vv(VRegister vd, VRegister vs1, VRegister vs2)
void vredmax_vs(VRegister vd, VRegister vs2, VRegister vs1, MaskType mask=NoMask)
void vmv_xs(Register rd, VRegister vs2)
void vfmerge_vf(VRegister vd, FPURegister fs1, VRegister vs2)
void vredminu_vs(VRegister vd, VRegister vs2, VRegister vs1, MaskType mask=NoMask)
void vmadc_vx(VRegister vd, Register rs1, VRegister vs2)
void vfabs_vv(VRegister dst, VRegister src, MaskType mask=NoMask)
void vredmaxu_vs(VRegister vd, VRegister vs2, VRegister vs1, MaskType mask=NoMask)
void vfmv_vf(VRegister vd, FPURegister fs1)
void vlx(VRegister vd, Register rs1, VRegister vs3, VSew vsew, MaskType mask=NoMask)
void vadc_vx(VRegister vd, Register rs1, VRegister vs2)
void vmerge_vi(VRegister vd, uint8_t imm5, VRegister vs2)
void vsetvli(Register rd, Register rs1, VSew vsew, Vlmul vlmul, TailAgnosticType tail=tu, MaskAgnosticType mask=mu)
void vfneg_vv(VRegister dst, VRegister src, MaskType mask=NoMask)
void vsetivli(Register rd, uint8_t uimm, VSew vsew, Vlmul vlmul, TailAgnosticType tail=tu, MaskAgnosticType mask=mu)
void vsx(VRegister vd, Register rs1, VRegister vs3, VSew vsew, MaskType mask=NoMask)
void vfirst_m(Register rd, VRegister vs2, MaskType mask=NoMask)
void vnot_vv(VRegister dst, VRegister src, MaskType mask=NoMask)
void vfmv_fs(FPURegister fd, VRegister vs2)
void vmslt_vi(VRegister vd, VRegister vs1, int8_t imm5, MaskType mask=NoMask)
void vmadc_vi(VRegister vd, uint8_t imm5, VRegister vs2)
void GenInstrV(uint8_t funct6, Opcode opcode, VRegister vd, VRegister vs2, MaskType mask=NoMask)
void vsetvl(VSew vsew, Vlmul vlmul, TailAgnosticType tail=tu, MaskAgnosticType mask=mu)
void GenInstrV(Register rd, Register rs1, Register rs2)
void vwaddu_wx(VRegister vd, VRegister vs2, Register rs1, MaskType mask=NoMask)
void vmsltu_vi(VRegister vd, VRegister vs1, int8_t imm5, MaskType mask=NoMask)
void vl(VRegister vd, Register rs1, uint8_t lumop, VSew vsew, MaskType mask=NoMask)
void vcpop_m(Register rd, VRegister vs2, MaskType mask=NoMask)
void vfmv_sf(VRegister vd, FPURegister fs)
void vmv_sx(VRegister vd, Register rs1)
void vmv_vx(VRegister vd, Register rs1)
void vss(VRegister vd, Register rs1, Register rs2, VSew vsew, MaskType mask=NoMask)
void vid_v(VRegister vd, MaskType mask=Mask)
void vadc_vi(VRegister vd, uint8_t imm5, VRegister vs2)
void vneg_vv(VRegister dst, VRegister src, MaskType mask=NoMask)
LoadStoreLaneParams(MachineRepresentation rep, uint8_t laneidx)
LoadStoreLaneParams(uint8_t laneidx, int sz, int lanes)
#define DEFINE_OPFVV(name, funct6)
#define DEFINE_OPFWF(name, funct6)
#define DEFINE_OPFWV(name, funct6)
#define DEFINE_OPFVV_FMA(name, funct6)
#define DEFINE_OPIVV(name, funct6)
#define DEFINE_OPMVV(name, funct6)
#define DEFINE_OPMVX(name, funct6)
#define DEFINE_OPFVF(name, funct6)
#define DEFINE_OPMVV_VIE(name, vs1)
#define DEFINE_OPFRED(name, funct6)
#define DEFINE_OPFVF_FMA(name, funct6)
#define DEFINE_OPIVX(name, funct6)
#define DEFINE_OPIVI(name, funct6)
#define DEFINE_VFUNARY(name, funct6, vs1)
constexpr Opcode VMAXU_FUNCT6
constexpr Opcode VFMACC_FUNCT6
constexpr Opcode VMUL_FUNCT6
constexpr Opcode VMSGTU_FUNCT6
constexpr Opcode VMULHU_FUNCT6
constexpr Opcode VWADDU_FUNCT6
constexpr Opcode VSMUL_FUNCT6
constexpr Opcode VFMADD_FUNCT6
constexpr Opcode VFDIV_FUNCT6
constexpr Opcode VFWMACC_FUNCT6
constexpr Opcode VFRSQRT7_V
constexpr Opcode VFWCVT_F_X_V
constexpr Opcode VMSLE_FUNCT6
constexpr Opcode VWADD_FUNCT6
constexpr Opcode VFSGNJ_FUNCT6
constexpr Opcode VRSUB_FUNCT6
constexpr Opcode VFMSUB_FUNCT6
constexpr Opcode VFSUB_FUNCT6
constexpr Opcode VMULH_FUNCT6
constexpr Opcode VFNCVT_XU_F_W
constexpr Opcode VFUNARY1_FUNCT6
constexpr Opcode VFWSUB_W_FUNCT6
constexpr Opcode VWMULU_FUNCT6
constexpr Opcode VFWNMACC_FUNCT6
constexpr Opcode VSLL_FUNCT6
constexpr Opcode VSSUB_FUNCT6
constexpr Opcode VXOR_FUNCT6
constexpr Opcode VFNCVT_X_F_W
constexpr Opcode VFCVT_X_F_V
constexpr Opcode VFSQRT_V
constexpr Opcode VWMUL_FUNCT6
constexpr Opcode VDIV_FUNCT6
constexpr Opcode VFREDMAX_FUNCT6
constexpr Opcode VMSLT_FUNCT6
constexpr Opcode VFCLASS_V
constexpr Opcode VFWCVT_F_F_V
constexpr Opcode VMSNE_FUNCT6
constexpr Opcode VFNMADD_FUNCT6
constexpr Opcode VSADDU_FUNCT6
constexpr Opcode VMAX_FUNCT6
constexpr Opcode VOR_FUNCT6
constexpr Opcode VAND_FUNCT6
constexpr Opcode VMSLTU_FUNCT6
constexpr Opcode VFWNMSAC_FUNCT6
constexpr Opcode VMFEQ_FUNCT6
constexpr Opcode VFMSAC_FUNCT6
constexpr Opcode VFADD_FUNCT6
constexpr Opcode VCOMPRESS_FUNCT6
constexpr Opcode VSLIDEDOWN_FUNCT6
constexpr Opcode VFSGNJX_FUNCT6
constexpr Opcode VMINU_FUNCT6
constexpr Opcode VFCVT_F_X_V
constexpr Opcode VSRL_FUNCT6
constexpr Opcode VMFLT_FUNCT6
constexpr Opcode VFWREDOSUM_FUNCT6
constexpr Opcode VFWCVT_X_F_V
constexpr Opcode VFUNARY0_FUNCT6
constexpr Opcode VFNMACC_FUNCT6
constexpr Opcode VFMUL_FUNCT6
constexpr Opcode VFNCVT_F_F_W
constexpr Opcode VDIVU_FUNCT6
constexpr Opcode VNCLIPU_FUNCT6
constexpr Opcode VFWCVT_F_XU_V
constexpr Opcode VFCVT_F_XU_V
constexpr Opcode VMIN_FUNCT6
constexpr Opcode VMSLEU_FUNCT6
constexpr Opcode VSLIDEUP_FUNCT6
constexpr Opcode VFWSUB_FUNCT6
constexpr Opcode VMSGT_FUNCT6
constexpr Opcode VSSUBU_FUNCT6
constexpr Opcode VADD_FUNCT6
constexpr Opcode VFNMSUB_FUNCT6
constexpr Opcode VFSGNJN_FUNCT6
constexpr Opcode VMFLE_FUNCT6
constexpr Opcode VFCVT_XU_F_V
constexpr Opcode VFREC7_V
constexpr Opcode VMULHSU_FUNCT6
constexpr Opcode VSUB_FUNCT6
constexpr Opcode VFNMSAC_FUNCT6
constexpr Opcode VMFNE_FUNCT6
constexpr Opcode VNCLIP_FUNCT6
constexpr Opcode VMSEQ_FUNCT6
constexpr Opcode VFWADD_FUNCT6
constexpr Opcode VFWMUL_FUNCT6
constexpr Opcode VFWADD_W_FUNCT6
constexpr Opcode VFWMSAC_FUNCT6
constexpr Opcode VFWCVT_XU_F_V
constexpr Opcode VSRA_FUNCT6
constexpr Opcode VFWREDUSUM_FUNCT6
constexpr Opcode VRGATHER_FUNCT6
constexpr Opcode VSADD_FUNCT6
#define DCHECK(condition)