This series adds support for function multiversioning on aarch64. Patch 1/5 is a repost of my copy of Pavel's aarch64 cpu feature detection code to libgcc. This is slightly refactored in a later patch, but I've preserved this patch as-is to make the attribution clearer.
Patches 2/5 and 3/5 are minor cleanups in the c-family and Ada attribute exclusion handling, to support further tweaks to attribute exclusion handling for c-family, Ada and D in patch 4. Patch 4/5 adds support for the target_version attribute to the middle end and C++ frontend, but should otherwise have no functional changes. Patch 5/5 uses this support to implement function multiversioning in aarch64. I plan to improve the existing documentation and tests, including covering the new functionality, in subsequent commits (perhaps after fixing some of the current ABI issues). I'm happy with the state of patches 2-4. Patches 1 and 5 have various outstanding issues, most of which require fixes to the ACLE as well. It might be best to push these patches in something like their current form, and then push incremental fixes once we've agreed on the relevant specification changes. The series passes regression testing on both x86 and aarch64 for C and C++. I haven't got an Ada or D compiler on my build machine, so I haven't tested these languages; however, I tested using the same code and making equivalent changes in the C++ frontend, to verify their (minimal) impact upon attribute processing functionality. Thanks, Andrew