Intel 8087 is a numeric co-processor for Intel 8086,
8088, 80186 and
80188 processors. The 8087 has 8 80-bit
general registers implemented as a stack. All floating point operations are
performed with data from the stack (usually the data at the top of the stack)
and data from external memory. Effective address calculation for external
memory accesses is performed by the main processor. Both the main processor
and the 8087 decode floating-point instructions
(they all start from ESCAPE bit pattern). If the decoded instruction references the
memory then the main processor calculates memory effective address and
performs "dummy read" of memory. The Intel 8087 captures the memory address
and, possibly, data, and uses the captured address to read more data or
write data to memory. After that the main processor may continue to
execute integer instructions without waiting until the 8087 completes
execution of the FP instruction. To synchronize execution of multiple
FP instructions the main processor used WAIT (FWAIT) instruction to wait
until the co-processor becomes available.
Because the integer instructions and floating-point
instructions could be executed in parallel, it was common to see integer
and FP instructions intermixed in x86 programs.
Intel 8087 co-processor supports integer, BCD, single and double precision
floating-point numbers, as well as extended precision (80-bit)
floating-point numbers. When the 8087 loads data from memory it always
converts it internally to extended-precision number, and all further
calculations are performed with this number. This is why switching
from double to single-precision number or from 64-bit integer to
32-bit or 16-bit integer numbers doesn't provide any significant
performance boost.
Intel was not the only manufacturer of this co-processor. AMD and Cyrix
Corporation both produced 8087 co-processors. Soviet Union produced
clones of 8087 FPU. There are 8087 co-processors stamped "IBM",
but it seems that IBM Corporation didn't manufacture the chips and
only re-branded Intel chips.
|