================ @@ -61,13 +61,13 @@ unsigned AArch64::getFMVPriority(ArrayRef<StringRef> Features) { return Priority + MaxFMVPriority * NumFeatures; } -uint64_t AArch64::getCpuSupportsMask(ArrayRef<StringRef> FeatureStrs) { - uint64_t FeaturesMask = 0; - for (const StringRef &FeatureStr : FeatureStrs) { - if (auto Ext = parseFMVExtension(FeatureStr)) - FeaturesMask |= (1ULL << Ext->Bit); - } - return FeaturesMask; +uint64_t AArch64::getCpuSupportsMask(ArrayRef<StringRef> Features) { + ExtensionSet FeatureBits; + for (StringRef Feature : Features) + if (auto Ext = parseFMVExtension(Feature)) + if (Ext->ID) + FeatureBits.enable(*Ext->ID); ---------------- sdesmalen-arm wrote:
Not sure if it's me, but I find the wording/lingo used for these interfaces, variables and types rather confusing. * `FeatureBits` seems to suggest it is a bitmask that relates to features. * Then its type `ExtensionSet` suggests it's about extensions. * The parsed extension, enables an `ArchKind` (along with all transitively implied `ArchKind`s). * Finally, the function returns a bit mask which according to the description expresses which CPUFeatures are set. The description of `getCpuSupportsMask` is even more confusing: ``` For given feature names, return a bitmask corresponding to the entries of AArch64::CPUFeatures. The values in CPUFeatures are not bitmasks themselves, they are sequential (0, 1, 2, 3, ...). ``` What is CPUFeatures? Is this an enum? Are those values define publicly in the ACLE/ABI? https://github.com/llvm/llvm-project/pull/119231 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits