1818// Operand and SDNode transformation definitions.
1919//===----------------------------------------------------------------------===//
2020
21+ def simm10 : RISCVSImmLeafOp<10>;
22+
2123// A 10-bit signed immediate allowing range [-512, 1023]
2224// but will decode to [-512, 511].
2325def simm10_unsigned : RISCVOp {
@@ -38,14 +40,15 @@ def simm10_unsigned : RISCVOp {
3840//===----------------------------------------------------------------------===//
3941
4042let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
41- class RVPUnaryImm10<bits<7> funct7, string opcodestr>
42- : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins simm10_unsigned:$simm10u),
43- opcodestr, "$rd, $simm10u"> {
44- bits<10> simm10u;
43+ class RVPUnaryImm10<bits<7> funct7, string opcodestr,
44+ DAGOperand TyImm10 = simm10>
45+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins TyImm10:$imm10),
46+ opcodestr, "$rd, $imm10"> {
47+ bits<10> imm10;
4548
4649 let Inst{31-25} = funct7;
47- let Inst{24-16} = simm10u {8-0};
48- let Inst{15} = simm10u {9};
50+ let Inst{24-16} = imm10 {8-0};
51+ let Inst{15} = imm10 {9};
4952}
5053
5154let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
@@ -155,7 +158,6 @@ def PSEXT_W_H : RVPUnaryWUF<0b01, 0b00101, "psext.w.h">;
155158} // Predicates = [HasStdExtP, IsRV64]
156159
157160let Predicates = [HasStdExtP] in
158- def PLUI_H : RVPUnaryImm10<0b1111000, "plui.h">;
161+ def PLUI_H : RVPUnaryImm10<0b1111000, "plui.h", simm10_unsigned >;
159162let Predicates = [HasStdExtP, IsRV64] in
160- def PLUI_W : RVPUnaryImm10<0b1111001, "plui.w">;
161-
163+ def PLUI_W : RVPUnaryImm10<0b1111001, "plui.w", simm10_unsigned>;
0 commit comments