diff options
-rw-r--r-- | sys/arch/hppa/spmath/fcnvfx.c | 132 | ||||
-rw-r--r-- | sys/arch/hppa/spmath/fcnvfxt.c | 128 |
2 files changed, 80 insertions, 180 deletions
diff --git a/sys/arch/hppa/spmath/fcnvfx.c b/sys/arch/hppa/spmath/fcnvfx.c index 4b846f68d53..d29f4419e50 100644 --- a/sys/arch/hppa/spmath/fcnvfx.c +++ b/sys/arch/hppa/spmath/fcnvfx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fcnvfx.c,v 1.7 2003/04/10 17:27:58 mickey Exp $ */ +/* $OpenBSD: fcnvfx.c,v 1.8 2010/07/30 18:05:23 kettenis Exp $ */ /* (c) Copyright 1986 HEWLETT-PACKARD COMPANY To anyone who acknowledges that this file is provided "AS IS" @@ -43,28 +43,15 @@ sgl_to_sgl_fcnvfx(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > SGL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - if( Sgl_isnan(src) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Sgl_iszero_sign(src)) result = 0x7fffffff; - else result = 0x80000000; + if (Sgl_iszero_sign(src)) result = 0x7fffffff; + else result = 0x80000000; - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - *dstptr = result; - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + *dstptr = result; + return(NOEXCEPTION); } } /* @@ -154,33 +141,21 @@ sgl_to_dbl_fcnvfx(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > DBL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - if( Sgl_isnan(src) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Sgl_iszero_sign(src)) { + if (Sgl_iszero_sign(src)) { resultp1 = 0x7fffffff; - resultp2 = 0xffffffff; - } - else { - resultp1 = 0x80000000; - resultp2 = 0; - } - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - Dint_copytoptr(resultp1,resultp2,dstptr); - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + resultp2 = 0xffffffff; + } + else { + resultp1 = 0x80000000; + resultp2 = 0; + } + + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + Dint_copytoptr(resultp1,resultp2,dstptr); + return(NOEXCEPTION); } Dint_set_minint(resultp1,resultp2); Dint_copytoptr(resultp1,resultp2,dstptr); @@ -288,28 +263,15 @@ dbl_to_sgl_fcnvfx(srcptr, null, dstptr, status) if (src_exponent > SGL_FX_MAX_EXP) { /* check for MININT */ if (Dbl_isoverflow_to_int(src_exponent,srcp1,srcp2)) { - if( Dbl_isnan(srcp1,srcp2) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Dbl_iszero_sign(srcp1)) result = 0x7fffffff; - else result = 0x80000000; + if (Dbl_iszero_sign(srcp1)) result = 0x7fffffff; + else result = 0x80000000; - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - *dstptr = result; - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + *dstptr = result; + return(NOEXCEPTION); } } /* @@ -423,33 +385,21 @@ dbl_to_dbl_fcnvfx(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > DBL_FX_MAX_EXP + 1) || Dbl_isnotzero_mantissa(srcp1,srcp2) || Dbl_iszero_sign(srcp1)) { - if( Dbl_isnan(srcp1,srcp2) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); + if (Dbl_iszero_sign(srcp1)) { + resultp1 = 0x7fffffff; + resultp2 = 0xffffffff; + } else { - if (Dbl_iszero_sign(srcp1)) { - resultp1 = 0x7fffffff; - resultp2 = 0xffffffff; - } - else { - resultp1 = 0x80000000; - resultp2 = 0; - } - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - Dint_copytoptr(resultp1,resultp2,dstptr); - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + resultp1 = 0x80000000; + resultp2 = 0; + } + + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + Dint_copytoptr(resultp1,resultp2,dstptr); + return(NOEXCEPTION); } } diff --git a/sys/arch/hppa/spmath/fcnvfxt.c b/sys/arch/hppa/spmath/fcnvfxt.c index 96e17dc09d9..a29d15e5f9a 100644 --- a/sys/arch/hppa/spmath/fcnvfxt.c +++ b/sys/arch/hppa/spmath/fcnvfxt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fcnvfxt.c,v 1.7 2003/04/10 17:27:58 mickey Exp $ */ +/* $OpenBSD: fcnvfxt.c,v 1.8 2010/07/30 18:05:23 kettenis Exp $ */ /* (c) Copyright 1986 HEWLETT-PACKARD COMPANY To anyone who acknowledges that this file is provided "AS IS" @@ -43,28 +43,15 @@ sgl_to_sgl_fcnvfxt(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > SGL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - if( Sgl_isnan(src) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Sgl_iszero_sign(src)) result = 0x7fffffff; - else result = 0x80000000; + if (Sgl_iszero_sign(src)) result = 0x7fffffff; + else result = 0x80000000; - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - *dstptr = result; - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + *dstptr = result; + return(NOEXCEPTION); } } /* @@ -119,33 +106,21 @@ sgl_to_dbl_fcnvfxt(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > DBL_FX_MAX_EXP + 1) || Sgl_isnotzero_mantissa(src) || Sgl_iszero_sign(src)) { - if( Sgl_isnan(src) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Sgl_iszero_sign(src)) { + if (Sgl_iszero_sign(src)) { resultp1 = 0x7fffffff; resultp2 = 0xffffffff; - } - else { - resultp1 = 0x80000000; - resultp2 = 0; - } - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - Dint_copytoptr(resultp1,resultp2,dstptr); - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); } + else { + resultp1 = 0x80000000; + resultp2 = 0; + } + + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); + } + Set_invalidflag(); + Dint_copytoptr(resultp1,resultp2,dstptr); + return(NOEXCEPTION); } Dint_set_minint(resultp1,resultp2); Dint_copytoptr(resultp1,resultp2,dstptr); @@ -204,28 +179,15 @@ dbl_to_sgl_fcnvfxt(srcptr, null, dstptr, status) if (src_exponent > SGL_FX_MAX_EXP) { /* check for MININT */ if (Dbl_isoverflow_to_int(src_exponent,srcp1,srcp2)) { - if( Dbl_isnan(srcp1,srcp2) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Dbl_iszero_sign(srcp1)) result = 0x7fffffff; - else result = 0x80000000; + if (Dbl_iszero_sign(srcp1)) result = 0x7fffffff; + else result = 0x80000000; - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - *dstptr = result; - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); } + Set_invalidflag(); + *dstptr = result; + return(NOEXCEPTION); } } /* @@ -282,33 +244,21 @@ dbl_to_dbl_fcnvfxt(srcptr, null, dstptr, status) /* check for MININT */ if ((src_exponent > DBL_FX_MAX_EXP + 1) || Dbl_isnotzero_mantissa(srcp1,srcp2) || Dbl_iszero_sign(srcp1)) { - if( Dbl_isnan(srcp1,srcp2) ) - /* - * On NaN go unimplemented. - */ - return(UNIMPLEMENTEDEXCEPTION); - else { - if (Dbl_iszero_sign(srcp1)) { + if (Dbl_iszero_sign(srcp1)) { resultp1 = 0x7fffffff; resultp2 = 0xffffffff; - } - else { - resultp1 = 0x80000000; - resultp2 = 0; - } - if (Is_overflowtrap_enabled()) { - if (Is_inexacttrap_enabled()) - return(OVERFLOWEXCEPTION|INEXACTEXCEPTION); - else Set_inexactflag(); - return(OVERFLOWEXCEPTION); - } - Set_overflowflag(); - Dint_copytoptr(resultp1,resultp2,dstptr); - if (Is_inexacttrap_enabled() ) - return(INEXACTEXCEPTION); - else Set_inexactflag(); - return(NOEXCEPTION); } + else { + resultp1 = 0x80000000; + resultp2 = 0; + } + + if (Is_invalidtrap_enabled()) { + return(INVALIDEXCEPTION); + } + Set_invalidflag(); + Dint_copytoptr(resultp1,resultp2,dstptr); + return(NOEXCEPTION); } } /* |