Hi,
Currently Chrome on x86-64 requires SSE3 as a minimum (and we still have some
very few systems without SSSE3). I'd like to additionally require CMPXCHG16B
support (128-bit compare-and-swap) for a lock-free hash table; Windows has
required it since 2013 (with Windows 8.1), with newer versions simply
requiring SSE4.2, which is much stricter. (Our 64-bit Arm targets, e.g.
on macOS, already have similar support AFAIK. For 32-bit systems,
the compiler simulates it using a lock.)
There are a few very old CPUs that support SSE3 but not CMPXCHG16B;
in particular, some very early Opterons and Socket 775-based Pentium 4s.
Core 2 CPUs (so that includes all Intel Macs) _do_ support it, although
some old microcode versions misidentify CPUID bits if you actually try
to go check.
So we're talking about basically some very old Linux CPUs being left out;
anything else is already on the unsupported train. The exact fraction is
unknown since we don't have telemetry for this, but we know it's bounded
upwards by the amount of systems reporting as SSE3 in UMA (all SSSE3-capable
CPUs support the instruction). Does anyone have strong opinions?
/* Steinar */
--
Homepage:
https://www.sesse.net/