Messages in this thread | | | Date | Tue, 10 Nov 2009 21:34:34 +0100 | From | Willy Tarreau <> | Subject | Re: i686 quirk for AMD Geode |
| |
On Tue, Nov 10, 2009 at 12:25:02PM -0800, H. Peter Anvin wrote: > On 11/10/2009 12:16 PM, Willy Tarreau wrote: > > > > Indeed, but there is a difference between [cmpxchg, bswap, cmov, nopl] > > on one side and [sse*] on the other : distros are built assuming the > > former are always available while they are not always. And the distro > > which make the difference have to provide an dedicated build for earlier > > systems just for compatibility. SSE*, 3dnow* etc... are only used by a > > handful of media players/converters/encoders which are able to detect > > themselves what to use and already have the necessary fallbacks because > > these instruction sets vary too much between processors and vendors. > > > > That is increasingly not true since gcc is now doing autovectorization.
But programs have to be built to use that specific platform anyway ; this is different from all programs built with support for CMOV enabled by default and which will work on 95% of the platforms.
(...) > I could 970 cmovs in libc out of 322660 instructions. That is one in > 333 instruction.
Not bad, I agree ! But on the C3, CMOV from/to register is implemented. It's only CMOV from/to memory which has to be emulated, which makes it a lot less common. Anyway that's why we need counters, so that the user knows when he really ought to recompile.
(...) > I don't see any particular subset as being more obvious than the other, > with the *possible* exception of NOPL, simply because NOPL was > undocumented for so long.
well, simply the availability of binaries making use of them. I'm not sure you would find SSE* instructions in your libc where you found the 970 cmov. For NOPL, that's different, I first heard about it in this thread, and my C3 running with the CMOV patch has never complained from missing it :-)
Regards, Willy
| |