@@ -44,26 +44,34 @@ def simm10_unsigned : RISCVOp {
44
44
//===----------------------------------------------------------------------===//
45
45
46
46
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
47
- class RVPUnaryImm10 <bits<7> funct7, string opcodestr,
48
- DAGOperand TyImm10 = simm10>
49
- : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins TyImm10:$imm10),
50
- opcodestr, "$rd, $imm10" > {
47
+ class RVPLoadImm10 <bits<7> funct7, string opcodestr,
48
+ DAGOperand TyImm10 = simm10>
49
+ : RVInst< (outs GPR:$rd), (ins TyImm10:$imm10), opcodestr, "$rd, $imm10", [] ,
50
+ InstFormatOther > {
51
51
bits<10> imm10;
52
+ bits<5> rd;
52
53
53
54
let Inst{31-25} = funct7;
54
55
let Inst{24-16} = imm10{8-0};
55
56
let Inst{15} = imm10{9};
57
+ let Inst{14-12} = 0b010;
58
+ let Inst{11-7} = rd;
59
+ let Inst{6-0} = OPC_OP_IMM_32.Value;
56
60
}
57
61
58
62
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
59
- class RVPUnaryImm8 <bits<8> funct8, string opcodestr>
60
- : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins uimm8:$uimm8),
61
- opcodestr, "$rd, $uimm8" > {
63
+ class RVPLoadImm8 <bits<8> funct8, string opcodestr>
64
+ : RVInst< (outs GPR:$rd), (ins uimm8:$uimm8), opcodestr, "$rd, $uimm8", [] ,
65
+ InstFormatOther > {
62
66
bits<8> uimm8;
67
+ bits<5> rd;
63
68
64
69
let Inst{31-24} = funct8;
65
70
let Inst{23-16} = uimm8;
66
71
let Inst{15} = 0b0;
72
+ let Inst{14-12} = 0b010;
73
+ let Inst{11-7} = rd;
74
+ let Inst{6-0} = OPC_OP_IMM_32.Value;
67
75
}
68
76
69
77
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
@@ -140,11 +148,11 @@ def PSSLAI_W : RVPUnaryImm5<0b101, "psslai.w">;
140
148
} // Predicates = [HasStdExtP, IsRV64]
141
149
142
150
let Predicates = [HasStdExtP] in
143
- def PLI_H : RVPUnaryImm10 <0b1011000, "pli.h">;
151
+ def PLI_H : RVPLoadImm10 <0b1011000, "pli.h">;
144
152
let Predicates = [HasStdExtP, IsRV64] in
145
- def PLI_W : RVPUnaryImm10 <0b1011001, "pli.w">;
153
+ def PLI_W : RVPLoadImm10 <0b1011001, "pli.w">;
146
154
let Predicates = [HasStdExtP] in
147
- def PLI_B : RVPUnaryImm8 <0b10110100, "pli.b">;
155
+ def PLI_B : RVPLoadImm8 <0b10110100, "pli.b">;
148
156
149
157
let Predicates = [HasStdExtP] in {
150
158
def PSEXT_H_B : RVPUnaryWUF<0b00, 0b00100, "psext.h.b">;
@@ -157,6 +165,6 @@ def PSEXT_W_H : RVPUnaryWUF<0b01, 0b00101, "psext.w.h">;
157
165
} // Predicates = [HasStdExtP, IsRV64]
158
166
159
167
let Predicates = [HasStdExtP] in
160
- def PLUI_H : RVPUnaryImm10 <0b1111000, "plui.h", simm10_unsigned>;
168
+ def PLUI_H : RVPLoadImm10 <0b1111000, "plui.h", simm10_unsigned>;
161
169
let Predicates = [HasStdExtP, IsRV64] in
162
- def PLUI_W : RVPUnaryImm10 <0b1111001, "plui.w", simm10_unsigned>;
170
+ def PLUI_W : RVPLoadImm10 <0b1111001, "plui.w", simm10_unsigned>;
0 commit comments