10
10
//
11
11
//===----------------------------------------------------------------------===//
12
12
13
- let DecoderNamespace = "XCV" in {
13
+ let DecoderNamespace = "XCV",
14
+ hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
14
15
class CVInstBitManipRII<bits<2> funct2, bits<3> funct3, dag outs, dag ins,
15
16
string opcodestr, string argstr>
16
17
: RVInstIBase<funct3, OPC_CUSTOM_2, outs, ins, opcodestr, argstr> {
@@ -36,10 +37,9 @@ let DecoderNamespace = "XCV" in {
36
37
(ins GPR:$rs1), opcodestr, "$rd, $rs1"> {
37
38
let rs2 = 0b00000;
38
39
}
39
- }
40
+ } // DecoderNamespace = "XCV", hasSideEffects = 0, mayLoad = 0, mayStore = 0
40
41
41
- let Predicates = [HasVendorXCVbitmanip, IsRV32],
42
- hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
42
+ let Predicates = [HasVendorXCVbitmanip, IsRV32] in {
43
43
def CV_EXTRACT : CVBitManipRII<0b00, 0b000, "cv.extract">;
44
44
def CV_EXTRACTU : CVBitManipRII<0b01, 0b000, "cv.extractu">;
45
45
@@ -54,7 +54,8 @@ let Predicates = [HasVendorXCVbitmanip, IsRV32],
54
54
def CV_INSERT : CVInstBitManipRII<0b10, 0b000, (outs GPR:$rd_wb),
55
55
(ins GPR:$rd, GPR:$rs1, uimm5:$is3, uimm5:$is2),
56
56
"cv.insert", "$rd, $rs1, $is3, $is2">;
57
- let DecoderNamespace = "XCV" in
57
+ let DecoderNamespace = "XCV",
58
+ hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
58
59
def CV_INSERTR : RVInstR<0b0011010, 0b011, OPC_CUSTOM_1, (outs GPR:$rd_wb),
59
60
(ins GPR:$rd, GPR:$rs1, GPR:$rs2),
60
61
"cv.insertr", "$rd, $rs1, $rs2">;
@@ -75,6 +76,9 @@ class CVInstMac<bits<7> funct7, bits<3> funct3, string opcodestr>
75
76
(outs GPR:$rd_wb), (ins GPR:$rd, GPR:$rs1, GPR:$rs2),
76
77
opcodestr, "$rd, $rs1, $rs2"> {
77
78
let Constraints = "$rd = $rd_wb";
79
+ let hasSideEffects = 0;
80
+ let mayLoad = 0;
81
+ let mayStore = 0;
78
82
let DecoderNamespace = "XCV";
79
83
}
80
84
@@ -86,6 +90,11 @@ class CVInstMacMulN<bits<2> funct2, bits<3> funct3, dag outs, dag ins,
86
90
87
91
let Inst{31-30} = funct2;
88
92
let Inst{29-25} = imm5;
93
+
94
+ let hasSideEffects = 0;
95
+ let mayLoad = 0;
96
+ let mayStore = 0;
97
+
89
98
let DecoderNamespace = "XCV";
90
99
}
91
100
@@ -99,8 +108,7 @@ class CVInstMulN<bits<2> funct2, bits<3> funct3, string opcodestr>
99
108
: CVInstMacMulN<funct2, funct3, (outs GPR:$rd),
100
109
(ins GPR:$rs1, GPR:$rs2, uimm5:$imm5), opcodestr>;
101
110
102
- let Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0,
103
- mayStore = 0 in {
111
+ let Predicates = [HasVendorXCVmac, IsRV32] in {
104
112
// 32x32 bit macs
105
113
def CV_MAC : CVInstMac<0b1001000, 0b011, "cv.mac">,
106
114
Sched<[]>;
@@ -126,9 +134,7 @@ let Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0,
126
134
Sched<[]>;
127
135
def CV_MACHHURN : CVInstMacN<0b11, 0b111, "cv.machhurn">,
128
136
Sched<[]>;
129
- } // Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0...
130
137
131
- let Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
132
138
// Signed 16x16 bit muls with imm
133
139
def CV_MULSN : CVInstMulN<0b00, 0b100, "cv.mulsn">,
134
140
Sched<[]>;
@@ -148,9 +154,7 @@ let Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0, may
148
154
Sched<[]>;
149
155
def CV_MULHHURN : CVInstMulN<0b11, 0b101, "cv.mulhhurn">,
150
156
Sched<[]>;
151
- } // Predicates = [HasVendorXCVmac, IsRV32], hasSideEffects = 0, mayLoad = 0...
152
157
153
- let Predicates = [HasVendorXCVmac, IsRV32] in {
154
158
// Xcvmac Pseudo Instructions
155
159
// Signed 16x16 bit muls
156
160
def : InstAlias<"cv.muls $rd1, $rs1, $rs2",
@@ -165,7 +169,8 @@ let Predicates = [HasVendorXCVmac, IsRV32] in {
165
169
(CV_MULHHUN GPR:$rd1, GPR:$rs1, GPR:$rs2, 0)>;
166
170
} // Predicates = [HasVendorXCVmac, IsRV32]
167
171
168
- let DecoderNamespace = "XCV" in {
172
+ let DecoderNamespace = "XCV",
173
+ hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
169
174
class CVInstAluRRI<bits<2> funct2, bits<3> funct3, string opcodestr>
170
175
: RVInstRBase<funct3, OPC_CUSTOM_2, (outs GPR:$rd),
171
176
(ins GPR:$rs1, GPR:$rs2, uimm5:$imm5), opcodestr,
@@ -204,8 +209,7 @@ let DecoderNamespace = "XCV" in {
204
209
205
210
} // DecoderNamespace = "XCV"
206
211
207
- let Predicates = [HasVendorXCValu, IsRV32],
208
- hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
212
+ let Predicates = [HasVendorXCValu, IsRV32] in {
209
213
// General ALU Operations
210
214
def CV_ABS : CVInstAluR<0b0101000, 0b011, "cv.abs">,
211
215
Sched<[]>;
@@ -255,11 +259,7 @@ let Predicates = [HasVendorXCValu, IsRV32],
255
259
Sched<[]>;
256
260
def CV_SUBURN : CVInstAluRRI<0b11, 0b011, "cv.suburn">,
257
261
Sched<[]>;
258
- } // Predicates = [HasVendorXCValu, IsRV32],
259
- // hasSideEffects = 0, mayLoad = 0, mayStore = 0
260
262
261
- let Predicates = [HasVendorXCValu, IsRV32],
262
- hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
263
263
def CV_ADDNR : CVInstAluRRNR<0b1000000, 0b011, "cv.addnr">,
264
264
Sched<[]>;
265
265
def CV_ADDUNR : CVInstAluRRNR<0b1000001, 0b011, "cv.addunr">,
@@ -277,8 +277,7 @@ let Predicates = [HasVendorXCValu, IsRV32],
277
277
def CV_SUBURNR : CVInstAluRRNR<0b1000111, 0b011, "cv.suburnr">,
278
278
Sched<[]>;
279
279
280
- } // Predicates = [HasVendorXCValu, IsRV32],
281
- // hasSideEffects = 0, mayLoad = 0, mayStore = 0,
280
+ } // Predicates = [HasVendorXCValu, IsRV32]
282
281
283
282
let Predicates = [HasVendorXCValu, IsRV32] in {
284
283
def : MnemonicAlias<"cv.slet", "cv.sle">;
@@ -307,6 +306,7 @@ class CVInstSIMDRI<bits<5> funct5, bit F, bits<3> funct3, RISCVOpcode opcode,
307
306
let DecoderNamespace = "XCV";
308
307
}
309
308
309
+ let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
310
310
class CVSIMDRR<bits<5> funct5, bit F, bit funct1, bits<3> funct3,
311
311
string opcodestr>
312
312
: CVInstSIMDRR<funct5, F, funct1, funct3, OPC_CUSTOM_3, (outs GPR:$rd),
@@ -344,6 +344,7 @@ class CVSIMDR<bits<5> funct5, bit F, bit funct1, bits<3> funct3,
344
344
(ins GPR:$rs1), opcodestr, "$rd, $rs1"> {
345
345
let rs2 = 0b00000;
346
346
}
347
+ } // hasSideEffects = 0, mayLoad = 0, mayStore = 0
347
348
348
349
multiclass CVSIMDBinarySigned<bits<5> funct5, bit F, bit funct1, string mnemonic> {
349
350
def CV_ # NAME # _H : CVSIMDRR<funct5, F, funct1, 0b000, "cv." # mnemonic # ".h">;
@@ -391,8 +392,7 @@ multiclass CVSIMDBinaryUnsignedWb<bits<5> funct5, bit F, bit funct1, string mnem
391
392
}
392
393
393
394
394
- let Predicates = [HasVendorXCVsimd, IsRV32],
395
- hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
395
+ let Predicates = [HasVendorXCVsimd, IsRV32] in {
396
396
defm ADD : CVSIMDBinarySigned<0b00000, 0, 0, "add">;
397
397
defm SUB : CVSIMDBinarySigned<0b00001, 0, 0, "sub">;
398
398
defm AVG : CVSIMDBinarySigned<0b00010, 0, 0, "avg">;
@@ -494,11 +494,15 @@ class CVInstImmBranch<bits<3> funct3, dag outs, dag ins,
494
494
: RVInstB<funct3, OPC_CUSTOM_0, outs, ins, opcodestr, argstr> {
495
495
bits<5> imm5;
496
496
let rs2 = imm5;
497
+ let isBranch = 1;
498
+ let isTerminator = 1;
499
+ let hasSideEffects = 0;
500
+ let mayLoad = 0;
501
+ let mayStore = 0;
497
502
let DecoderNamespace = "XCV";
498
503
}
499
504
500
- let Predicates = [HasVendorXCVbi, IsRV32], hasSideEffects = 0, mayLoad = 0,
501
- mayStore = 0, isBranch = 1, isTerminator = 1 in {
505
+ let Predicates = [HasVendorXCVbi, IsRV32] in {
502
506
// Immediate branching operations
503
507
def CV_BEQIMM : CVInstImmBranch<0b110, (outs),
504
508
(ins GPR:$rs1, simm5:$imm5, simm13_lsb0:$imm12),
@@ -524,15 +528,18 @@ def CVrr : Operand<i32>,
524
528
let MIOperandInfo = (ops GPR:$base, GPR:$offset);
525
529
}
526
530
531
+ let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in {
527
532
class CVLoad_ri_inc<bits<3> funct3, string opcodestr>
528
- : RVInstI<funct3, OPC_CUSTOM_0, (outs GPR:$rd, GPR:$rs1_wb), (ins GPRMem:$rs1, simm12:$imm12),
533
+ : RVInstI<funct3, OPC_CUSTOM_0, (outs GPR:$rd, GPR:$rs1_wb),
534
+ (ins GPRMem:$rs1, simm12:$imm12),
529
535
opcodestr, "$rd, (${rs1}), ${imm12}"> {
530
536
let Constraints = "$rs1_wb = $rs1";
531
537
let DecoderNamespace = "XCV";
532
538
}
533
539
534
540
class CVLoad_rr_inc<bits<7> funct7, bits<3> funct3, string opcodestr>
535
- : RVInstR<funct7, funct3, OPC_CUSTOM_1, (outs GPR:$rd, GPR:$rs1_wb), (ins GPRMem:$rs1, GPR:$rs2),
541
+ : RVInstR<funct7, funct3, OPC_CUSTOM_1, (outs GPR:$rd, GPR:$rs1_wb),
542
+ (ins GPRMem:$rs1, GPR:$rs2),
536
543
opcodestr, "$rd, (${rs1}), ${rs2}"> {
537
544
let Constraints = "$rs1_wb = $rs1";
538
545
let DecoderNamespace = "XCV";
@@ -551,9 +558,9 @@ class CVLoad_rr<bits<7> funct7, bits<3> funct3, string opcodestr>
551
558
let Inst{11-7} = rd;
552
559
let DecoderNamespace = "XCV";
553
560
}
561
+ } // hasSideEffects = 0, mayLoad = 1, mayStore = 0
554
562
555
- let Predicates = [HasVendorXCVmem, IsRV32], hasSideEffects = 0, mayLoad = 1,
556
- mayStore = 0 in {
563
+ let Predicates = [HasVendorXCVmem, IsRV32] in {
557
564
// Register-Immediate load with post-increment
558
565
def CV_LB_ri_inc : CVLoad_ri_inc<0b000, "cv.lb">;
559
566
def CV_LBU_ri_inc : CVLoad_ri_inc<0b100, "cv.lbu">;
@@ -576,6 +583,7 @@ let Predicates = [HasVendorXCVmem, IsRV32], hasSideEffects = 0, mayLoad = 1,
576
583
def CV_LW_rr : CVLoad_rr<0b0000110, 0b011, "cv.lw">;
577
584
}
578
585
586
+ let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in {
579
587
class CVStore_ri_inc<bits<3> funct3, string opcodestr>
580
588
: RVInstS<funct3, OPC_CUSTOM_1, (outs GPR:$rs1_wb),
581
589
(ins GPR:$rs2, GPR:$rs1, simm12:$imm12),
@@ -616,9 +624,9 @@ class CVStore_rr<bits<3> funct3, bits<7> funct7, string opcodestr>
616
624
let Inst{6-0} = OPC_CUSTOM_1.Value;
617
625
let DecoderNamespace = "XCV";
618
626
}
627
+ } // hasSideEffects = 0, mayLoad = 0, mayStore = 1
619
628
620
- let Predicates = [HasVendorXCVmem, IsRV32], hasSideEffects = 0, mayLoad = 0,
621
- mayStore = 1 in {
629
+ let Predicates = [HasVendorXCVmem, IsRV32] in {
622
630
// Register-Immediate store with post-increment
623
631
def CV_SB_ri_inc : CVStore_ri_inc<0b000, "cv.sb">;
624
632
def CV_SH_ri_inc : CVStore_ri_inc<0b001, "cv.sh">;
0 commit comments