@@ -25,97 +25,119 @@ defvar QExtsRV64 = [QExt];
25
25
//===----------------------------------------------------------------------===//
26
26
27
27
let 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
+
32
30
// Operands for stores are in the order srcreg, base, offset rather than
33
31
// reflecting the order these fields are specified in the instruction
34
32
// 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>;
39
34
} // Predicates = [HasStdExtQ]
40
35
41
36
foreach 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
+ }
46
43
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
+ }
49
48
49
+ let SchedRW = [WriteFMul128, ReadFMul128, ReadFMul128] in
50
50
defm FMUL_Q : FPALU_rr_frm_m<0b0001011, "fmul.q", Ext>;
51
51
52
+ let SchedRW = [WriteFDiv128, ReadFDiv128, ReadFDiv128] in
52
53
defm FDIV_Q : FPALU_rr_frm_m<0b0001111, "fdiv.q", Ext>;
53
54
54
55
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]>;
56
58
57
- let mayRaiseFPException = 0 in {
59
+ let SchedRW = [WriteFSGNJ128, ReadFSGNJ128, ReadFSGNJ128],
60
+ mayRaiseFPException = 0 in {
58
61
defm FSGNJ_Q : FPALU_rr_m<0b0010011, 0b000, "fsgnj.q", Ext>;
59
62
defm FSGNJN_Q : FPALU_rr_m<0b0010011, 0b001, "fsgnjn.q", Ext>;
60
63
defm FSGNJX_Q : FPALU_rr_m<0b0010011, 0b010, "fsgnjx.q", Ext>;
61
64
}
62
65
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
+ }
65
70
66
71
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]>;
68
74
69
75
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]>;
71
79
72
80
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]>;
74
83
75
84
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
+ }
81
94
82
95
let mayRaiseFPException = 0 in
83
96
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]>;
85
99
86
100
let IsSignExtendingOpW = 1 in
87
101
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]>;
89
104
90
105
let IsSignExtendingOpW = 1 in
91
106
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]>;
93
109
94
110
let mayRaiseFPException = 0 in
95
111
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]>;
97
114
98
115
let mayRaiseFPException = 0 in
99
116
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]>;
101
119
} // foreach Ext = QExts
102
120
103
121
foreach Ext = QExtsRV64 in {
104
122
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]>;
106
125
107
126
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]>;
109
129
110
130
let mayRaiseFPException = 0 in
111
131
defm FCVT_Q_L : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00010, Ext,
112
132
Ext.PrimaryTy, GPR, "fcvt.q.l",
113
- [IsRV64]>;
133
+ [IsRV64]>,
134
+ Sched<[WriteFCvtI64ToF128, ReadFCvtI64ToF128]>;
114
135
115
136
let mayRaiseFPException = 0 in
116
137
defm FCVT_Q_LU : FPUnaryOp_r_frmlegacy_m<0b1101011, 0b00011, Ext,
117
138
Ext.PrimaryTy, GPR, "fcvt.q.lu",
118
- [IsRV64]>;
139
+ [IsRV64]>,
140
+ Sched<[WriteFCvtI64ToF128, ReadFCvtI64ToF128]>;
119
141
} // foreach Ext = QExtsRV64
120
142
121
143
//===----------------------------------------------------------------------===//
0 commit comments