80387(HW) 19 June 1992 80387(HW) Name 80387 - math coprocessor Description The 80387 is the Intel math co-processor for the 80386. The kernel tests for the presence of an 80387 at startup. If your system has an 80387, you may have to set a switch on the main system board in order to enable 80387 interrupts. Check your hardware manual to determine the proper switch and setting. If your system does not have an 80387, or the switch is on, the kernel will run a set of emu- lator routines which are much slower. The C compiler available with the development system generates the appropriate 80387 opcodes. C routines compiled with this compiler have run as much as 200 times as fast as the emulated code. In particular, the standard math library routines run considerably faster if you have an 80387. The overflow, division by zero, and invalid operand exceptions return a SIGFPE signal. This signal can be caught. The rest of the 80387 float- ing point exceptions (underflow, denormalized operand, and precision error) are masked. Notes The emulator returns meaningless information on divide by zero. There is no obvious way to tell which 80387 exception generated the SIGFPE. Because of design defects in Intel's 80386 chip (B1 stepping), the Intel 80387 math co-processor may not operate correctly in some computers. The problem causes the CPU to hang when DMA/paging/coprocessor accesses are occurring. A workaround for this problem has been engineered that is engaged by using a special string at boot time: Boot : unix a31 This workaround may not work on all machines; some hardware is designed such that it will not work. If it is successful, the following message is displayed: _________________________________________________________________________ A31 CPU bug workaround in effect _________________________________________________________________________ If unsuccessful, the following is displayed: _________________________________________________________________________ A31 CPU bug workaround not possible for this machine _________________________________________________________________________ The bootstring may also be added to the end of the default bootstring (DEFBOOTSTR) found in /etc/default/boot. If you cannot use this workaround, you have two options. You may replace the 386 chip with a newer release of the 386 chip (a D-step part), or you can bypass the 387 chip by adding the ignorefpu keyword in your boot com- mand as follows: Boot : unix ignorefpu This means that the operating system will not use the 387 chip, but you need not remove it physically; the coprocessor is still usable from DOS. To automatically bypass the 387 chip every time you boot your system, add the ignorefpu keyword to the /etc/default/boot file. See boot(HW) for more information. For further information, see the Intel publication: Intel 80387 Programmer's Reference Manual.