diff options
author | Michael Shalayeff <mickey@cvs.openbsd.org> | 2001-03-29 03:58:20 +0000 |
---|---|---|
committer | Michael Shalayeff <mickey@cvs.openbsd.org> | 2001-03-29 03:58:20 +0000 |
commit | b7d2cadef3354bbbd97a98d382291d18fce6200c (patch) | |
tree | a5232eeba7a692164b2bedee650cab64a874adda /sys/arch/hppa/spmath/sfdiv.c | |
parent | 8da71daa70fb2878a11a7d02439e45d2f4f59baa (diff) |
big bang
Diffstat (limited to 'sys/arch/hppa/spmath/sfdiv.c')
-rw-r--r-- | sys/arch/hppa/spmath/sfdiv.c | 307 |
1 files changed, 153 insertions, 154 deletions
diff --git a/sys/arch/hppa/spmath/sfdiv.c b/sys/arch/hppa/spmath/sfdiv.c index 9ea439aed50..aa005d2bf02 100644 --- a/sys/arch/hppa/spmath/sfdiv.c +++ b/sys/arch/hppa/spmath/sfdiv.c @@ -1,25 +1,25 @@ -/* $OpenBSD: sfdiv.c,v 1.3 1998/07/02 19:05:56 mickey Exp $ */ +/* $OpenBSD: sfdiv.c,v 1.4 2001/03/29 03:58:19 mickey Exp $ */ /* - * Copyright 1996 1995 by Open Software Foundation, Inc. - * All Rights Reserved - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notice appears in all copies and - * that both the copyright notice and this permission notice appear in - * supporting documentation. - * - * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, - * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * + * Copyright 1996 1995 by Open Software Foundation, Inc. + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appears in all copies and + * that both the copyright notice and this permission notice appear in + * supporting documentation. + * + * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, + * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * */ /* * pmk1.1 @@ -27,15 +27,15 @@ /* * (c) Copyright 1986 HEWLETT-PACKARD COMPANY * - * To anyone who acknowledges that this file is provided "AS IS" + * To anyone who acknowledges that this file is provided "AS IS" * without any express or implied warranty: - * permission to use, copy, modify, and distribute this file - * for any purpose is hereby granted without fee, provided that - * the above copyright notice and this notice appears in all - * copies, and that the name of Hewlett-Packard Company not be - * used in advertising or publicity pertaining to distribution - * of the software without specific, written prior permission. - * Hewlett-Packard Company makes no representations about the + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of Hewlett-Packard Company not be + * used in advertising or publicity pertaining to distribution + * of the software without specific, written prior permission. + * Hewlett-Packard Company makes no representations about the * suitability of this software for any purpose. */ @@ -53,15 +53,15 @@ unsigned int *status; { register unsigned int opnd1, opnd2, opnd3, result; register int dest_exponent, count; - register boolean inexact = FALSE, guardbit = FALSE, stickybit = FALSE; - boolean is_tiny; + register int inexact = FALSE, guardbit = FALSE, stickybit = FALSE; + int is_tiny; opnd1 = *srcptr1; opnd2 = *srcptr2; - /* - * set sign bit of result + /* + * set sign bit of result */ - if (Sgl_sign(opnd1) ^ Sgl_sign(opnd2)) Sgl_setnegativezero(result); + if (Sgl_sign(opnd1) ^ Sgl_sign(opnd2)) Sgl_setnegativezero(result); else Sgl_setzero(result); /* * check first operand for NaN's or infinity @@ -70,55 +70,55 @@ unsigned int *status; if (Sgl_iszero_mantissa(opnd1)) { if (Sgl_isnotnan(opnd2)) { if (Sgl_isinfinity(opnd2)) { - /* - * invalid since both operands - * are infinity + /* + * invalid since both operands + * are infinity */ - if (Is_invalidtrap_enabled()) - return(INVALIDEXCEPTION); - Set_invalidflag(); - Sgl_makequietnan(result); + if (Is_invalidtrap_enabled()) + return(INVALIDEXCEPTION); + Set_invalidflag(); + Sgl_makequietnan(result); *dstptr = result; return(NOEXCEPTION); } /* - * return infinity - */ + * return infinity + */ Sgl_setinfinity_exponentmantissa(result); *dstptr = result; return(NOEXCEPTION); } } else { - /* - * is NaN; signaling or quiet? - */ - if (Sgl_isone_signaling(opnd1)) { - /* trap if INVALIDTRAP enabled */ - if (Is_invalidtrap_enabled()) - return(INVALIDEXCEPTION); - /* make NaN quiet */ - Set_invalidflag(); - Sgl_set_quiet(opnd1); - } - /* - * is second operand a signaling NaN? + /* + * is NaN; signaling or quiet? + */ + if (Sgl_isone_signaling(opnd1)) { + /* trap if INVALIDTRAP enabled */ + if (Is_invalidtrap_enabled()) + return(INVALIDEXCEPTION); + /* make NaN quiet */ + Set_invalidflag(); + Sgl_set_quiet(opnd1); + } + /* + * is second operand a signaling NaN? */ else if (Sgl_is_signalingnan(opnd2)) { - /* trap if INVALIDTRAP enabled */ - if (Is_invalidtrap_enabled()) - return(INVALIDEXCEPTION); - /* make NaN quiet */ - Set_invalidflag(); - Sgl_set_quiet(opnd2); - *dstptr = opnd2; - return(NOEXCEPTION); + /* trap if INVALIDTRAP enabled */ + if (Is_invalidtrap_enabled()) + return(INVALIDEXCEPTION); + /* make NaN quiet */ + Set_invalidflag(); + Sgl_set_quiet(opnd2); + *dstptr = opnd2; + return(NOEXCEPTION); } - /* - * return quiet NaN - */ - *dstptr = opnd1; - return(NOEXCEPTION); + /* + * return quiet NaN + */ + *dstptr = opnd1; + return(NOEXCEPTION); } } /* @@ -133,21 +133,21 @@ unsigned int *status; *dstptr = result; return(NOEXCEPTION); } - /* - * is NaN; signaling or quiet? - */ - if (Sgl_isone_signaling(opnd2)) { - /* trap if INVALIDTRAP enabled */ - if (Is_invalidtrap_enabled()) return(INVALIDEXCEPTION); - /* make NaN quiet */ - Set_invalidflag(); - Sgl_set_quiet(opnd2); - } - /* - * return quiet NaN - */ - *dstptr = opnd2; - return(NOEXCEPTION); + /* + * is NaN; signaling or quiet? + */ + if (Sgl_isone_signaling(opnd2)) { + /* trap if INVALIDTRAP enabled */ + if (Is_invalidtrap_enabled()) return(INVALIDEXCEPTION); + /* make NaN quiet */ + Set_invalidflag(); + Sgl_set_quiet(opnd2); + } + /* + * return quiet NaN + */ + *dstptr = opnd2; + return(NOEXCEPTION); } /* * check for division by zero @@ -156,20 +156,20 @@ unsigned int *status; if (Sgl_iszero_exponentmantissa(opnd1)) { /* invalid since both operands are zero */ if (Is_invalidtrap_enabled()) return(INVALIDEXCEPTION); - Set_invalidflag(); - Sgl_makequietnan(result); + Set_invalidflag(); + Sgl_makequietnan(result); *dstptr = result; return(NOEXCEPTION); } if (Is_divisionbyzerotrap_enabled()) - return(DIVISIONBYZEROEXCEPTION); - Set_divisionbyzeroflag(); - Sgl_setinfinity_exponentmantissa(result); + return(DIVISIONBYZEROEXCEPTION); + Set_divisionbyzeroflag(); + Sgl_setinfinity_exponentmantissa(result); *dstptr = result; return(NOEXCEPTION); } /* - * Generate exponent + * Generate exponent */ dest_exponent = Sgl_exponent(opnd1) - Sgl_exponent(opnd2) + SGL_BIAS; @@ -187,9 +187,9 @@ unsigned int *status; *dstptr = result; return(NOEXCEPTION); } - /* is denormalized; want to normalize */ - Sgl_clear_signexponent(opnd1); - Sgl_leftshiftby1(opnd1); + /* is denormalized; want to normalize */ + Sgl_clear_signexponent(opnd1); + Sgl_leftshiftby1(opnd1); Sgl_normalize(opnd1,dest_exponent); } /* opnd2 needs to have hidden bit set with msb in hidden bit */ @@ -197,9 +197,9 @@ unsigned int *status; Sgl_clear_signexponent_set_hidden(opnd2); } else { - /* is denormalized; want to normalize */ - Sgl_clear_signexponent(opnd2); - Sgl_leftshiftby1(opnd2); + /* is denormalized; want to normalize */ + Sgl_clear_signexponent(opnd2); + Sgl_leftshiftby1(opnd2); while(Sgl_iszero_hiddenhigh7mantissa(opnd2)) { Sgl_leftshiftby8(opnd2); dest_exponent += 8; @@ -256,111 +256,110 @@ unsigned int *status; } inexact = guardbit | stickybit; - /* - * round result + /* + * round result */ if (inexact && (dest_exponent > 0 || Is_underflowtrap_enabled())) { Sgl_clear_signexponent(opnd3); switch (Rounding_mode()) { - case ROUNDPLUS: - if (Sgl_iszero_sign(result)) + case ROUNDPLUS: + if (Sgl_iszero_sign(result)) Sgl_increment_mantissa(opnd3); break; - case ROUNDMINUS: - if (Sgl_isone_sign(result)) + case ROUNDMINUS: + if (Sgl_isone_sign(result)) Sgl_increment_mantissa(opnd3); break; case ROUNDNEAREST: - if (guardbit) { - if (stickybit || Sgl_isone_lowmantissa(opnd3)) - Sgl_increment_mantissa(opnd3); - } + if (guardbit && + (stickybit || Sgl_isone_lowmantissa(opnd3))) + Sgl_increment_mantissa(opnd3); } if (Sgl_isone_hidden(opnd3)) dest_exponent++; } Sgl_set_mantissa(result,opnd3); - /* - * Test for overflow - */ + /* + * Test for overflow + */ if (dest_exponent >= SGL_INFINITY_EXPONENT) { - /* trap if OVERFLOWTRAP enabled */ - if (Is_overflowtrap_enabled()) { - /* - * Adjust bias of result - */ - Sgl_setwrapped_exponent(result,dest_exponent,ovfl); - *dstptr = result; - if (inexact) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION | INEXACTEXCEPTION); - else Set_inexactflag(); + /* trap if OVERFLOWTRAP enabled */ + if (Is_overflowtrap_enabled()) { + /* + * Adjust bias of result + */ + Sgl_setwrapped_exponent(result,dest_exponent,ovfl); + *dstptr = result; + if (inexact) { + if (Is_inexacttrap_enabled()) + return(OVERFLOWEXCEPTION | INEXACTEXCEPTION); + else Set_inexactflag(); } - return(OVERFLOWEXCEPTION); - } + return(OVERFLOWEXCEPTION); + } Set_overflowflag(); - /* set result to infinity or largest number */ + /* set result to infinity or largest number */ Sgl_setoverflow(result); inexact = TRUE; } - /* - * Test for underflow - */ + /* + * Test for underflow + */ else if (dest_exponent <= 0) { - /* trap if UNDERFLOWTRAP enabled */ - if (Is_underflowtrap_enabled()) { - /* - * Adjust bias of result - */ - Sgl_setwrapped_exponent(result,dest_exponent,unfl); - *dstptr = result; - if (inexact) { - if (Is_inexacttrap_enabled()) - return(UNDERFLOWEXCEPTION | INEXACTEXCEPTION); - else Set_inexactflag(); + /* trap if UNDERFLOWTRAP enabled */ + if (Is_underflowtrap_enabled()) { + /* + * Adjust bias of result + */ + Sgl_setwrapped_exponent(result,dest_exponent,unfl); + *dstptr = result; + if (inexact) { + if (Is_inexacttrap_enabled()) + return(UNDERFLOWEXCEPTION | INEXACTEXCEPTION); + else Set_inexactflag(); } - return(UNDERFLOWEXCEPTION); - } + return(UNDERFLOWEXCEPTION); + } /* Determine if should set underflow flag */ is_tiny = TRUE; if (dest_exponent == 0 && inexact) { switch (Rounding_mode()) { - case ROUNDPLUS: + case ROUNDPLUS: if (Sgl_iszero_sign(result)) { Sgl_increment(opnd3); if (Sgl_isone_hiddenoverflow(opnd3)) - is_tiny = FALSE; + is_tiny = FALSE; Sgl_decrement(opnd3); } break; - case ROUNDMINUS: + case ROUNDMINUS: if (Sgl_isone_sign(result)) { Sgl_increment(opnd3); if (Sgl_isone_hiddenoverflow(opnd3)) - is_tiny = FALSE; + is_tiny = FALSE; Sgl_decrement(opnd3); } break; case ROUNDNEAREST: - if (guardbit && (stickybit || + if (guardbit && (stickybit || Sgl_isone_lowmantissa(opnd3))) { - Sgl_increment(opnd3); + Sgl_increment(opnd3); if (Sgl_isone_hiddenoverflow(opnd3)) - is_tiny = FALSE; + is_tiny = FALSE; Sgl_decrement(opnd3); } break; } } - /* - * denormalize result or set to signed zero - */ + /* + * denormalize result or set to signed zero + */ stickybit = inexact; Sgl_denormalize(opnd3,dest_exponent,guardbit,stickybit,inexact); - /* return rounded number */ + /* return rounded number */ if (inexact) { switch (Rounding_mode()) { case ROUNDPLUS: @@ -368,20 +367,20 @@ unsigned int *status; Sgl_increment(opnd3); } break; - case ROUNDMINUS: + case ROUNDMINUS: if (Sgl_isone_sign(result)) { Sgl_increment(opnd3); } break; case ROUNDNEAREST: - if (guardbit && (stickybit || + if (guardbit && (stickybit || Sgl_isone_lowmantissa(opnd3))) { - Sgl_increment(opnd3); + Sgl_increment(opnd3); } break; } - if (is_tiny) Set_underflowflag(); - } + if (is_tiny) Set_underflowflag(); + } Sgl_set_exponentmantissa(result,opnd3); } else Sgl_set_exponent(result,dest_exponent); |