CPU architectures often gain interesting new instructions as they evolve, but application developers often find it difficult to take advantage of those instructions.
Reluctance to lose backward-compatibility
is one of the main roadblocks slowing developers from using advancements
in newer computing architectures.
Function multi-versioning (FMV), which first appeared in GCC 4.8, is a
way to have multiple implementations of a function, each using a
different architecture s specialized instruction-set extensions.
GCC 6 introduces changes to FMV that make it
even easier to bring architecture-based optimizations to application code.