home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sys / intel / 1531 < prev    next >
Encoding:
Internet Message Format  |  1992-08-19  |  59.5 KB

  1. Path: sparky!uunet!kithrup!hoptoad!decwrl!elroy.jpl.nasa.gov!usc!sol.ctr.columbia.edu!ira.uka.de!uka!uka!news
  2. From: S_JUFFA@iravcl.ira.uka.de (|S| Norbert Juffa)
  3. Newsgroups: comp.sys.intel
  4. Subject: What you always wanted to know about math coprocessors for 80x86 1/4
  5. Date: 19 Aug 1992 15:00:08 GMT
  6. Organization: University of Karlsruhe (FRG) - Informatik Rechnerabt.
  7. Lines: 905
  8. Distribution: world
  9. Message-ID: <16tnloINNcqt@iraul1.ira.uka.de>
  10. NNTP-Posting-Host: irav1.ira.uka.de
  11. X-News-Reader: VMS NEWS 1.23
  12.  
  13.  
  14.          WHAT YOU ALWAYS WANTED TO KNOW ABOUT MATH COPROCESSORS
  15.  
  16.  
  17.          This document has been created to provide the net.community
  18.          with some detailed information about mathematical coprocessors
  19.          for the Intel 80x86 CPU family. It may also help to answer
  20.          some of the FAQs (frequently asked questions) about this topic.
  21.          The focus of this document is on 387 compatible chips, but
  22.          there is also some information on the other chips in the 80x87
  23.          family and the Weitek coprocessors. Care was taken to make the
  24.          information included as accurate as possible. If you think you
  25.          have discovered erroneous information in this text, or think
  26.          that a certain detail needs to be clarified, or want to suggest
  27.          additions to this text, feel free to contact me at:
  28.  
  29.          S_JUFFA@IRAVCL.IRA.UKA.DE
  30.  
  31.          or at my snail mail address:
  32.  
  33.          Norbert Juffa
  34.          Wielandtstr. 14
  35.          7500 Karlsruhe 1
  36.          Germany
  37.  
  38.  
  39.          CONTENTS of this document
  40.  
  41.          1) What are math coprocessors?
  42.          2) What applications benefit from using a math coprocessor
  43.          3) Installing a math coprocessor
  44.          4) Description of available math coprocessors, special features,
  45.             available speeds, packaging, power consumption
  46.          5) Price information
  47.          6) How do math coprocessors work
  48.          7) Performance comparison of math coprocessors
  49.          8) Test for IEEE-754 conformance and accuracy of transcendental
  50.             functions for different math coprocessors
  51.          9) References (literature)
  52.          10)Addresses of manufacturers of math coprocessors
  53.          11)Appendix A: Test programs for partial compatibility checks
  54.          12)Appendix B: Benchmark programs TRNSFORM and PEAKFLOP
  55.  
  56.          What are math coprocessors?
  57.  
  58.          A coprocessor in the traditional sense is a processor that extends
  59.          the capabilities of a CPU in a transparent manner. This means that
  60.          from the programmer's view the CPU and coprocessor together look
  61.          like one machine. The 80x87 math coprocessors are typical examples
  62.          of such coprocessors. The 80x86 CPUs (with the exception of the 80486,
  63.          which has a built-in 'coprocessor') can only handle 8, 16, or 32 bit
  64.          integers as their primary data types. However, many applications
  65.          require the use of floating-point numbers. Simply put, use of floating
  66.          point numbers enables one to express not only integers, but also
  67.          fractional values over a wide range. The most common application
  68.          of floating point numbers is in scientific applications, where very
  69.          small (e.g. Planck's constant) and very large numbers (e.g. speed
  70.          of light) have to be expressed. But floating-point numbers are also
  71.          useful for business applications such as computing interest. Since
  72.          the 80x86 CPUs do not support floating-point numbers or operations
  73.          on them directly, they have to be programmed using the CPU's integer
  74.          capabilities. This results in slow computations when floating-point
  75.          numbers are used. This is where the 80x87 coprocessors come in.
  76.          Adding a 80x87 to a 80x86 based system augments the CPU architecture
  77.          with eight floating point registers, five additional data types and
  78.          over 70 additional mnemonics. This greatly enhances the system's
  79.          capability to do floating-point computations, as the coprocessor is
  80.          specifically designed to handle floating-point numbers efficiently.
  81.          Like most things in life, floating-point arithmetic has been
  82.          standardized. The relevant standard, to which I will refer quite
  83.          often in this document, is IEEE-754 Standard for Binary Floating-Point
  84.          Arithmetic [10,11]. The standard specifies numeric formats, value
  85.          sets and how the basic arithmetic (+,-,*,/,sqrt, remainder) has to
  86.          work. All the coprocessors covered in this document claim full or
  87.          at least partial compliance with this standard. When browsing the
  88.          literature for information on math coprocessors, you will also
  89.          encounter quite a few acronyms that refer to them: MCP (Math
  90.          CoProcessor), NDP (Numerical Data Processor), NPX (Numerical
  91.          Processor eXtension), FPU (Floating Point Unit). The latter usually
  92.          refers to the 'built-in coprocessor' of the i486.
  93.  
  94.  
  95.          The only data type the 80x87 coprocessors (and the 80486 floating
  96.          point unit, or FPU) can hold in their registers is an 80-bit long
  97.          floating-point number. This data type (called temporary real or
  98.          double extended precision) can represent numbers which range in
  99.          size between 3.36*10^-4932 and 1.19*10^4932 (3.65*10^-4951 to
  100.          1.19*10^4932 including denormal numbers) where the '^' denotes the
  101.          power operator. For those familiar with floating point formats, this
  102.          format has 64 mantissa bits, 15 exponent bits and 1 sign bit for
  103.          the total of 80 bits. This format provides a precision of about
  104.          19 decimal places. The 80x87 can handle additional data types
  105.          that are converted to/from the internal format upon being loaded/
  106.          stored to/from the coprocessor. These include 16 bit, 32 bit, and
  107.          64 bit integers as well as a 18 digit BCD (binary coded decimal)
  108.          occupying 10 bytes and two additional floating point types. The
  109.          short real data type, also called single precision, has 32 bits
  110.          that split into 23 mantissa bits, 8 exponent bit and a sign
  111.          bit. This format provides a precision of about 6-7 decimal places
  112.          and can represent numbers between 1.17*10^-38 and 3.40*10^38
  113.          (1.40*10^-45 to 3.40*10^38 including denormal numbers). The long
  114.          real, or double precision, data type has 64 bits, consisting of
  115.          52 mantissa bits, 11 exponent bits and the sign bit. It provides
  116.          15-16 decimal digits of precision and can handle numbers from
  117.          2.22*10^-308 to 1.79*10^308 (4.94*10^-324 to 1.79*10^308 including
  118.          denormal numbers).
  119.  
  120.          In addition to load/store the above mentioned operand types, the
  121.          80x87 coprocessors can perform all the basic arithmetic operation
  122.          on floating point numbers. Besides 'knowing' how to add, subtract,
  123.          multiply and divide they can also compare floating-point numbers,
  124.          change the sign, take the square root or absolute value, compute
  125.          the remainder and compute some of the transcendental functions,
  126.          like the logarithm. The eight registers in the 80x87 are organized
  127.          in a stack-like manner which takes some time getting used to if
  128.          one programs the coprocessor directly in assembler. However,
  129.          nowadays the compilers or interpreters for most high level
  130.          languages (HLL) can give the programmer access to the coprocessor's
  131.          data types and use their instructions, so there is not much need
  132.          to worry about the rather unusual architecture of the 80x87.
  133.  
  134.          Strictly speaking, the Weitek Abacus 3167 and 4167 are not
  135.          coprocessors in that they do not transparently extended the
  136.          CPU architecture. Rather they could be described as special
  137.          memory mapped IO-devices. Since the term coprocessor has been
  138.          traditionally used for these chips, they are also called by
  139.          that term in this document. The architecture of the Weitek
  140.          chips differs significantly from the 80x87. The Weitek's register
  141.          file consists of 31 32-bit register, each one capable of holding
  142.          an IEEE single precision number. Pairs of consecutive single
  143.          precision registers can also be used as 64-bit IEEE double
  144.          precision register. Thus there are 15 double precision registers.
  145.          The Weitek register file has the standard organization known from
  146.          other registers files like those in the 80386, not the special
  147.          stack-like organization of the 80x87 coprocessors. The Weitek
  148.          coprocessors have been tuned for maximum performance. Therefore,
  149.          only a small instruction set has been implemented, but each
  150.          instruction executes at a very high speed, usually only a few
  151.          clock cycles each. Instructions available are load/store, add,
  152.          subtract, subtract reverse, multiply, multiply and negate,
  153.          multiply and accumulate, multiply and take absolute value,
  154.          divide reverse, negate, absolute value, compare/test, convert
  155.          fix/float, and square root. Note that the Weitek Abacus does not
  156.          support a double extended format, has no built-in transcendental
  157.          functions, and does not support denormals. The ressources required
  158.          to implement such features have instead been devoted to implement
  159.          the basic arithmetic operations as fast as possible. While the
  160.          80x87 coprocessors perform all internal calculations in double
  161.          extended precision and therefore have about the same performance
  162.          for single and double precision calculations, the Weitek features
  163.          explicitly single and double precision operations. For applications
  164.          that require only single precision the Weitek provides additional
  165.          performance that way, as single precision operations are about
  166.          twice as fast as their double precision counterparts. Since the
  167.          Weitek Abacus has more registers than the 80x87 coprocessors,
  168.          values can be kept in registers more often and have to be loaded
  169.          from memory less frequently. This also leads to a performance gain.
  170.          To the CPU, the Weitek Abacus looks like a 64 kB block of memory
  171.          starting at physical address 0C0000000h. Every address in this
  172.          range corresponds to a coprocessor instruction. Accessing a
  173.          specified memory location within this block with the 386/486's
  174.          MOV instruction causes the corresponding instruction to be executed.
  175.          The instructions have been assigned to memory locations in such a
  176.          way that loads to consecutive coprocessor registers can make use
  177.          of the 386/486 MOVS string instruction. The memory mapped interface
  178.          of the Weitek coprocessors is much faster than the IO-oriented
  179.          protocol that is used to couple the CPU to the 80287 and 80387
  180.          coprocessors. The Weitek's starting address of 0C0000000h is only
  181.          a physical address. The Weitek's memory block can be assigned to
  182.          any logical address using the MMU (memory managment unit) in the
  183.          386/486's protected and virtual modes. This also means that the
  184.          Weitek Abacus 3167 and 4167 can *not* be used in the real mode
  185.          of those processors, since the physical start address of the
  186.          Weitek coprocessors is not within the 1 MByte address range and
  187.          the MMU is inoperable in real mode. However, DOS programs can
  188.          make use of the Weitek Abacus by using a DOS extender or a
  189.          memory manager like EMM386 that run in protected/virtual mode
  190.          themself and can therefore map the Weitek's memory block to
  191.          any desired location in the 1 MByte address range. Typically
  192.          the FS segment register is then set up to point to the Weitek's
  193.          memory block. The Weitek Abacus 3167 and 4167 are also supported
  194.          by the UNIX operating system [33].
  195.  
  196.  
  197.          What applications will profit by using a math coprocessor?
  198.  
  199.          According to the Intel 387DX User's Guide, there are more
  200.          than 2100 commercial programs that can make use of a 387
  201.          compatible coprocessor. Every program that uses floating
  202.          point arithmetic somewhere and supports a 80x87 coprocessor
  203.          can gain speed by installing a coprocessor. However, the
  204.          speedup will vary from program to program and even within
  205.          the same program depending on how computation intensive the
  206.          program or operation within the program is. Typical applications
  207.          that benefit from the use of a 80x87 coprocessor are:
  208.          - Business graphics programs, such as Arts&Letters, Freedom
  209.            of Press, and Freelance
  210.          - Spreadsheet programs like Lotus 1-2-3, Excel, Quattro, and
  211.            Wingz
  212.          - CAD programs such as AutoCAD, VersaCAD, and GenericCAD
  213.          - Database programs such as dBase IV, FoxBase, and Paradox
  214.          - Math and Science programs such as Mathematica, TKSolver,
  215.            SPSS/PC, and Statgraphics
  216.          Note that for spreadsheets and databases, a coprocessor
  217.          only helps if some kind of floating point computations
  218.          is performed. This is true more often for spreadsheets
  219.          than for data bases. Also note that the speed of many
  220.          programs depends quite heavily on the speed of the graphics
  221.          adaptor (CAD) or the disk performance (databases), so the
  222.          computational performance is only a (small) part of the
  223.          total performance of the application. There are some programs
  224.          that won't run without a coprocessor, among them AutoCAD R10
  225.          and later and Mathematica. GUIs (graphical user interfaces)
  226.          such as Windows do *not* gain additional speed from using a
  227.          *mathematical* coprocessor, since their graphics operations
  228.          only use integer arithmetic. They benefit from a graphics
  229.          board with a graphical 'coprocessor' though that speed up
  230.          certain common operations such as BitBlt or line drawing.
  231.          However, applications running under Windows may take advantage
  232.          of a math coprocessor, e.g. Excel.
  233.  
  234.          While support for 80x87 coprocessors is very common in application
  235.          programs, the Weitek Abacus coprocessors do not enjoy such wide
  236.          spread support. Due to their high price, only a few high-end PCs
  237.          have been equipped with Weitek coprocessors. Therefore most of
  238.          the programs that support these coprocessors are also high-end
  239.          products like AutoCAD and Versacad-386.
  240.  
  241.  
  242.  
  243.          Installing a math coprocessor
  244.  
  245.          Usually, installing a coprocessor doesn't pose much of a problem,
  246.          as every coprocessor comes with installation instructions and a
  247.          diagnostic disk that lets you check for correct operation once
  248.          the coprocessor has been installed. In addition, the user manuals
  249.          of most computers have a section on coprocessor installation.
  250.  
  251.          1) Make sure to get the right coprocessor for your system. An
  252.             8087 works together with 8086, 8088, V20, and V30 CPUs. An
  253.             80287, 287XL or compatible works together with a 80286 CPU.
  254.             There are also some old 386 motherboards that accept a 80287
  255.             coprocessor, but they usually also provide a socket for the
  256.             387 and I recommend to get a 387 then for use with these
  257.             systems. A 80387, 387DX or compatible coprocessor is for 386
  258.             based systems, as is the Intel RapidCAD. 387 coprocessors
  259.             also work together with Cyrix' 486DLC CPU which despite its
  260.             name does not include an FPU. Similarly, the 387SX or compatible
  261.             coprocessor go into systems whose CPU is a 386SX or Cyrix 486SLC.
  262.             The Weitek Abacus 3167 works with a 386 CPU but requires a
  263.             121-pin EMC socket in your system. Some computers, such as
  264.             IBM's PS/2s don't have this socket. The Weitek Abacus 4167
  265.             works together with the 486 and requires the appropriate
  266.             142-pin socket to be present.
  267.             Always install a coprocessor that is rated at the same speed
  268.             as the CPU. That is, for a 40 MHz 386 system using AMD Am386-40,
  269.             install a coprocessor rated for 40 MHz such as a Cyrix 83D87-40,
  270.             IIT 3C87-40, or ULSI 83C87-40. Running a coprocessor above its
  271.             specified frequency rating may cause it to produce false results,
  272.             which you might fail to recognize as such. I have personally
  273.             experienced this problem with a Cyrix 83D87-33 that I tried
  274.             to push to 40 MHz. It passed all the diagnostic benchmarks
  275.             on the Cyrix diagnostic disk and the tests of some commercial
  276.             system test programs. However, I found it to fail the
  277.             Whetstone and Linpack benchmarks, which include accuracy
  278.             checks. So although there is usually no problem with overheating
  279.             when pushing a coprocessor over the specified maximum frequency
  280.             rating, be warned that operation of a coprocessor above the
  281.             maximum ratings stated by the manufacturer makes operation
  282.             unreliable. Some 386 boards allow the coprocessor to be clocked
  283.             differently than the CPU. This is called asynchronous operation
  284.             and allows you to run the coprocessor at 33 MHz while the CPU
  285.             runs at 40 MHz, for example. Please note that only the Intel
  286.             80387 and 387DX support asynchronous operation. The 387 'clones'
  287.             from Cyrix, IIT and ULSI always run at the full speed of the
  288.             CPU, even if you have set up your motherboard for asynchronous
  289.             operation.
  290.          2) Once you've got the correct coprocessor for your system you
  291.             can start the actual installation process:
  292.             - turn off the computer's power switch and unplug the power
  293.               cord from the wall outlet
  294.             - remove the cover of your computer
  295.             - locate the math coprocessor socket. This socket is located
  296.               right next to the CPU, which can be identified by the
  297.               printing on top of the chip. The CPU usually is one of the
  298.               biggest chips on the board. The 8078 and 80287 DIL sockets
  299.               are rectangular sockets with 20 pin holes on each of the
  300.               longer sides. The 387SX PLCC socket is a square socket that
  301.               has 17 vertical connector strips on the 'wall' of each side.
  302.               The 387 PGA socket is square and has two rows of pin holes
  303.               on each side. The EMC socket is similar but has three rows
  304.               of holes on each side. The PGA socket for the Weitek 4167 is
  305.               also square with three rows of holes on each side. If the CPU
  306.               and coprocessor socket is on a separate card rather than on
  307.               the motherboard (typical for modular systems), you have to
  308.               remove the card and place it on a flat and hard surface free
  309.               of static electricity. If you can't find the math coprocessor
  310.               socket, consult your owner's manual or your computer dealer.
  311.               If you want to install the Intel RapidCAD in a 386 system,
  312.               you will have to remove the 386 CPU before starting to
  313.               install the two RapiCAD chips. Intel provides an easy to
  314.               use chip extractor and a storage box for the 386 chip for
  315.               this purpose. Just follow the instructions in the RapidCad's
  316.               installation manual.
  317.             - Be sure you are properly grounded before you remove the
  318.               coprocessor from its antistatic box. Static electricity
  319.               can damage the coprocessor. Make sure you do not touch
  320.               the pins.
  321.             - Check if all pins are straight and not bend. If you find
  322.               bent pins, carefully straigthen them with needle-nose pliers
  323.               or tweezers.
  324.             - Match the coprocessors orientation with the orientation
  325.               of the socket. 8087 and 287 coprocessors have anotch on one
  326.               the shorter sides of their rectangular DIL package that should
  327.               be matched with the notch of the coprocessor socket. Usually
  328.               the 286 CPU and the 287 coprocessor are placed alongside each
  329.               other and both have the same orientation, that is their
  330.               respective notches point in the same direction. 387SX
  331.               coprocessors feature a white dot or similar mark that matches
  332.               with some sort of marking on the socket. 387 coprocessors
  333.               have a beveled corner that is also marked with a white dot
  334.               or similar marking. This should be matched with the beveled
  335.               or otherwise marked corner of the socket. If you install
  336.               a 387 coprocessor in an EMC socket, leave one row of holes
  337.               free on each side. Correct orientation of the coprocessor
  338.               is absolutely essential, because if you insert it the
  339.               wrong way it may be damaged. If you have found the correct
  340.               orientation, make sure all pins are correctly aligned with
  341.               their respective holes. Press firmly and evenly on the chip.
  342.               You may have to press hard to seat the coprocessor all the
  343.               way. Make sure your motherboard does not bend more than
  344.               slighty under the insertion pressure. Otherwise it may
  345.               develop cracks that could damage the signal lines on the
  346.               board. For 8087, 287, and 387 coprocessors it is normal that
  347.               the coprocessor does not go all the way in but about one
  348.               millimeter (1/25 inch) of space is left between the socket
  349.               and the bottom of the coprocessor chip. This enables the
  350.               insertion of a extraction device should it become necessary
  351.               to remove the coprocessor. Note that the construction of the
  352.               387SX's PLCC socket makes it next to impossible to remove
  353.               the coprocessor once fully inserted, as the top of the chip
  354.               is level with the socket's 'walls' then.
  355.          3) Check your computer's manual for the jumpers and/or switches
  356.             you may have to set for coprocessor operation.
  357.             Put the cover back on the system unit and reconnect the power.
  358.             Turn on your computer. Depending on your BIOS, you may have
  359.             to run the setup or configuration program to register the
  360.             coprocessor.
  361.             Use the diagnostic disk included with your coprocessor to
  362.             check for correct operation of your coprocessor.
  363.  
  364.  
  365.  
  366.          Coprocessor emulations
  367.  
  368.          In the absence of a coprocessor, floating-point calculations
  369.          are most often performed by a software package that simulates
  370.          the operations of the coprocessor. Such a program is called
  371.          a coprocessor emulator. Simulating the coprocessor has the
  372.          advantage that identical code can be generated for the
  373.          coprocessor and the emulator so that it is possible to write
  374.          programs that run on both, systems with and systems without a
  375.          coprocessor. Wether the program is to use the coprocessor or the
  376.          emulator can then be decided at run-time by checking if a
  377.          math coprocessor is present in the system.
  378.  
  379.          Two approaches to interface an 80x87 emulator to programs are
  380.          common. While the first method works with all 80x86 processors,
  381.          the second only works from the 80286 on. The first method makes
  382.          use of the fact that all coprocessor instruction start with the
  383.          same five bit pattern 11011. Thus the first byte of a coprocessor
  384.          instruction will be in the range D8-DF hexadecimal. In addition,
  385.          coprocessor instructions usually are preceeded by a WAIT instruction
  386.          (opcode 9Bh) which is one byte long (the reason for doing this
  387.          is described in a later chapter on the operation of the 80x87).
  388.          One common approach is to replace the WAIT instruction and the
  389.          first byte of the coprocessor instruction with one of eight
  390.          interrupts; the remaining bytes of the coprocessor instruction
  391.          are left unchanged. Interrupts 34 to 3B hexadecimal are used for
  392.          this emulation technique. Note that the sequences 9B D8 .. 9B DF
  393.          can be easily converted to the interrupt instructions CD 34 .. CD 3B
  394.          by simple addition and subtraction of constants. The compiler or
  395.          assembler produces code that contains the appropriate interrupt
  396.          calls instead of the coprocessor instructions. If a coprocessor
  397.          is detected at run-time, the emulator interrupts point to a short
  398.          routine that converts the interrupts calls back to coprocessor
  399.          instructions (self modifying code). If no coprocessor is found
  400.          the interrupts point to an emulation package which examines the
  401.          byte(s) following the interrupt intruction to determine what
  402.          operation to perform. The method described is used by the compilers
  403.          from Microsoft and Borland for example. It works with every
  404.          80x86 CPU from the 8086/8088 on.
  405.          The second method to interface an emulator is only available on
  406.          286 and 386 machines. If the emulation bit in the machine status
  407.          word of these processors is set, the processors will generate an
  408.          interrupt 7 whenever a coprocessor instruction is encountered.
  409.          The interrupt vector then points to an emulation package that
  410.          decodes the instruction and performs the desired operation. This
  411.          approach has the advantage that the emulator doesn't have to be
  412.          included in the program code, but can be loaded as a TSR or
  413.          device driver once and then used by every program that requires
  414.          a coprocessor. Emulation via interrupt 7 is transparent, which
  415.          means that programs containing coprocessor instructions execute
  416.          just like a coprocessor was present, only slower. This approach
  417.          is taken by the public domain EM87 emulator and the commercial
  418.          Franke387 emulator, for example. Even programs that require a
  419.          coprocessor to run like AutoCAD are 'fooled' to believe that
  420.          a coprocessor is present with emulators using INT 7.
  421.  
  422.          The size of the emulator used by TP 6.0 is about 9.5 kB, EM87
  423.          occupies about 15.8 kB as a TSR, and Franke387 uses about 13.4 kByte
  424.          as a device driver. Note that Franke387 and especially EM87 model
  425.          a real coprocessor much more closely than Turbo Pascal's emulator
  426.          does. In particular, EM87 supports denormal numbers, precision
  427.          control, and rounding control. The emulator in TP 6.0 does not
  428.          implement these features. The version of Franke387 tested (V2.4)
  429.          supports denormals in single and double precision, but not
  430.          double extended precision. It supports precision control, but
  431.          not rounding control. Intel's E80287 is supposed to be an 100%
  432.          exact emulation of the 80287 coprocessor [44]. Generally, the
  433.          more closely a real coprocessor is modelled by the emulator,
  434.          the slower does the emulator run and the larger the code for the
  435.          emulator is.
  436.  
  437.  
  438.          Relative execution times of coprocessor vs. software emulators
  439.          for particular coprocessor instructions
  440.  
  441.                         Intel 387DX    TP 6.0 Emulator   EM87 Emulator
  442.  
  443.          FADD ST, ST(0)       1              26                104
  444.          FDIV [DWord]         1              22                136
  445.          FXAM                 1              10                 73
  446.          FYL2X                1              33                102
  447.          FPATAN               1              36                110
  448.          F2XM1                1              38                110
  449.  
  450.  
  451.          The following table is an excerpt from [44]:
  452.  
  453.                         Intel 80287  Intel E80287 Emulator
  454.  
  455.          FADD ST, ST(0)       1              42
  456.          FDIV [DWord]         1             266
  457.          FXAM                 1             139
  458.          FYL2X                1              99
  459.          FPATAN               1             153
  460.          F2XM1                1              41
  461.  
  462.  
  463.  
  464.          The following has been adapted from [43] and merged with my own
  465.          data:
  466.  
  467.                         Intel 8087  TP 6.0 Emul. (8086)  Intel Emul. (8086)
  468.  
  469.          FADD ST, ST(0)       1              20                 94
  470.          FDIV [DWord]         1              22                 82
  471.          FPTAN                1              18                144
  472.          F2XM1                1               6                171
  473.          FSQRT                1              44                544
  474.  
  475.  
  476.  
  477.          One of the reasons emulators are so slow is that they are
  478.          often designed to run with every CPU from the 8086/8088 on.
  479.          This is the case with the emulators built into the compiler
  480.          libraries of the Turbo Pascal 6.0 (also used by Turbo C/C++)
  481.          and Microsoft C 6.0 compiler (probably also used in other
  482.          Microsoft products) and is also true for the EM87 emulator
  483.          in the public domain. By using code that can run on a 8086/8088,
  484.          these emulators forego the speed advantage offered by the
  485.          additional instructions and architectureal enhancements (such
  486.          as 32-bit registers) of the more advanced Intel 80x86 processors.
  487.          A notable exception is the Franke387 emulator, a commercial
  488.          emulator that is also sold as shareware. It uses 386 specific
  489.          32-bit code and only runs on 386/386SX computers.
  490.  
  491.          Besides being slow, coprocessor emulators have other drawbacks
  492.          compared with real coprocessors. Most of the emulators do not
  493.          support the additional instructions that the 387 compatible
  494.          coprocessors offer over the 80287. Often, some of the low-level
  495.          stack-manipulating instructions like FDECSTP are not emulated.
  496.          The coprocessor status register is not or only partially emulated.
  497.          Some emulators do not conform to the IEEE-754 standard in their
  498.          implementation of the basic arithmetic functions, while the
  499.          coprocessors do. Also, they sometimes lack the support for
  500.          denormals (a special class of floating point numbers) although
  501.          it is required by the standard. Not all the 80x87 emulators
  502.          support rounding control (a feature required by IEEE-754) and
  503.          precision control (a feature of the 80x87 coprocessor). Most of
  504.          the ommisions are aimed at making the emulator faster and smaller.
  505.          Because of the shortcomings of coprocessor emulators, a real
  506.          coprocessor is a must for anybody planning to do some serious
  507.          computations. At todays prices, this shouldn't pose much of a
  508.          problem to anybody.
  509.  
  510.  
  511.          Available coprocessors, CPU+FPU as of 08-10-92:
  512.  
  513.  
  514.          Intel 8087     [43] was the first coprocessor that Intel brought
  515.                         out for the 80x86 family. It was introduced in 1980
  516.                         and therefore does not have full compatibility with
  517.                         the IEEE-754 standard for floating point arithmetic,
  518.                         which was finally released in 1985. It complements
  519.                         the 8088 and 8086 CPUs and can also be interfaced
  520.                         to the 80188 and 80186 processors. It comes in a
  521.                         40 pin CERDIP (ceramic dual inline package). It
  522.                         is available in 5 MHz, 8 Mhz (8087-2), and 10 MHz
  523.                         (8087-1) versions. The 8087 is implemented using
  524.                         NMOS. Power consumption is rated at max. 2400 mW [42].
  525.                         A neat trick to enhance the processing power of the
  526.                         8087 for computations that use only the basic
  527.                         arithmetic operations (+,-,*,/) and do not require
  528.                         high precision is to set the precision control to
  529.                         single precision. This gives one a performance
  530.                         increase of up to 20%. For details about programming
  531.                         the precision control, see program PCtrl in appendix A.
  532.          Intel 80187    is a rather new coprocessor designed to support the
  533.                         80C186 embedded controller. It was introduced in 1989
  534.                         and implements the complete 80387 instruction set.
  535.                         It is available in a 40 pin CERDIP (ceramic dual
  536.                         inline package) and a 44 pin PLCC (plastic leaded
  537.                         chip carrier) for 12.5 and 16 MHz operation. Power
  538.                         consumption is rated at max. 675 mW for the
  539.                         12.5 MHz version and max. 780 mW for the 16 MHz
  540.                         version [37].
  541.          Intel 80287    [44] is the original Intel coprocessor for the 80286
  542.                         and was introduced in 1983. It uses the same execution
  543.                         unit as the 8087 and therefore has the same speed
  544.                         (sometimes slower due to additional overhead in CPU
  545.                         coprocessor communication). As the 8087, it does not
  546.                         provide full compatibility with the IEEE-754 floating
  547.                         point standard released in 1985. It was manufactured
  548.                         in NMOS technology. There are 6 MHz, 8 MHz, and 10
  549.                         MHz versions. The chip comes in a 40 pin CERDIP
  550.                         (ceramic dual inline package). Power consumption can
  551.                         be estimated to be the same as that for the 8087,
  552.                         which is max. 2400 mW. The 80287 has been replaced
  553.                         in the Intel 80x87 family with its successor, the
  554.                         Intel 287XL, which has been introduced in 1990. The
  555.                         287XL is done in CMOS. It is based on the 387 core
  556.                         and therefore much faster than the 80287. There may
  557.                         still be a few of the old 80287 chips on the market
  558.                         though.
  559.          Intel 80287XL  is the second generation 287 introduced by Intel
  560.                         in 1990. Since it is based on the 387 core, it
  561.                         features full IEEE 754 compatibility and faster
  562.                         execution of coprocessor instructions. Intel claims
  563.                         about 50% faster operation than the 80287 for typical
  564.                         benchmark test such as Whetstone [45]. Comparison
  565.                         with benchmark results for the AMD 80C287, which is
  566.                         identical to the Intel 80287, support this claim [1].
  567.                         The Intel 287XL performed 66% faster than the AMD
  568.                         80C287 on the fractal benchmark and 66% faster on
  569.                         the Whetstone benchmark in these tests. Whetstone
  570.                         results from [46] show the Intel 287XL at 12.5 MHz
  571.                         to perform 552 kWhets/sec as opposed to the AMD's
  572.                         80C287 289 kWhets/sec, a 91% performance increase.
  573.                         A benchmark using the MathPak program showed the
  574.                         Intel 287XL to be 59% faster than the Intel 80287
  575.                         (6.9 sec. vs. 11.0 sec.) [26]. Since the 287XL
  576.                         has all the additional instructions and enhancements
  577.                         of a 387, most software automatically identifies
  578.                         it as an 80387 compatible coprocessors and makes
  579.                         use of the extra features available like the FSIN
  580.                         and FCOS instructions. The 287XL is done in CMOS
  581.                         and therefore uses less power than the older 80287,
  582.                         which was done in NMOS. The 287XL is rated for
  583.                         speeds of up to 12.5 MHz. At 12.5 MHz, the power
  584.                         consumption is rated at max. 675 mW, about 1/4 of
  585.                         the 80287 power consumption. The 287XL comes in
  586.                         either a 40 pin CERDIP (ceramic dual inline package)
  587.                         or a 44 pin PLCC (plastic leaded chip carrier). The
  588.                         latter version is called the 287XLT and intended
  589.                         mainly for laptop use.
  590.          AMD 80C287     is an exact clone of the old Intel 80287 that was
  591.                         brought to market by AMD in 1989. It contains the
  592.                         original microcode of the 80287 and is therefore
  593.                         100% compatible with this chip. However, as the name
  594.                         indicates, the 80C287 is manufactured in CMOS and
  595.                         therefore uses less power than an equivalent Intel
  596.                         80287. At 12.5 Mhz, its power consumption is rated
  597.                         at max. 625 mW or slightly less than that of the
  598.                         Intel 80287XL [27]. There is also another version
  599.                         called AMD 80EC287 that uses an 'intelligent' power
  600.                         save feature to reduce the power consumption below
  601.                         80C287 levels. Tests at 10.7 MHz show typical power
  602.                         consumption for the 80EC287 to be at 30mW, compared
  603.                         to 150 mW for the AMD 80C287, 300 mW for the Intel
  604.                         287XL and 1500 mW for the Intel 80287 [57]. The
  605.                         80EC287 is therefore ideally suited for low power
  606.                         laptop systems. The AMD 80C287 is available in speeds
  607.                         of 10, 12, and 16 MHz. I have only seen it being
  608.                         offered in 10 MHz and 12 MHz versions though. At
  609.                         about US$ 50, it is the cheapest coprocessor available.
  610.                         Note that it provides less performance than the
  611.                         newer Intel 287XL (see above for details). The AMD
  612.                         80C287 is available in 40 pin ceramic and plastic
  613.                         DIPs (dual inline package) and as 44 pin PLCC
  614.                         (plastic leaded chip carrier). Due to recent legal
  615.                         battles with Intel over the right to use the 287
  616.                         microcode, which AMD lost, AMD may have to discontinue
  617.                         this product (disclaimer: I am not a legal expert).
  618.          Cyrix 82S87    was developed from the Cyrix 83D87, Cyrix' 387 'clone'
  619.                         and has been available since 1991. It implements the
  620.                         full 387 instruction set. It totally complies with
  621.                         the IEEE-754 standard for floating point arithmetic
  622.                         and features nearly total compatibility with Intel's
  623.                         coprocessors. It implements the transcendental
  624.                         functions with the same degree of accuracy and the
  625.                         superior speed of the Cyrix 83D87. This makes the
  626.                         Cyrix 82S87 the fastest [1] and most accurate 287
  627.                         compatible coprocessor available. Documentation by
  628.                         Cyrix [46] rates the 82S87 at 730 kWhets/sec for a
  629.                         12.5 MHz system, while the Intel 287XL performs only
  630.                         552 kWhets/sec. The 82S87 is a fully static CMOS
  631.                         design with very low power requirements that can
  632.                         run at speeds of 6 to 20 MHz. Cyrix documentation
  633.                         shows the 82S87 to consume about the same amount of
  634.                         power as the AMD 80C287 (see above). The 82S87 comes
  635.                         in a 40 pin DIP or a 44 pin PLCC (plastic leaded
  636.                         chip carrier) compatible with the pinout of the
  637.                         Intel 287XLT and ideally suited for laptop use.
  638.          IIT 2C87       was the first 287 clone available. It was introduced
  639.                         to the market in 1989. It has about the same speed
  640.                         as the Intel 287XL [1]. The 2C87 implements the
  641.                         full 387 instruction set [38]. Tests I ran on the
  642.                         3C87 seem to indicate that it is not fully compatible
  643.                         with the IEEE-754 standard for floating-point
  644.                         arithmetic (see below for details), so it can be
  645.                         assumed that the 2C87 also fails these test as it
  646.                         presumably uses the same core as the 3C87. The IIT
  647.                         2C87 provides extra functions not available on any
  648.                         other 287 chip [38]. It has 24 user accessible
  649.                         floating-point registers organized into three register
  650.                         banks. Additional instructions (FSBP0, FSBP1, FSBP2)
  651.                         allow switching from one bank to another. Transfers
  652.                         between registers in different banks are not
  653.                         supported however, so this feature by itself
  654.                         is of limited usefulness. Also there seems to
  655.                         be only one status register (containing the
  656.                         stack top pointer), so it has to be manually
  657.                         loaded and stored when switching between banks
  658.                         with a different number of registers in use [40].
  659.                         The register bank's main purpose is to aid the
  660.                         fourth additional instruction the 2C87 has
  661.                         (F4X4), which does a full multiply of a 4x4 matrix
  662.                         by a 4x1 vector, an operation common in 3D graphics
  663.                         applications [39]. The built-in matrix multiply
  664.                         speeds this operations up by a factor of 6 to 8
  665.                         compared with a programmed solution according to
  666.                         the manufacturer [38]. Tests show the speed-up
  667.                         to be indeed in this range [40]. For the 3C87, I
  668.                         measured the execution time of F4X4 to be about
  669.                         280 clock cycles, the execution time on the 2C87
  670.                         should be somewhat bigger. I estimate it to be
  671.                         around 310 clock cycles due to the higher CPU-NDP
  672.                         communication overhead in instruction execution in
  673.                         286/287 systems (~45-50 clock cycles) compared with
  674.                         386/387 systems (~16-20 clock cycles). As useful as
  675.                         the F4X4 instruction may seem, there are only very
  676.                         few applications that make use of this feature if
  677.                         a IIT coprocessor is detected at run time, among
  678.                         them Schroff Development's Silver Screen and
  679.                         Evolution Computing's Fast-CAD 3-D [25]. The 2C87
  680.                         is available for speeds of up to 20 MHz. It is
  681.                         implemented in an advanced CMOS process and has
  682.                         therefore a low power consumption of typically
  683.                         about 500 mW [38].
  684.          Intel 387      was the first generation of coprocessors for the
  685.                         Intel 386. It was introduced in 1986, about one
  686.                         year after introduction of the 80386. Early 386
  687.                         system were therefore equipped with a 80287 and a
  688.                         80387 socket. The 80386 works together with the
  689.                         80287 but the numerical performance is hardly
  690.                         adequate for such a system. The 80387 has since
  691.                         been superseeded by the Intel 387DX introduced
  692.                         by a quiet change in 1990. You might find it
  693.                         when aquiring an old 386 machine, though. The
  694.                         80387 is about 20% slower than the newer 387DX
  695.                         (see the paragraph below for detailed information).
  696.                         Like the other 387 coprocessors, the 80387 is packaged
  697.                         in a 68-pin ceramic PGA. The Intel 80387 is
  698.                         manufactured using Intel's older 1.5 micron CHMOS
  699.                         III technology that has moderate power requirements.
  700.                         Power consumption at 16 MHz is max. 1250 mW (750 mW
  701.                         typical), at 20 MHz it is max. 1550 mW (950 mW
  702.                         typical), and at 25 MHz it is max. 1950 mW (1250 mW
  703.                         typical) [60].
  704.          Intel 387DX    is the second generation Intel 387 that was quietly
  705.                         introduced in 1989. This version is done in a more
  706.                         advanced CMOS process than the 80387 that enables
  707.                         the coprocessor to run at a maximum frequency of 33
  708.                         MHz, while the 80387 had a maximum frequency of 25 MHz.
  709.                         The 387DX is about 20% faster than the 80387 on the
  710.                         average for the same clock frequency. For a 386/387
  711.                         system operating at 29 MHz the Whetstone benchmark
  712.                         compiled with the highly optimizing Metaware High-C
  713.                         V1.6 runs at 2377 kWhetstones/sec for the 80387 and
  714.                         at 2693 kWhetstones/sec for the 387DX, a 13% increase.
  715.                         In a fractal calculation programmed in assembly
  716.                         language, the 387DX performance was 28% higher than
  717.                         the performance of the 80387. The transcendental
  718.                         functions have also sped up from the 80387 to the
  719.                         387DX. In the Savage benchmark compiled with the
  720.                         Metaware High-C V1.6 optimizing compiler and running
  721.                         on a 29 MHz system, the 80387 evaluated 77600 function
  722.                         calls/second, while the 387DX evaluated 97800 function
  723.                         calls/second, a 26% increase [7]. Some instructions
  724.                         have been sped up a lot more more than the average
  725.                         20%. For example the FBSTP instruction has been sped
  726.                         up by a factor of 3.64. The Intel 387DX (and its
  727.                         predecessor 80387) are the only 387 coprocessors
  728.                         that support asynchronous operation of CPU and NDP.
  729.                         The 387 consists of a bus interface unit and a
  730.                         numerical execution unit. The bus interface unit
  731.                         always runs at the speed of the CPU clock (CPUCLK2).
  732.                         If the CKM (ClocK Mode) pin of the 387 is strapped
  733.                         to Vcc, the numerical execution unit runs at the
  734.                         same speed as the bus interface unit. If CKM is tied
  735.                         to ground, the numerical execution unit runs at the
  736.                         speed provided by the NUMCLK2 input. The ratio of
  737.                         NUMCLK2 (coprocessor clock) to CPUCLK2 (CPU clock)
  738.                         must lie within the range 10:16 to 14:10. For example,
  739.                         for a 20 MHz 386, the Intel 387DX could be clocked
  740.                         from 12.5 MHz to 28 MHz via the NUMCLK2 input. On
  741.                         the Cyrix 83D87, Cyrix 387+, ULSI 83C87, and the IIT
  742.                         387, the CKM pin is not connected. These coprocessors
  743.                         always run at the speed of the CPU. The Intel 387DX
  744.                         is manufactured using Intel's advanced low power
  745.                         CHMOS IV technology. Power consumption at 20 MHz is
  746.                         max. 900 mW (525 mW typical), at 25 MHz it is max.
  747.                         1050 mW (625 mW typical), and at 33 MHz it is 1250
  748.                         mW (750mW typical) [59].
  749.          Intel 387SX    is the coprocessor for the Intel 386SX. The 386SX is
  750.                         an Intel 386 with a 16-bit data path. This reduces
  751.                         somewhat the costs to build a complete system as
  752.                         compared to a full 32-bit design required by the
  753.                         80386DX. The 386SX main purpose was to replace the
  754.                         80286 CPU, which Intel subsequently stopped producing.
  755.                         Due to the 16-bit data path, the 386SX is slower than
  756.                         the 386DX and offers about the same speed as a 80286
  757.                         at the same clock frequency for 16-bit applications.
  758.                         As the 386SX is a complete 80386, it offers also the
  759.                         possibility to run 32-bit applications and supports
  760.                         the virtual 8086 mode used for example by Windows'
  761.                         enhanced mode. The 387SX has all the features the
  762.                         Intel 387DX offers, including the ability for
  763.                         asynchronous operation of CPU and coprocessor
  764.                         (see the above paragraph on the Intel 387DX for
  765.                         details). Due to the 16 bit data path between the
  766.                         CPU and the coprocessor, the 387SX is a bit slower
  767.                         than a 387DX operating at the same frequency. The
  768.                         387SX comes in a 68-pin PLCC (pastic leaded chip
  769.                         carrier) package and is available in 16 Mhz and 20
  770.                         MHz versions. Coprocessors for faster 386SX systems
  771.                         based on the Am386SX CPU are available from IIT,
  772.                         Cyrix, and ULSI. Power consumption for the 387SX
  773.                         at 16 MHz is max. 1250 mW (740 mW typical), for
  774.                         the 20 MHz version it is max. 1500 mW (1000 mW
  775.                         typical) [62].
  776.          IIT 3C87       came out in 1989 at about the same time as the
  777.                         Cyrix 83D87. Both coprocessors are faster than
  778.                         Intel's 387DX coprocessor. Tests I ran with the
  779.                         IEEETEST program show that the 3C87 is not fully
  780.                         compatible with the IEEE-754 standard for
  781.                         floating-point arithmetic although the manufacturer
  782.                         claims differently. It is well possible that the
  783.                         reported errors are due to personal interpretations
  784.                         of the standard by the program's author that have
  785.                         been incorporated into IEEETEST and that the
  786.                         standard also supports the different interpretation
  787.                         chosen by IIT. On the other hand, the IEEE test
  788.                         vectors incorporated into IEEETEST have become
  789.                         somewhat of an industry standard [66] and Intel's
  790.                         387, 486, and RapidCAD chips pass the test without
  791.                         a single failure, so the fact that the IIT 3C87
  792.                         fails some of the tests indicates that it is not
  793.                         fully compatible with the Intel 387 coprocessor.
  794.                         My tests also show that the IIT 3C87 does not
  795.                         support denormals for the double extended format.
  796.                         It is not entirely clear wether the IEEE standard
  797.                         mandates support for extended precision denormals,
  798.                         as the IEEE-754 document explicitly only mentions
  799.                         single and double precision denormals. Missing
  800.                         support for denormals is not a critical issue with
  801.                         most applications but there are some programs for
  802.                         which support of denormals is quite helpful, if not
  803.                         important [41]. Anyhow, failure of the 3C87 to
  804.                         support extended precision denormal numbers is an
  805.                         incompatibility with the Intel 387 and 486. The 3C87
  806.                         provides extra functions not available on any other
  807.                         387 chip [38]. It has 24 user accessible floating-point
  808.                         registers organized into three register banks.
  809.                         Additional instructions (FSBP0, FSBP1, FSBP2)
  810.                         allow switching from one bank to another. Transfers
  811.                         between registers in different banks are not
  812.                         supported however, so this feature by itself
  813.                         is of limited usefulness. Also there seems to
  814.                         be only one status register (containing the
  815.                         stack top pointer), so it has to be manually
  816.                         loaded and stored when switching between banks
  817.                         with a different number of registers in use [40].
  818.                         The register banks main purpose is to aid the
  819.                         fourth additional instruction the 3C87 has
  820.                         (F4X4), which does a full multiply of a 4x4 matrix
  821.                         by a 4x1 vector, an operation common in 3D graphics
  822.                         applications [39]. I measured this instruction to
  823.                         execute in about 280 clock cycles, during which
  824.                         time it executes 16 multiplications and 12 additions.
  825.                         The built-in matrix multiply speeds the matrix by
  826.                         vector multiply up by a factor of 3 compared
  827.                         with a programmed solution according to IIT [39].
  828.                         The results for my own TRNSFORM benchmark support
  829.                         this claim (see results below), showing a performance
  830.                         increase by a factor of about 2.5. This makes
  831.                         matrix multiplies on the IIT 3C87 nearly as fast as
  832.                         on an Intel 486 at the same clock frequency. However,
  833.                         there are only very few applications that make use
  834.                         of this feature if a IIT 3C87 is detected at run time,
  835.                         among them Schroff Development's Silver Screen and
  836.                         Evolution Computing's Fast-CAD 3-D [25]. Like the
  837.                         387 'clones' from Cyrix and ULSI, the 3C87 does not
  838.                         support asynchronous operation of the CPU and the
  839.                         coprocessor. The 3C87 always runs at the full speed
  840.                         of the CPU. The 3C87 is implemented in an advanced
  841.                         CMOS process and has low power requirements of
  842.                         typically about 600 mW. It is available in 16, 20,
  843.                         25, 33, and 40 MHz versions.
  844.          IIT 3C87SX     is the version of the IIT 3C87 that is intended for
  845.                         use with Intel's 386SX or AMD's Am386SX CPU. It is
  846.                         functionally equivalent to the IIT3C87. Due to the
  847.                         16-bit data path between the CPU and the coprocessor
  848.                         in a 386SX based system, coprocessor instructions
  849.                         will execute somewhat slower than on the 3C87. The
  850.                         IIT 3C87SX is the only 387SX coprocessor that is
  851.                         offered at speeds of 16, 20, 25, and 33 MHz right
  852.                         now. I have read that Cyrix has also annouced a
  853.                         83S87-33, but haven't seen it being offered yet.
  854.                         The 3C87SX is packaged in a 68-pin PLCC.
  855.          Cyrix 83D87    was introduced in 1989, only shortly after the
  856.                         coprocessors from IIT. It has been the fastest
  857.                         387 compatible coprocessor in several benchmark
  858.                         comparisons [1,7,68,69]. It also came out as the
  859.                         fastest coprocessor in my own tests (see benchmark
  860.                         results below). Although the Cyrix 83D87 provides
  861.                         up to 50% more performance than the Intel 387DX
  862.                         in benchmarks comparisons, the speed advantage
  863.                         over other 387 compatible coprocessors in real
  864.                         applications is usually much smaller. For example,
  865.                         in a test using the program 3D-Studio, the Cyrix
  866.                         83D87 was 6% faster than the Intel 387DX [1].
  867.                         Besides being the fastest 387 coprocessor, the
  868.                         83D87 also offers the most accurate transcendental
  869.                         functions results of all coprocessors tested (see
  870.                         test results below). Unlike the Intel coprocessors,
  871.                         which use the CORDIC [18,19] algorithm to compute
  872.                         the transcendental functions, Cyrix uses rational
  873.                         approximations to the functions. In the past the
  874.                         CORDIC method has been popular since it requires
  875.                         only shifts and adds which makes it easy to implement.
  876.                         It is also reasonably fast. Recently, the cost for
  877.                         the implementation for fast floating-point multipliers
  878.                         has dropped significantly due to the availablity of
  879.                         VLSI, making the use of rational approximations
  880.                         superior to CORDIC for the generation of transcendental
  881.                         functions [61]. The Cyrix 83D87 uses a very fast
  882.                         array multiplier, making its transcendental functions
  883.                         faster than those of any other 387 compatible
  884.                         coprocessor. It also uses 75 bit for the mantissa
  885.                         for intermediate calculations (as opposed to 68 bits
  886.                         on other coprocessors), making its transcendental
  887.                         functions more accurate than those of any other
  888.                         coprocessor or FPU (see results below). The 83D87
  889.                         and its successor, the 387+ are the 387 'clones'
  890.                         with the highest degree of compatibility. There
  891.                         are only very few SW and HW incompatibilties with
  892.                         the Intel 387DX. These have been documented by
  893.                         Cyrix [12]. The software differences are caused
  894.                         by some bugs present in the 387DX that Cyrix fixed
  895.                         for the 83D87. Unlike the Intel 387DX, the 83D87
  896.                         (and all other 387 'clones' as well) does not support
  897.                         asynchronous operation of CPU and coprocessor. There
  898.                         have also been problems in the past with the CPU -
  899.                         coprocessor communication, causing the 83D87 to
  900.                         hang on some machines. The reason was that Cyrix
  901.                         shaved off a wait state in the communication protocol,
  902.                         which caused a communications breakdown between the
  903.                         CPU and the 83D87 for some systems running at 25 MHz
  904.                         or faster. One notable example of this behavior was
  905.                         the Intel 302 board. The problem is only rarely
  906.                         encountered with the current generation of 386
  907.                         motherboards. It is possible that the problem has
  908.                         been entirely eliminated in the 387+, the sucessor
  909.                         to the 83D87. To reduce power consumption the 83D87
  910.                         features advanced power saving features. Those
  911.                         portions of the coprocessor that are not needed
  912.                         are automatically shut down. If no coprocessor
  913.                         instructions are being executed, all parts except
  914.                         the bus interface unit are shut down [12]. Maximal
  915.                         power consumption of the Cyrix 83D87 at 33 MHz is
  916.                         1900 mW, typical power consumption at this clock
  917.                         frequency is 500 mW [15].
  918.