|
14 | 14 | // Operand and SDNode transformation definitions. |
15 | 15 | //===----------------------------------------------------------------------===// |
16 | 16 |
|
| 17 | +def uimm11 : RISCVUImmLeafOp<11>; |
| 18 | + |
17 | 19 | //===----------------------------------------------------------------------===// |
18 | 20 | // Instruction Formats |
19 | 21 | //===----------------------------------------------------------------------===// |
@@ -45,6 +47,16 @@ class QCIStore_ScaleIdx<bits<4> func4, string opcodestr> |
45 | 47 | } |
46 | 48 | } |
47 | 49 |
|
| 50 | +class QCIRVInstR<bits<4> func4, string opcodestr> |
| 51 | + : RVInstR<{0b000, func4}, 0b011, OPC_CUSTOM_0, (outs GPRNoX0:$rd), |
| 52 | + (ins GPRNoX0:$rs1), opcodestr, "$rd, $rs1"> { |
| 53 | + let rs2 = 0; |
| 54 | +} |
| 55 | + |
| 56 | +class QCIRVInstRR<bits<5> func5, DAGOperand InTyRs1, string opcodestr> |
| 57 | + : RVInstR<{0b00, func5}, 0b011, OPC_CUSTOM_0, (outs GPRNoX0:$rd), |
| 58 | + (ins InTyRs1:$rs1, GPRNoX0:$rs2), opcodestr, "$rd, $rs1, $rs2">; |
| 59 | + |
48 | 60 | //===----------------------------------------------------------------------===// |
49 | 61 | // Instructions |
50 | 62 | //===----------------------------------------------------------------------===// |
@@ -72,3 +84,27 @@ let Predicates = [HasVendorXqcisls, IsRV32], DecoderNamespace = "Xqcisls" in { |
72 | 84 | def QC_SRH : QCIStore_ScaleIdx<0b1110, "qc.srh">; |
73 | 85 | def QC_SRW : QCIStore_ScaleIdx<0b1111, "qc.srw">; |
74 | 86 | } // Predicates = [HasVendorXqcisls, IsRV32], DecoderNamespace = "Xqcisls" |
| 87 | + |
| 88 | +let Predicates = [HasVendorXqcia, IsRV32], DecoderNamespace = "Xqcia" in { |
| 89 | +let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in { |
| 90 | + def QC_SLASAT : QCIRVInstRR<0b01010, GPRNoX0, "qc.slasat">; |
| 91 | + def QC_SLLSAT : QCIRVInstRR<0b01100, GPRNoX0, "qc.sllsat">; |
| 92 | + def QC_ADDSAT : QCIRVInstRR<0b01110, GPRNoX0, "qc.addsat">; |
| 93 | + def QC_ADDUSAT : QCIRVInstRR<0b01111, GPRNoX0, "qc.addusat">; |
| 94 | + def QC_SUBSAT : QCIRVInstRR<0b10000, GPRNoX0, "qc.subsat">; |
| 95 | + def QC_SUBUSAT : QCIRVInstRR<0b10001, GPRNoX0, "qc.subusat">; |
| 96 | + |
| 97 | + def QC_WRAP : QCIRVInstRR<0b10010, GPR, "qc.wrap">; |
| 98 | + def QC_WRAPI : RVInstI<0b000, OPC_CUSTOM_0, (outs GPRNoX0:$rd), |
| 99 | + (ins GPRNoX0:$rs1, uimm11:$imm11), "qc.wrapi", |
| 100 | + "$rd, $rs1, $imm11"> { |
| 101 | + bits<11> imm11; |
| 102 | + |
| 103 | + let imm12 = {0b0, imm11}; |
| 104 | + } |
| 105 | + |
| 106 | + def QC_NORM : QCIRVInstR<0b0111, "qc.norm">; |
| 107 | + def QC_NORMU : QCIRVInstR<0b1000, "qc.normu">; |
| 108 | + def QC_NORMEU : QCIRVInstR<0b1001, "qc.normeu">; |
| 109 | +} // hasSideEffects = 0, mayLoad = 0, mayStore = 0 |
| 110 | +} // Predicates = [HasVendorXqcia, IsRV32], DecoderNamespace = "Xqcia" |
0 commit comments