Intel 80287, 80286 manual Error Synchronization, Synchronizing References to Shared Data

Models: 80287 80286

1 515
Download 515 pages 45.04 Kb
Page 442
Image 442

PROGRAMMING NUMERIC APPLICATIONS

Case 1:

 

Case 2:

 

M0 V

I ,

F IL D

 

F I LD

I

FWAIT

 

 

 

M0 V

I., 5

MOV

AX,I

F 1ST P

 

FISTP

I

FWAIT

 

 

 

MOV

AX,I

Figure 2-9. Synchronizing References to Shared Data

The data-synchronization function of any FWAIT or numeric instruction must be well-documented, as shown in figure 2-10. Otherwise, a change to the program at a later time may remove the synchronizing numeric instruction and cause program failure.

High-level languages automatically establish data synchronization and manage it, but there may be applications where a high-level language may not be appropriate.

For assembly-language programmers, automatic data synchronization can be obtained using the assem- bler, although concurrency of execution is lost as a result. To perform automatic data synchronization, the assembler can be changed to always place a WAIT instruction after the ESCAPE instruction. Figure 2-11 shows an example of how to change the ASM286 Code Macro for the FIST instruction to automatically place aWAIT instruction after the ESCAPE instruction. This Code Macro is included in the ASM286 source module. The price paid for this automatic data synchronization is the lack of any possible concurrency between the CPU and NPX.

Error Synchronization

Almost any numeric instruction can, under the wrong circumstances, produce a numeric error. Concur- rent execution of the CPU and NPX requires synchronization for these errors just as it does for data references and numeric instructions. In fact, the synchronization required for data and instructions automatically provides error synchronization.

However, incorrect data or instruction synchronization may not be discovered until a numeric error occurs. A further complication is that a programmer may not expect his numeric program to cause numeric errors, but in some systems, they may regularly happen. To better understand these points, let's look at what can happen when the NPX detects an error.

T!!e NPX t:'~_!! l'"rfnrm one of two things when a numeric exception occurs:

The NPX can provide a default fix-up for selected numeric errors. Programs can mask individual error types to indicate that the NPX should generate a safe, reasonable result whenever that error occurs. The default error fix-up activity is treated by the NPX as part of the instruction causing the error; no external indication of the error is given. When errors are detected, a flag is set in the numeric status register, but no information regarding where or when is available. If the NPX performs its default action for all errors, then error synchronization is never exercised. This is no reason to ignore error synchronization, however.

2-50

Page 442
Image 442
Intel 80287, 80286 manual Error Synchronization, Synchronizing References to Shared Data