diff --git a/share/man/man3/Makefile b/share/man/man3/Makefile index 0aa0bbc8260b..a0d6b40e7189 100644 --- a/share/man/man3/Makefile +++ b/share/man/man3/Makefile @@ -1,7 +1,11 @@ # @(#)Makefile 8.2 (Berkeley) 12/13/93 -MAN3= assert.3 bitstring.3 end.3 intro.3 queue.3 stdarg.3 -MLINKS+=end.3 edata.3 end.3 etext.3 moncontrol.3 monstartup.3 +MAN3= assert.3 bitstring.3 end.3 fpgetround.3 intro.3 queue.3 stdarg.3 +MLINKS+=end.3 edata.3 end.3 etext.3 +MLINKS+=fpgetround.3 fpsetround.3 fpgetround.3 fpgetmask.3 +MLINKS+=fpgetround.3 fpsetmask.3 fpgetround.3 fpgetsticky.3 +MLINKS+=fpgetround.3 fpsetsticky.3 fpgetround.3 fpresetsticky.3 +MLINKS+=moncontrol.3 monstartup.3 MLINKS+=queue.3 list_entry.3 queue.3 list_head.3 queue.3 list_init.3 MLINKS+=queue.3 list_insert_after.3 queue.3 list_insert_head.3 MLINKS+=queue.3 list_remove.3 queue.3 tailq_entry.3 queue.3 tailq_head.3 diff --git a/share/man/man3/fpgetround.3 b/share/man/man3/fpgetround.3 new file mode 100644 index 000000000000..30365afa35eb --- /dev/null +++ b/share/man/man3/fpgetround.3 @@ -0,0 +1,138 @@ +.\" Copyright (c) 1993 Andrew Moore, Talke Studio +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)fpgetround.3 1.0 (Berkeley) 9/23/93 +.\" +.Dd August 23, 1993 +.Dt FPGETROUND 3 +.Os +.Sh NAME +.Nm fpgetround , +.Nm fpsetround , +.Nm fpgetmask , +.Nm fpsetmask , +.Nm fpgetsticky , +.Nm fpresetsticky +.Nd IEEE floating point interface +.Sh SYNOPSIS +.Fd #include +.Ft typedef enum { +.br +.Ft FP_RN, +.Li /* round to nearest */ +.br +.Ft FP_RM, +.Li /* round to minus infinity */ +.br +.Ft FP_RP, +.Li /* round to plus inifinity */ +.br +.Ft FP_RZ, +.Li /* truncate */ +.br +.Ft } fp_rnd; +.Pp +.Ft fp_rnd +.Fn fpgetround "" +.Ft fp_rnd +.Fn fpsetround "fp_rnd direction" +.Fd #define fp_except int +.Fd #define FP_X_INV 0x01 /* invalid */ +.Fd #define FP_X_OFL 0x08 /* overflow */ +.Fd #define FP_X_UFL 0x10 /* underflow */ +.Fd #define FP_X_DZ 0x04 /* divide-by-zero */ +.Fd #define FP_X_IMP 0x20 /* loss of precision */ +.Fd #define FP_X_DNML 0x02 /* denormal */ +.Ft fp_except +.Fn fpgetmask "" +.Ft fp_except +.Fn fpsetmask "fp_except mask" +.Ft fp_except +.Fn fpgetsticky "" +.Ft fp_except +.Fn fpresetsticky "fp_except sticky" +.Sh DESCRIPTION +When a floating point exception is detected, the exception sticky flag is +set and the exception mask is tested. If the mask is set, then a trap +occurs. These routines allow both setting the floating point exception +masks, and resetting the exception sticky flags after an exception is +detected. In addition, they allow setting the floating point rounding mode. +.Pp +The +.Fn fpgetround +function +returns the current floating point rounding mode. +.Pp +The +.Fn fpsetround +function +sets the floating point rounding mode and returns +the previous mode. +.Pp +The +.Fn fpgetmask +function +returns the current floating point exception masks. +.Pp +The +.Fn fpsetmask +function +sets the floating point exception masks and returns the +previous masks. +.Pp +The +.Fn fpgetsticky +function +returns the current floating point sticky flags. +.Pp +The +.Fn fpresetsticky +function +clears the floating point sticky flags and returns +the previous flags. +.Pp +Sample code which prevents a trap on divide-by-zero: +.Bd -literal -offset indent +fpsetmask(~FP_X_DZ); +a = 1.0; +b = 0; +c = a / b; +fpresetsticky(FP_X_DZ); +fpsetmask(FP_X_DZ); +.Ed +.Sh SEE ALSO +.Xr isnan 3 +.Sh CAVEAT +After a floating point exception and before a mask is set, the sticky +flags must be reset. If another exception occurs before the sticky +flags are reset, then a wrong exception type may be signaled. +.Sh HISTORY +These routines are based on SysV/386 routines of the same name.