@@ -112,8 +112,9 @@ class CLoadB_ri<bits<6> funct6, string OpcodeStr>
112
112
}
113
113
114
114
let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
115
- class CLoadH_ri<bits<6> funct6, bit funct1, string OpcodeStr>
116
- : RVInst16CLH<funct6, funct1, 0b00, (outs GPRC:$rd),
115
+ class CLoadH_ri<bits<6> funct6, bit funct1, string OpcodeStr,
116
+ DAGOperand rty = GPRC>
117
+ : RVInst16CLH<funct6, funct1, 0b00, (outs rty:$rd),
117
118
(ins GPRCMem:$rs1, uimm2_lsb0:$imm),
118
119
OpcodeStr, "$rd, ${imm}(${rs1})"> {
119
120
bits<2> imm;
@@ -132,9 +133,10 @@ class CStoreB_rri<bits<6> funct6, string OpcodeStr>
132
133
}
133
134
134
135
let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in
135
- class CStoreH_rri<bits<6> funct6, bit funct1, string OpcodeStr>
136
+ class CStoreH_rri<bits<6> funct6, bit funct1, string OpcodeStr,
137
+ DAGOperand rty = GPRC>
136
138
: RVInst16CSH<funct6, funct1, 0b00, (outs),
137
- (ins GPRC :$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
139
+ (ins rty :$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
138
140
OpcodeStr, "$rs2, ${imm}(${rs1})"> {
139
141
bits<2> imm;
140
142
@@ -202,7 +204,15 @@ def C_SB : CStoreB_rri<0b100010, "c.sb">,
202
204
Sched<[WriteSTB, ReadStoreData, ReadMemBase]>;
203
205
def C_SH : CStoreH_rri<0b100011, 0b0, "c.sh">,
204
206
Sched<[WriteSTH, ReadStoreData, ReadMemBase]>;
207
+
208
+ // Compressed versions of Zhinx load/store.
209
+ let isCodeGenOnly = 1 in {
210
+ def C_LH_INX : CLoadH_ri<0b100001, 0b1, "c.lh", GPRF16C>,
211
+ Sched<[WriteLDH, ReadMemBase]>;
212
+ def C_SH_INX : CStoreH_rri<0b100011, 0b0, "c.sh", GPRF16C>,
213
+ Sched<[WriteSTH, ReadStoreData, ReadMemBase]>;
205
214
}
215
+ } // Predicates = [HasStdExtZcb]
206
216
207
217
// Zcmp
208
218
let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp],
@@ -318,6 +328,13 @@ def : CompressPat<(SB GPRC:$rs2, GPRCMem:$rs1, uimm2:$imm),
318
328
(C_SB GPRC:$rs2, GPRCMem:$rs1, uimm2:$imm)>;
319
329
def : CompressPat<(SH GPRC:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
320
330
(C_SH GPRC:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
331
+
332
+ let isCompressOnly = true in {
333
+ def : CompressPat<(LH_INX GPRF16C:$rd, GPRCMem:$rs1, uimm2_lsb0:$imm),
334
+ (C_LH_INX GPRF16C:$rd, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
335
+ def : CompressPat<(SH_INX GPRF16C:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
336
+ (C_SH_INX GPRF16C:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
337
+ }
321
338
}// Predicates = [HasStdExtZcb]
322
339
323
340
0 commit comments