@@ -373,6 +373,12 @@ void AArch64TargetInfo::getTargetDefinesARMV95A(const LangOptions &Opts,
373373 getTargetDefinesARMV94A (Opts, Builder);
374374}
375375
376+ void AArch64TargetInfo::getTargetDefinesARMV96A (const LangOptions &Opts,
377+ MacroBuilder &Builder) const {
378+ // Armv9.6-A does not have a v8.* equivalent, but is a superset of v9.5-A.
379+ getTargetDefinesARMV95A (Opts, Builder);
380+ }
381+
376382void AArch64TargetInfo::getTargetDefines (const LangOptions &Opts,
377383 MacroBuilder &Builder) const {
378384 // Target identification.
@@ -657,6 +663,8 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
657663 getTargetDefinesARMV94A (Opts, Builder);
658664 else if (*ArchInfo == llvm::AArch64::ARMV9_5A)
659665 getTargetDefinesARMV95A (Opts, Builder);
666+ else if (*ArchInfo == llvm::AArch64::ARMV9_6A)
667+ getTargetDefinesARMV96A (Opts, Builder);
660668
661669 // All of the __sync_(bool|val)_compare_and_swap_(1|2|4|8|16) builtins work.
662670 Builder.defineMacro (" __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1" );
@@ -1044,6 +1052,9 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
10441052 if (Feature == " +v9.5a" &&
10451053 ArchInfo->Version < llvm::AArch64::ARMV9_5A.Version )
10461054 ArchInfo = &llvm::AArch64::ARMV9_5A;
1055+ if (Feature == " +v9.6a" &&
1056+ ArchInfo->Version < llvm::AArch64::ARMV9_6A.Version )
1057+ ArchInfo = &llvm::AArch64::ARMV9_6A;
10471058 if (Feature == " +v8r" )
10481059 ArchInfo = &llvm::AArch64::ARMV8R;
10491060 if (Feature == " +fullfp16" ) {
0 commit comments