Microsoft KB Archive/35434

= Clearing the Coprocessor Status Word from FORTRAN =

Article ID: 35434

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 4.0
 * Microsoft FORTRAN Compiler 4.01
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN PowerStation 1.0 Standard Edition
 * Microsoft Fortran PowerStation 1.0a for MS-DOS
 * Microsoft FORTRAN PowerStation 32
 * Microsoft FORTRAN PowerStation 32

-



This article was previously published under Q35434



SUMMARY
Page 17 of the Microsoft FORTRAN &quot;Advanced Topics&quot; manual for version 5.1 includes the following statement:

When one of the floating-point exception conditions given in Table 1.2 above occurs, the appropriate bit in the status word is set. This flag remains set until you clear it.

While the GETSTATUSFPQQ and SSWRQQ subroutines returns the value of the status word, there is no FORTRAN function or subroutine that will modify the status word.



MORE INFORMATION
Under normal circumstances, when the math coprocessor generates a floating-point exception, an exception handler is called which can clear the status word. If it is necessary to reset the control word at another time, the FORTRAN run-time library provides the C functions _clear87 and _fpreset which an application can access using an INTERFACE statement. The _clear87 function returns the value of the status word before changing the status word; the _fpreset subroutine resets the status word and returns no value.

The _clear87 and _fpreset functions might be useful when an application spawns another application that might perform a floating- point operation. When the spawned application completes execution, call the _clear87 or _fpreset function to return the floating-point environment to its default state. The following code example demonstrates using the _clear87 and _fpreset functions from FORTRAN.

NOTE: The sample code below will not link using FORTRAN's 32-bit linker due to a change in libc.lib. It no longer contains the function __clear87. Under the 32-bit FORTRAN compilers, the C function __clear87 is replaced by __clearfp.

Sample Code
C Compiler options required: None

INTERFACE TO SUBROUTINE FPRESET[C, ALIAS:'__FPRESET'] END INTERFACE TO INTEGER*2 FUNCTION CLEAR87[C, ALIAS:'__CLEAR87'] END

INTEGER*2 CLEAR87

PRINT '(1X, A, Z)', 'INITIAL STATUS WORD:        ', CLEAR87 X = 1.E-38 X = X / 100. PRINT '(1X, A, Z)', 'STATUS WORD AFTER UNDERFLOW: ', CLEAR87 CALL FPRESET PRINT '(1X, A, Z)', 'STATUS WORD AFTER _FPRESET: ', CLEAR87 END

Additional query words: 1.00 4.00 4.01 4.10 5.00 5.10 8087 80287 80387 80487 status exception kbinf

Keywords: kblangfortran KB35434

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.