Intel 8087

[4][5][6] The purpose of the chip was to speed up floating-point arithmetic operations, such as addition, subtraction, multiplication, division, and square root.

[8] Sales of the 8087 received a significant boost when a coprocessor socket was included on the 1981 IBM PC motherboard.

Intel had previously manufactured the 8231 Arithmetic processing unit, and the 8232 Floating Point Processor.

[11] The 8087 was initially conceived by Bill Pohlman, the engineering manager at Intel who oversaw the development of the 8086 chip.

Bruce Ravenel was assigned as architect, and John Palmer was hired to be co-architect and mathematician for the project.

Palmer credited William Kahan's writings on floating point as a significant influence on their design.

[13] Robert Koehler and John Bayliss were also awarded a patent for the technique where some instructions with a particular bit pattern were offloaded to the coprocessor.

Most 8087 assembly mnemonics begin with F, such as FADD, FMUL, FCOM and so on, making them easily distinguishable from 8086 instructions.

It also ran quite hot, forcing Intel to use a more expensive ceramic package for improved thermal dissipation.

If the operand to be read was longer than one word, the 8087 would also copy the address from the address bus; then, after completion of the data read cycle driven by the CPU, the 8087 would immediately use DMA to take control of the bus and transfer the additional bytes of the operand itself.

At the time when the 8086, which defined the coprocessor interface, was introduced, IC packages with more than 40 pins were rare, expensive, and suffered from problems such as excessive lead capacitance, a major limiting factor for signalling speeds.

The 8087 provided two basic 32/64-bit floating-point data types and an additional extended 80-bit internal temporary format (that could also be stored in memory) to improve accuracy over large and complex calculations.

[18] These two methods of handling infinity were incorporated into the draft version of the IEEE 754 floating-point standard.

The 8087 differed from subsequent Intel coprocessors in that it was directly connected to the address and data buses.

The 8087 looked for instructions that commenced with the "11011" sequence and acted on them, immediately requesting DMA from the main CPU as necessary to access memory operands longer than one word (16 bits), then immediately releasing bus control back to the main CPU.

Intel's later coprocessors did not connect to the buses in the same way, but received instructions through the main processor I/O ports.

This yielded an execution time penalty, but the potential crash problem was avoided because the main processor would ignore the instruction if the coprocessor refused to accept it.

The assembler would automatically insert an FWAIT instruction after every coprocessor opcode, forcing the 8086/8 to halt execution until the 8087 signalled that it had finished.

Intel 8087 die
Simplified 8087 microarchitecture