I'm kind of resurrecting a dead thread here, but maybe a recent change to GCC has made
what you were considering possible. I stumbled upon it when looking for information about
optimized extensions for another package.
Recently, GCC expanded support for multiversioning. It's in GCC 6, which is included
in F24. You can now write one function, and have it multiversioned. This includes support
for C++ and C (as opposed to C++ only), works in x86_64 as well, and you only write one
version of the function (which should avoid those ABI changes you mentioned). It's
currently limited to AVX(2) from what I understand, so it doesn't help me, but maybe
you'll find it useful. There's also a nifty tool to identify areas that can be
sped up with the new instructions.
More info here: http://lwn.net/Articles/691932/
(I didn't fully understand your msg on which implementation of multiversioning you
were using, so if you're already using the new one, please disregard!)