@@ -1157,6 +1157,9 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
1157
1157
}
1158
1158
}
1159
1159
1160
+ if (Subtarget->hasSME())
1161
+ setOperationAction(ISD::INTRINSIC_VOID, MVT::Other, Custom);
1162
+
1160
1163
if (Subtarget->hasSVE()) {
1161
1164
for (auto VT : {MVT::nxv16i8, MVT::nxv8i16, MVT::nxv4i32, MVT::nxv2i64}) {
1162
1165
setOperationAction(ISD::BITREVERSE, VT, Custom);
@@ -4565,6 +4568,18 @@ SDValue AArch64TargetLowering::LowerINTRINSIC_W_CHAIN(SDValue Op,
4565
4568
SDValue PStateSM = getPStateSM(DAG, Chain, Attrs, DL, Op.getValueType());
4566
4569
return DAG.getMergeValues({PStateSM, Chain}, DL);
4567
4570
}
4571
+ case Intrinsic::aarch64_sme_za_enable:
4572
+ return DAG.getNode(
4573
+ AArch64ISD::SMSTART, DL, MVT::Other,
4574
+ Op->getOperand(0), // Chain
4575
+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
4576
+ DAG.getConstant(0, DL, MVT::i64), DAG.getConstant(1, DL, MVT::i64));
4577
+ case Intrinsic::aarch64_sme_za_disable:
4578
+ return DAG.getNode(
4579
+ AArch64ISD::SMSTOP, DL, MVT::Other,
4580
+ Op->getOperand(0), // Chain
4581
+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
4582
+ DAG.getConstant(0, DL, MVT::i64), DAG.getConstant(1, DL, MVT::i64));
4568
4583
}
4569
4584
}
4570
4585
@@ -5639,6 +5654,7 @@ SDValue AArch64TargetLowering::LowerOperation(SDValue Op,
5639
5654
return LowerToPredicatedOp(Op, DAG, AArch64ISD::MULHS_PRED);
5640
5655
case ISD::MULHU:
5641
5656
return LowerToPredicatedOp(Op, DAG, AArch64ISD::MULHU_PRED);
5657
+ case ISD::INTRINSIC_VOID:
5642
5658
case ISD::INTRINSIC_W_CHAIN:
5643
5659
return LowerINTRINSIC_W_CHAIN(Op, DAG);
5644
5660
case ISD::INTRINSIC_WO_CHAIN:
0 commit comments