@@ -25,97 +25,119 @@ defvar QExtsRV64 = [QExt];
2525//===----------------------------------------------------------------------===//
2626
2727let Predicates = [HasStdExtQ] in {
28- let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
29- def FLQ : RVInstI<0b100, OPC_LOAD_FP, (outs FPR128:$rd),
30- (ins GPRMem:$rs1, simm12:$imm12), "flq",
31- "$rd, ${imm12}(${rs1})">;
28+ def FLQ : FPLoad_r<0b100, "flq", FPR128, WriteFLD128>;
29+
3230 // Operands for stores are in the order srcreg, base, offset rather than
3331 // reflecting the order these fields are specified in the instruction
3432 // encoding.
35- let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in
36- def FSQ : RVInstS<0b100, OPC_STORE_FP, (outs),
37- (ins FPR128:$rs2, GPRMem:$rs1, simm12:$imm12), "fsq",
38- "$rs2, ${imm12}(${rs1})">;
33+ def FSQ : FPStore_r<0b100, "fsq", FPR128, WriteFST128>;
3934} // Predicates = [HasStdExtQ]
4035
4136foreach Ext = QExts in {
42- defm FMADD_Q : FPFMA_rrr_frm_m<OPC_MADD, 0b11, "fmadd.q", Ext>;
43- defm FMSUB_Q : FPFMA_rrr_frm_m<OPC_MSUB, 0b11, "fmsub.q", Ext>;
44- defm FNMSUB_Q : FPFMA_rrr_frm_m<OPC_NMSUB, 0b11, "fnmsub.q", Ext>;
45- defm FNMADD_Q : FPFMA_rrr_frm_m<OPC_NMADD, 0b11, "fnmadd.q", Ext>;
37+ let SchedRW = [WriteFMA128, ReadFMA128, ReadFMA128, ReadFMA128Addend] in {
38+ defm FMADD_Q : FPFMA_rrr_frm_m<OPC_MADD, 0b11, "fmadd.q", Ext>;
39+ defm FMSUB_Q : FPFMA_rrr_frm_m<OPC_MSUB, 0b11, "fmsub.q", Ext>;
40+ defm FNMSUB_Q : FPFMA_rrr_frm_m<OPC_NMSUB, 0b11, "fnmsub.q", Ext>;
41+ defm FNMADD_Q : FPFMA_rrr_frm_m<OPC_NMADD, 0b11, "fnmadd.q", Ext>;
42+ }
4643
47- defm FADD_Q : FPALU_rr_frm_m<0b0000011, "fadd.q", Ext>;
48- defm FSUB_Q : FPALU_rr_frm_m<0b0000111, "fsub.q", Ext>;
44+ let SchedRW = [WriteFAdd128, ReadFAdd128, ReadFAdd128] in {
45+ defm FADD_Q : FPALU_rr_frm_m<0b0000011, "fadd.q", Ext>;
46+ defm FSUB_Q : FPALU_rr_frm_m<0b0000111, "fsub.q", Ext>;
47+ }
4948
49+ let SchedRW = [WriteFMul128, ReadFMul128, ReadFMul128] in
5050 defm FMUL_Q : FPALU_rr_frm_m<0b0001011, "fmul.q", Ext>;
5151
52+ let SchedRW = [WriteFDiv128, ReadFDiv128, ReadFDiv128] in
5253 defm FDIV_Q : FPALU_rr_frm_m<0b0001111, "fdiv.q", Ext>;
5354
5455 defm FSQRT_Q : FPUnaryOp_r_frm_m<0b0101111, 0b00000, Ext, Ext.PrimaryTy,
55- Ext.PrimaryTy, "fsqrt.q">;
56+ Ext.PrimaryTy, "fsqrt.q">,
57+ Sched<[WriteFSqrt128, ReadFSqrt128]>;
5658
57- let mayRaiseFPException = 0 in {
59+ let SchedRW = [WriteFSGNJ128, ReadFSGNJ128, ReadFSGNJ128],
60+ mayRaiseFPException = 0 in {
5861 defm FSGNJ_Q : FPALU_rr_m<0b0010011, 0b000, "fsgnj.q", Ext>;
5962 defm FSGNJN_Q : FPALU_rr_m<0b0010011, 0b001, "fsgnjn.q", Ext>;
6063 defm FSGNJX_Q : FPALU_rr_m<0b0010011, 0b010, "fsgnjx.q", Ext>;
6164 }
6265
63- defm FMIN_Q : FPALU_rr_m<0b0010111, 0b000, "fmin.q", Ext, Commutable = 1>;
64- defm FMAX_Q : FPALU_rr_m<0b0010111, 0b001, "fmax.q", Ext, Commutable = 1>;
66+ let SchedRW = [WriteFMinMax128, ReadFMinMax128, ReadFMinMax128] in {
67+ defm FMIN_Q : FPALU_rr_m<0b0010111, 0b000, "fmin.q", Ext, Commutable = 1>;
68+ defm FMAX_Q : FPALU_rr_m<0b0010111, 0b001, "fmax.q", Ext, Commutable = 1>;
69+ }
6570
6671 defm FCVT_S_Q : FPUnaryOp_r_frm_m<0b0100000, 0b00011, Ext, Ext.F32Ty,
67- Ext.PrimaryTy, "fcvt.s.q">;
72+ Ext.PrimaryTy, "fcvt.s.q">,
73+ Sched<[WriteFCvtF128ToF32, ReadFCvtF128ToF32]>;
6874
6975 defm FCVT_Q_S : FPUnaryOp_r_frmlegacy_m<0b0100011, 0b00000, Ext,
70- Ext.PrimaryTy, Ext.F32Ty, "fcvt.q.s">;
76+ Ext.PrimaryTy, Ext.F32Ty,
77+ "fcvt.q.s">,
78+ Sched<[WriteFCvtF32ToF128, ReadFCvtF32ToF128]>;
7179
7280 defm FCVT_D_Q : FPUnaryOp_r_frm_m<0b0100001, 0b00011, Ext, Ext.F64Ty,
73- Ext.PrimaryTy, "fcvt.d.q">;
81+ Ext.PrimaryTy, "fcvt.d.q">,
82+ Sched<[WriteFCvtF128ToF64, ReadFCvtF128ToF64]>;
7483
7584 defm FCVT_Q_D : FPUnaryOp_r_frmlegacy_m<0b0100011, 0b00001, Ext,
76- Ext.PrimaryTy, Ext.F64Ty, "fcvt.q.d">;
77-
78- defm FEQ_Q : FPCmp_rr_m<0b1010011, 0b010, "feq.q", Ext, Commutable = 1>;
79- defm FLT_Q : FPCmp_rr_m<0b1010011, 0b001, "flt.q", Ext>;
80- defm FLE_Q : FPCmp_rr_m<0b1010011, 0b000, "fle.q", Ext>;
85+ Ext.PrimaryTy, Ext.F64Ty,
86+ "fcvt.q.d">,
87+ Sched<[WriteFCvtF64ToF128, ReadFCvtF64ToF128]>;
88+
89+ let SchedRW = [WriteFCmp128, ReadFCmp128, ReadFCmp128] in {
90+ defm FEQ_Q : FPCmp_rr_m<0b1010011, 0b010, "feq.q", Ext, Commutable = 1>;
91+ defm FLT_Q : FPCmp_rr_m<0b1010011, 0b001, "flt.q", Ext>;
92+ defm FLE_Q : FPCmp_rr_m<0b1010011, 0b000, "fle.q", Ext>;
93+ }
8194
8295 let mayRaiseFPException = 0 in
8396 defm FCLASS_Q : FPUnaryOp_r_m<0b1110011, 0b00000, 0b001, Ext, GPR,
84- Ext.PrimaryTy, "fclass.q">;
97+ Ext.PrimaryTy, "fclass.q">,
98+ Sched<[WriteFClass128, ReadFClass128]>;
8599
86100 let IsSignExtendingOpW = 1 in
87101 defm FCVT_W_Q : FPUnaryOp_r_frm_m<0b1100011, 0b00000, Ext, GPR,
88- Ext.PrimaryTy, "fcvt.w.q">;
102+ Ext.PrimaryTy, "fcvt.w.q">,
103+ Sched<[WriteFCvtF128ToI32, ReadFCvtF128ToI32]>;
89104
90105 let IsSignExtendingOpW = 1 in
91106 defm FCVT_WU_Q : FPUnaryOp_r_frm_m<0b1100011, 0b00001, Ext, GPR,
92- Ext.PrimaryTy, "fcvt.wu.q">;
107+ Ext.PrimaryTy, "fcvt.wu.q">,
108+ Sched<[WriteFCvtF128ToI32, ReadFCvtF128ToI32]>;
93109
94110 let mayRaiseFPException = 0 in
95111 defm FCVT_Q_W : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00000, Ext,
96- Ext.PrimaryTy, GPR, "fcvt.q.w">;
112+ Ext.PrimaryTy, GPR, "fcvt.q.w">,
113+ Sched<[WriteFCvtI32ToF128, ReadFCvtI32ToF128]>;
97114
98115 let mayRaiseFPException = 0 in
99116 defm FCVT_Q_WU : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00001, Ext,
100- Ext.PrimaryTy, GPR, "fcvt.q.wu">;
117+ Ext.PrimaryTy, GPR, "fcvt.q.wu">,
118+ Sched<[WriteFCvtI32ToF128, ReadFCvtI32ToF128]>;
101119} // foreach Ext = QExts
102120
103121foreach Ext = QExtsRV64 in {
104122 defm FCVT_L_Q : FPUnaryOp_r_frm_m<0b1100011, 0b00010, Ext, GPR,
105- Ext.PrimaryTy, "fcvt.l.q", [IsRV64]>;
123+ Ext.PrimaryTy, "fcvt.l.q", [IsRV64]>,
124+ Sched<[WriteFCvtF128ToI64, ReadFCvtF128ToI64]>;
106125
107126 defm FCVT_LU_Q : FPUnaryOp_r_frm_m<0b1100011, 0b00011, Ext, GPR,
108- Ext.PrimaryTy, "fcvt.lu.q", [IsRV64]>;
127+ Ext.PrimaryTy, "fcvt.lu.q", [IsRV64]>,
128+ Sched<[WriteFCvtF128ToI64, ReadFCvtF128ToI64]>;
109129
110130 let mayRaiseFPException = 0 in
111131 defm FCVT_Q_L : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00010, Ext,
112132 Ext.PrimaryTy, GPR, "fcvt.q.l",
113- [IsRV64]>;
133+ [IsRV64]>,
134+ Sched<[WriteFCvtI64ToF128, ReadFCvtI64ToF128]>;
114135
115136 let mayRaiseFPException = 0 in
116137 defm FCVT_Q_LU : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00011, Ext,
117138 Ext.PrimaryTy, GPR, "fcvt.q.lu",
118- [IsRV64]>;
139+ [IsRV64]>,
140+ Sched<[WriteFCvtI64ToF128, ReadFCvtI64ToF128]>;
119141} // foreach Ext = QExtsRV64
120142
121143//===----------------------------------------------------------------------===//
0 commit comments