80x87 Math Coprocessors

From Lo-tech Wiki
Revision as of 11:11, 21 April 2021 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The 80x87 family of Math Coprocessors are typical examples of numeric coprocessors that were common in the 1980's.

The 80x86 CPUs with which they were paired, up until the arrival of the 80486DX with its built-in FPU, could handle only 8, 16, or 32 bit integers as their basic data types. Since many PC-based applications required the use floating-point numbers (such as computing interest, and in the geometric calculations inherent in CAD/CAM processing), significant system performance gains were possible by adding an optional coprocessor.

The 80x87 coprocessors added eight floating-point registers, five additional data types and over 70 additional instructions, all designed to deal directly with floating-point numbers as a basic data type. This effectively removed the 'penalty' for floating-point computations and increased overall system performance for applications that depended on these calculations.

In addition to being able to quickly execute load/store operations on floating-point numbers, the 80x87 coprocessors would directly perform all the basic arithmetic operation on them. Besides "knowing" how to add, subtract, multiply and divide floating-point numbers, they can also operate on them to perform comparisons, square roots, transcendental functions (such as logarithms and sine/cosine/tangent), and compute their absolute value and remainder.

Intel Chips

8087

The Intel 8087 was the first math coprocessor for 16-bit processors designed by Intel (the I8231 was older but designed for the 8-bit Intel 8080). It could be used with Intel 8088 or 8086 CPUs, and could also be used with NEC V20 and NEC V30 CPUs.

80187

Intel didn't release an '80187' with the 80186 and 80188 CPUs, instead depending on the Intel 8087. However a CMOS based Intel 80C187 was released much later, with the 80C186. It could not be used with either the earlier 801866/80188 CPUs, nor the 8-bit bus CMOS varients such as the 80C188.

80287

The Intel 80287 was for Intel 80286 and 80386 CPUs. Intel (and its competitors) later introduced an 80287XL, which was essentially an 80387SX with a 287 pinout. The 80287XL contained an internal 3/2 multiplier so that motherboards which ran the coprocessor at 2/3 CPU speed could instead run the FPU at the same speed of the CPU.

The 80287 and 80287XL were the only coprocessors available for the 80386 at its launch, until the introduction of the Intel 80387 in 1987.


80387

The Intel 80387 was the first Intel coprocessor to be fully compliant with the IEEE 754 standard. Released in 1987, some two years after the 386 chip, the i387 included much improved speed over Intel's previous 8087/80287 coprocessors, and improved the characteristics of trigonometric functions (the 80287 limited the argument range to plus or minus 45 degrees).

The i387 was compatible only with the standard i386 chip, which with a seperate 80387SX version being required for use with the low-cost i386SX (because of its 16-bit data bus).

80487

The Intel i487SX was marketed as a floating point unit coprocessor for Intel 486SX machines, but actually contained a full-blown 486DX implementation and when installed disabled the main CPU and took over all CPU operations. This was necessary to avoid a deep performance penalty if the FPU did not have access to the 486 caches.

Relative Performance

x87 Performance FADD FMUL FDIV FXCH FCOM FSQRT FPTAN FPATAN Max Clock Peak FMUL/sec Relative 5 MHz 8087§ FMUL
8087 70~100 90~145 193~203 10~15 40~50 180~186 30~540 250~800 5→10 MHz 34~55K → 100~111K 1.0 → 2.0 times as fast
80287 (original) 70~100 90~145 193~203 10~15 40~50 180~186 30~540 250~800 6→12 MHz 41~66K → 83~133K 1.2 → 2.4 times as fast
80387 (and later 287 models) 23~34 29~57 88~91 18 24 122~129 191~497 314~487 16→33 MHz 280~552K → 579~1100K approx 10 → 20 × as fast
80486 (or 80487) 8~20 16 73 4 4 83~87 200~273 218~303 16→50 MHz 1.0M → 3.1M approx 18 → 56 × as fast
Pentium 1~3 1~3 39 1 (0*) 1~4 70 17~173 19~134 60→300 MHz 20~60M → 100~300M approx 1100 → 5400 ×
Pentium Pro 1~3 2~5 16~56 1 (0*) 1 28~68 todo todo 150→200 MHz 30~75M → 40~100M approx 1400 → 1800 ×
Pentium II / III 1~3 2~5 17~38 1 (0*) 1 27~50 todo todo 233→1400 MHz 47~116M → 280~700M approx 2100 → 13000 ×
Pentium 4 1~5 2~7 20~43 1 (0*) todo 20~43 todo todo 1.3→3.8 GHz 186~650M → 0.543~1.90G approx 11000 → 34000 ×

See Also