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 was not the only manufacturer of this co- processor. Soviet Union produced clones of 8087 FPU. AMD published information about their version of 8087 in one of their databooks, but it's not clear if any AMD co-processors were produced or not. There are 8087 co-processors stamped "IBM", but it seems that IBM didn't manufacture the chips and only re-branded Intel chips.
When they were released the 8087 was hailed as the most complex IC ever. They also dissipated alot of heat, but they were FAST.