Theme 1 – 64‑bit compilers lean on SSE/AVX, not x87
"I would add than SSE1 and SSE2 are now required parts of AMD64 instruction set. All 64‑bit PC processors are required to support them both. For that reason, modern compilers are ignoring x87 FPU when building 64‑bit binaries. Instead, they compile all float and double arithmetic into SSE1 and SSE2 instructions, respectively." – const‑me
Theme 2 – Default floating‑point types still map to x87
"Compilers like GCC and Clang treat C's
long doubletype by default as 80‑bit wide and result in x87 generated code. This can be overridden to use either 64‑bit or 128‑bit floating point values." – icelusxl
Theme 3 – MMX/SSE adoption was fraught with technical pain
"MMX optimization practically required assembly language… Visual C++ 6 would emit code that was two‑thirds register‑to‑register moves, with values being unnecessarily moved between two registers between each ALU op. The worst case … the
_mm_set_epi8()intrinsic … generated ~80 instructions instead of a single constant load. … The latency of MMX instructions … and the EMMS instruction was needed to avoid NaNs and stalls." – ack_complete