[llvm] [RISCV] Intrinsic Support for XCVsimd (PR #118557)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 14 09:18:31 PST 2025
================
@@ -864,3 +864,230 @@ let Predicates = [HasVendorXCVmac] in {
def : PatCoreVMacGprGprGprUimm5<"macsRN", "MACSRN">;
def : PatCoreVMacGprGprGprUimm5<"machhsRN", "MACHHSRN">;
}
+
+//===----------------------------------------------------------------------===//
+// Patterns for SIMD operations
+//===----------------------------------------------------------------------===//
+
+def cv_tsimm6 : Operand<XLenVT>, TImmLeaf<XLenVT, [{return isInt<6>(Imm);}]> {
+ let ParserMatchClass = SImmAsmOperand<6>;
+ let EncoderMethod = "getImmOpValue";
+ let DecoderMethod = "decodeSImmOperand<6>";
+ let OperandType = "OPERAND_SIMM6";
+ let MCOperandPredicate = [{
+ int64_t Imm;
+ return MCOp.evaluateAsConstantImm(Imm) && isUInt<6>(Imm);
+ }];
+ let OperandNamespace = "RISCVOp";
+}
+
+
+class CVUImmAsmOperand<int width> : AsmOperandClass {
+ let Name = "CVUImm" # width;
+ let RenderMethod = "addImmOperands";
+ let DiagnosticType = !strconcat("Invalid", Name);
+}
+
+def cv_uimm6 : Operand<XLenVT>, ImmLeaf<XLenVT, [{return isUInt<6>(Imm);}]> {
+ let ParserMatchClass = UImmAsmOperand<6>;
+ let EncoderMethod = "getImmOpValue";
+ let DecoderMethod = "decodeUImmOperand<6>";
+ let OperandType = "OPERAND_UIMM6";
+ let MCOperandPredicate = [{
+ int64_t Imm;
+ return MCOp.evaluateAsConstantImm(Imm) && isUInt<6>(Imm);
+ }];
+ let OperandNamespace = "RISCVOp";
+}
+
+def cv_imm8: Operand<XLenVT>, TImmLeaf<XLenVT, [{return isUInt<8>(Imm);}]>;
+
+class PatCorevGprGpr <string intr, string asm> :
----------------
topperc wrote:
No space before '<'
https://github.com/llvm/llvm-project/pull/118557
More information about the llvm-commits
mailing list