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.