Theme 1 – Microcode design and performance gains
Commenters highlighted how the 8087’s microcode enabled dramatic speed‑ups:
- “That's a really vertical microcode. It looks more like a specialized assembly than microcode. … executing one microinstruction per cycle … already provides almost an order of magnitude performance improvement.” – bonzini
- “Yes, it's one microinstruction per cycle, except there is a 1‑cycle delay for branches, adds, and shifts. And some micro‑instructions loop, so they can take a bunch of cycles.” – kens
- “100x speed improvement of math operations by 8087 is not an overestimation. … on my 80286 machine, where it was 3‑second vs 300‑second calculation results.” – garganzol
Theme 2 – Difficulty of targeting x87 for compilers
Several users pointed out why compilers avoided the x87 stack ISA in favor of SSE/AVX:
- “x87 is such a weird architecture … But for a compiler to target, it's just so painful. … There's a reason both CPU and compilers prefer to avoid x87 when possible and use regular SIMD (SSE/AVX) instead.” – cogman10
- “The actual weirdness of x87 … is that the only values you can have on the stack are 80‑bit extended‑precision types … Compilers caused code to have essentially random and largely uncontrollable precision changes … The SSE units having regular scalar proper single and double precision types made it easier for compilers to switch.” – jcranmer
Theme 3 – Historical context: 64‑bit capability and the 80‑bit format
The discussion frequently turned to the origins of the 80‑bit width and early 64‑bit machines:
- “One of the features that was advertised … was the ability to do exact arithmetic on integers up to 2^64, which is possible due to the 64‑bit mantissa used in the 80‑bit format.” – matja
- Debate over the first 64‑bit CPU: “I think the IBM 7030 Stretch CPU (from 1964) would be a likely contender … The Cray‑1 (1976) was probably the first 64‑bit CPU … I forgot about the IBM 7030 Stretch (1961), which was also 64 bits.” – kens, mortja, kragen
- “80‑bit wide registers isn't really arbitrary … the bulk of the floating point number is a 64‑bit significand … 80 bits is a nice integer number of 10 bytes.” – em3rgent0rdr