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/fcnvfx.c | |
parent | 8da71daa70fb2878a11a7d02439e45d2f4f59baa (diff) |
big bang
Diffstat (limited to 'sys/arch/hppa/spmath/fcnvfx.c')
-rw-r--r-- | sys/arch/hppa/spmath/fcnvfx.c | 322 |
1 files changed, 161 insertions, 161 deletions
diff --git a/sys/arch/hppa/spmath/fcnvfx.c b/sys/arch/hppa/spmath/fcnvfx.c index 3a5e86a9198..c646d8dffaa 100644 --- a/sys/arch/hppa/spmath/fcnvfx.c +++ b/sys/arch/hppa/spmath/fcnvfx.c @@ -1,25 +1,25 @@ -/* $OpenBSD: fcnvfx.c,v 1.4 2000/01/11 08:18:43 mickey Exp $ */ +/* $OpenBSD: fcnvfx.c,v 1.5 2001/03/29 03:58:18 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. */ @@ -45,7 +45,7 @@ #include "../spmath/cnv_float.h" /* - * Single Floating-point to Single Fixed-point + * Single Floating-point to Single Fixed-point */ /*ARGSUSED*/ int @@ -57,23 +57,23 @@ unsigned int *status; { register unsigned int src, temp; register int src_exponent, result; - register boolean inexact = FALSE; + register int inexact = FALSE; src = *srcptr; src_exponent = Sgl_exponent(src) - SGL_BIAS; - /* + /* * Test for overflow */ if (src_exponent > SGL_FX_MAX_EXP) { /* check for MININT */ - if ((src_exponent > SGL_FX_MAX_EXP + 1) || + if ((src_exponent > SGL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - /* - * Since source is a number which cannot be + /* + * Since source is a number which cannot be * represented in fixed-point format, return * largest (or smallest) fixed-point number. - */ + */ Sgl_return_overflow(src,dstptr); } } @@ -100,13 +100,13 @@ unsigned int *status; break; case ROUNDNEAREST: if (Sgl_isone_roundbit(src,src_exponent)) { - if (Sgl_isone_stickybit(src,src_exponent) + if (Sgl_isone_stickybit(src,src_exponent) || (Sgl_isone_lowmantissa(temp))) { - if (Sgl_iszero_sign(src)) result++; - else result--; + if (Sgl_iszero_sign(src)) result++; + else result--; } } - } + } } } else { @@ -125,11 +125,11 @@ unsigned int *status; break; case ROUNDNEAREST: if (src_exponent == -1) - if (Sgl_isnotzero_mantissa(src)) { - if (Sgl_iszero_sign(src)) result++; - else result--; + if (Sgl_isnotzero_mantissa(src)) { + if (Sgl_iszero_sign(src)) result++; + else result--; } - } + } } } *dstptr = result; @@ -141,7 +141,7 @@ unsigned int *status; } /* - * Single Floating-point to Double Fixed-point + * Single Floating-point to Double Fixed-point */ /*ARGSUSED*/ int @@ -153,23 +153,23 @@ unsigned int *status; { register int src_exponent, resultp1; register unsigned int src, temp, resultp2; - register boolean inexact = FALSE; + register int inexact = FALSE; src = *srcptr; src_exponent = Sgl_exponent(src) - SGL_BIAS; - /* + /* * Test for overflow */ if (src_exponent > DBL_FX_MAX_EXP) { /* check for MININT */ - if ((src_exponent > DBL_FX_MAX_EXP + 1) || + if ((src_exponent > DBL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - /* - * Since source is a number which cannot be + /* + * Since source is a number which cannot be * represented in fixed-point format, return * largest (or smallest) fixed-point number. - */ + */ Sgl_return_overflow_dbl(src,dstptr); } Dint_set_minint(resultp1,resultp2); @@ -190,57 +190,57 @@ unsigned int *status; /* check for inexact */ if (Sgl_isinexact_to_fix(src,src_exponent)) { inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Sgl_iszero_sign(src)) { + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Sgl_iszero_sign(src)) { Dint_increment(resultp1,resultp2); } - break; - case ROUNDMINUS: - if (Sgl_isone_sign(src)) { + break; + case ROUNDMINUS: + if (Sgl_isone_sign(src)) { Dint_decrement(resultp1,resultp2); } - break; - case ROUNDNEAREST: - if (Sgl_isone_roundbit(src,src_exponent)) - if (Sgl_isone_stickybit(src,src_exponent) || + break; + case ROUNDNEAREST: + if (Sgl_isone_roundbit(src,src_exponent)) + if (Sgl_isone_stickybit(src,src_exponent) || (Dint_isone_lowp2(resultp2))) { if (Sgl_iszero_sign(src)) { Dint_increment(resultp1,resultp2); } - else { + else { Dint_decrement(resultp1,resultp2); } } - } - } - } + } + } + } else { Dint_setzero(resultp1,resultp2); /* check for inexact */ if (Sgl_isnotzero_exponentmantissa(src)) { inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Sgl_iszero_sign(src)) { + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Sgl_iszero_sign(src)) { Dint_increment(resultp1,resultp2); } - break; - case ROUNDMINUS: - if (Sgl_isone_sign(src)) { + break; + case ROUNDMINUS: + if (Sgl_isone_sign(src)) { Dint_decrement(resultp1,resultp2); } - break; - case ROUNDNEAREST: - if (src_exponent == -1) - if (Sgl_isnotzero_mantissa(src)) { - if (Sgl_iszero_sign(src)) { + break; + case ROUNDNEAREST: + if (src_exponent == -1) + if (Sgl_isnotzero_mantissa(src)) { + if (Sgl_iszero_sign(src)) { Dint_increment(resultp1,resultp2); } - else { + else { Dint_decrement(resultp1,resultp2); } } @@ -256,7 +256,7 @@ unsigned int *status; } /* - * Double Floating-point to Single Fixed-point + * Double Floating-point to Single Fixed-point */ /*ARGSUSED*/ int @@ -268,19 +268,19 @@ unsigned int *status; { register unsigned int srcp1,srcp2, tempp1,tempp2; register int src_exponent, result; - register boolean inexact = FALSE; + register int inexact = FALSE; Dbl_copyfromptr(srcptr,srcp1,srcp2); src_exponent = Dbl_exponent(srcp1) - DBL_BIAS; - /* + /* * Test for overflow */ if (src_exponent > SGL_FX_MAX_EXP) { /* check for MININT */ if (Dbl_isoverflow_to_int(src_exponent,srcp1,srcp2)) { - /* - * Since source is a number which cannot be + /* + * Since source is a number which cannot be * represented in fixed-point format, return * largest (or smallest) fixed-point number. */ @@ -301,63 +301,63 @@ unsigned int *status; /* check for inexact */ if (Dbl_isinexact_to_fix(srcp1,srcp2,src_exponent)) { - inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Dbl_iszero_sign(srcp1)) result++; - break; - case ROUNDMINUS: - if (Dbl_isone_sign(srcp1)) result--; - break; - case ROUNDNEAREST: - if (Dbl_isone_roundbit(srcp1,srcp2,src_exponent)) - if (Dbl_isone_stickybit(srcp1,srcp2,src_exponent) || + inexact = TRUE; + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Dbl_iszero_sign(srcp1)) result++; + break; + case ROUNDMINUS: + if (Dbl_isone_sign(srcp1)) result--; + break; + case ROUNDNEAREST: + if (Dbl_isone_roundbit(srcp1,srcp2,src_exponent)) + if (Dbl_isone_stickybit(srcp1,srcp2,src_exponent) || (Dbl_isone_lowmantissap1(tempp1))) { - if (Dbl_iszero_sign(srcp1)) result++; - else result--; + if (Dbl_iszero_sign(srcp1)) result++; + else result--; } - } + } /* check for overflow */ if ((Dbl_iszero_sign(srcp1) && result < 0) || (Dbl_isone_sign(srcp1) && result > 0)) { Dbl_return_overflow(srcp1,srcp2,dstptr); } - } + } } else { result = 0; /* check for inexact */ if (Dbl_isnotzero_exponentmantissa(srcp1,srcp2)) { - inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Dbl_iszero_sign(srcp1)) result++; - break; - case ROUNDMINUS: - if (Dbl_isone_sign(srcp1)) result--; - break; - case ROUNDNEAREST: - if (src_exponent == -1) - if (Dbl_isnotzero_mantissa(srcp1,srcp2)) { - if (Dbl_iszero_sign(srcp1)) result++; - else result--; + inexact = TRUE; + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Dbl_iszero_sign(srcp1)) result++; + break; + case ROUNDMINUS: + if (Dbl_isone_sign(srcp1)) result--; + break; + case ROUNDNEAREST: + if (src_exponent == -1) + if (Dbl_isnotzero_mantissa(srcp1,srcp2)) { + if (Dbl_iszero_sign(srcp1)) result++; + else result--; } } - } + } } *dstptr = result; - if (inexact) { - if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION); + if (inexact) { + if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION); else Set_inexactflag(); - } + } return(NOEXCEPTION); } /* - * Double Floating-point to Double Fixed-point + * Double Floating-point to Double Fixed-point */ /*ARGSUSED*/ int @@ -369,27 +369,27 @@ unsigned int *status; { register int src_exponent, resultp1; register unsigned int srcp1, srcp2, tempp1, tempp2, resultp2; - register boolean inexact = FALSE; + register int inexact = FALSE; Dbl_copyfromptr(srcptr,srcp1,srcp2); src_exponent = Dbl_exponent(srcp1) - DBL_BIAS; - /* + /* * Test for overflow */ if (src_exponent > DBL_FX_MAX_EXP) { /* check for MININT */ - if ((src_exponent > DBL_FX_MAX_EXP + 1) || + if ((src_exponent > DBL_FX_MAX_EXP + 1) || Dbl_isnotzero_mantissa(srcp1,srcp2) || Dbl_iszero_sign(srcp1)) { - /* - * Since source is a number which cannot be + /* + * Since source is a number which cannot be * represented in fixed-point format, return * largest (or smallest) fixed-point number. - */ + */ Dbl_return_overflow_dbl(srcp1,srcp2,dstptr); } } - + /* * Generate result */ @@ -405,68 +405,68 @@ unsigned int *status; /* check for inexact */ if (Dbl_isinexact_to_fix(srcp1,srcp2,src_exponent)) { - inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Dbl_iszero_sign(srcp1)) { + inexact = TRUE; + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Dbl_iszero_sign(srcp1)) { Dint_increment(resultp1,resultp2); } - break; - case ROUNDMINUS: - if (Dbl_isone_sign(srcp1)) { + break; + case ROUNDMINUS: + if (Dbl_isone_sign(srcp1)) { Dint_decrement(resultp1,resultp2); } - break; - case ROUNDNEAREST: - if (Dbl_isone_roundbit(srcp1,srcp2,src_exponent)) - if (Dbl_isone_stickybit(srcp1,srcp2,src_exponent) || + break; + case ROUNDNEAREST: + if (Dbl_isone_roundbit(srcp1,srcp2,src_exponent)) + if (Dbl_isone_stickybit(srcp1,srcp2,src_exponent) || (Dint_isone_lowp2(resultp2))) { - if (Dbl_iszero_sign(srcp1)) { + if (Dbl_iszero_sign(srcp1)) { Dint_increment(resultp1,resultp2); } - else { + else { Dint_decrement(resultp1,resultp2); } } - } - } + } + } } else { Dint_setzero(resultp1,resultp2); /* check for inexact */ if (Dbl_isnotzero_exponentmantissa(srcp1,srcp2)) { - inexact = TRUE; - /* round result */ - switch (Rounding_mode()) { - case ROUNDPLUS: - if (Dbl_iszero_sign(srcp1)) { + inexact = TRUE; + /* round result */ + switch (Rounding_mode()) { + case ROUNDPLUS: + if (Dbl_iszero_sign(srcp1)) { Dint_increment(resultp1,resultp2); } - break; - case ROUNDMINUS: - if (Dbl_isone_sign(srcp1)) { + break; + case ROUNDMINUS: + if (Dbl_isone_sign(srcp1)) { Dint_decrement(resultp1,resultp2); } - break; - case ROUNDNEAREST: - if (src_exponent == -1) - if (Dbl_isnotzero_mantissa(srcp1,srcp2)) { - if (Dbl_iszero_sign(srcp1)) { + break; + case ROUNDNEAREST: + if (src_exponent == -1) + if (Dbl_isnotzero_mantissa(srcp1,srcp2)) { + if (Dbl_iszero_sign(srcp1)) { Dint_increment(resultp1,resultp2); } - else { + else { Dint_decrement(resultp1,resultp2); - } + } } } - } + } } Dint_copytoptr(resultp1,resultp2,dstptr); - if (inexact) { - if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION); - else Set_inexactflag(); - } + if (inexact) { + if (Is_inexacttrap_enabled()) return(INEXACTEXCEPTION); + else Set_inexactflag(); + } return(NOEXCEPTION); } |