@@ -89,35 +89,37 @@ class PLI_B_i<bits<8> funct8, string opcodestr>
89
89
}
90
90
91
91
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
92
- class RVPUnary<bits<3> f, string opcodestr, dag operands, string argstr>
93
- : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), operands, opcodestr, argstr> {
92
+ class RVPShift_ri<bits<3> f, bits<3> funct3, string opcodestr, Operand ImmType>
93
+ : RVInstIBase<funct3, OPC_OP_IMM_32, (outs GPR:$rd),
94
+ (ins GPR:$rs1, ImmType:$shamt), opcodestr,
95
+ "$rd, $rs1, $shamt"> {
94
96
let Inst{31} = 0b1;
95
97
let Inst{30-28} = f;
96
98
let Inst{27} = 0b0;
97
99
}
98
100
99
- class RVPUnaryImm5 <bits<3> f, string opcodestr>
100
- : RVPUnary <f, opcodestr, (ins GPR:$rs1 , uimm5:$uimm5), "$rd, $rs1, $uimm5" > {
101
- bits<5> uimm5 ;
101
+ class RVPShiftW_ri <bits<3> f, bits<3> funct3 , string opcodestr>
102
+ : RVPShift_ri <f, funct3, opcodestr , uimm5> {
103
+ bits<5> shamt ;
102
104
103
105
let Inst{26-25} = 0b01;
104
- let Inst{24-20} = uimm5 ;
106
+ let Inst{24-20} = shamt ;
105
107
}
106
108
107
- class RVPUnaryImm4 <bits<3> f, string opcodestr>
108
- : RVPUnary <f, opcodestr, (ins GPR:$rs1 , uimm4:$uimm4), "$rd, $rs1, $uimm4" > {
109
- bits<4> uimm4 ;
109
+ class RVPShiftH_ri <bits<3> f, bits<3> funct3 , string opcodestr>
110
+ : RVPShift_ri <f, funct3, opcodestr , uimm4> {
111
+ bits<4> shamt ;
110
112
111
113
let Inst{26-24} = 0b001;
112
- let Inst{23-20} = uimm4 ;
114
+ let Inst{23-20} = shamt ;
113
115
}
114
116
115
- class RVPUnaryImm3 <bits<3> f, string opcodestr>
116
- : RVPUnary <f, opcodestr, (ins GPR:$rs1 , uimm3:$uimm3), "$rd, $rs1, $uimm3" > {
117
- bits<3> uimm3 ;
117
+ class RVPShiftB_ri <bits<3> f, bits<3> funct3 , string opcodestr>
118
+ : RVPShift_ri <f, funct3, opcodestr , uimm3> {
119
+ bits<3> shamt ;
118
120
119
121
let Inst{26-23} = 0b0001;
120
- let Inst{22-20} = uimm3 ;
122
+ let Inst{22-20} = shamt ;
121
123
}
122
124
123
125
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
@@ -149,16 +151,16 @@ def ABSW : UnaryW_r<0b011000000111, 0b001, "absw">;
149
151
} // Predicates = [HasStdExtP, IsRV64]
150
152
151
153
let Predicates = [HasStdExtP] in {
152
- def PSLLI_B : RVPUnaryImm3 <0b000, "pslli.b">;
153
- def PSLLI_H : RVPUnaryImm4 <0b000, "pslli.h">;
154
- def PSSLAI_H : RVPUnaryImm4 <0b101, "psslai.h">;
154
+ def PSLLI_B : RVPShiftB_ri <0b000, 0b010 , "pslli.b">;
155
+ def PSLLI_H : RVPShiftH_ri <0b000, 0b010 , "pslli.h">;
156
+ def PSSLAI_H : RVPShiftH_ri <0b101, 0b010 , "psslai.h">;
155
157
} // Predicates = [HasStdExtP]
156
158
let DecoderNamespace = "RV32Only",
157
159
Predicates = [HasStdExtP, IsRV32] in
158
- def SSLAI : RVPUnaryImm5 <0b101, "sslai">;
160
+ def SSLAI : RVPShiftW_ri <0b101, 0b010 , "sslai">;
159
161
let Predicates = [HasStdExtP, IsRV64] in {
160
- def PSLLI_W : RVPUnaryImm5 <0b000, "pslli.w">;
161
- def PSSLAI_W : RVPUnaryImm5 <0b101, "psslai.w">;
162
+ def PSLLI_W : RVPShiftW_ri <0b000, 0b010 , "pslli.w">;
163
+ def PSSLAI_W : RVPShiftW_ri <0b101, 0b010 , "psslai.w">;
162
164
} // Predicates = [HasStdExtP, IsRV64]
163
165
164
166
let Predicates = [HasStdExtP] in
0 commit comments