Module Name: src Committed By: riastradh Date: Sun May 5 11:38:03 UTC 2024
Modified Files: src/lib/libm/src: s_nexttowardf.c Log Message: libm: Make s_nexttowardf.c work when long double is double. Seems likely that there are other parts of libm which would benefit from being defined unconditionally in terms of ieee_ext_u, with ieee_ext_u as an alias for ieee_double_u, in this scenario. But I haven't gone looking yet. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/libm/src/s_nexttowardf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libm/src/s_nexttowardf.c diff -u src/lib/libm/src/s_nexttowardf.c:1.3 src/lib/libm/src/s_nexttowardf.c:1.4 --- src/lib/libm/src/s_nexttowardf.c:1.3 Sat Feb 9 23:14:44 2013 +++ src/lib/libm/src/s_nexttowardf.c Sun May 5 11:38:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: s_nexttowardf.c,v 1.3 2013/02/09 23:14:44 christos Exp $ */ +/* $NetBSD: s_nexttowardf.c,v 1.4 2024/05/05 11:38:03 riastradh Exp $ */ /* * ==================================================== @@ -15,7 +15,7 @@ #if 0 __FBSDID("$FreeBSD: src/lib/msun/src/s_nexttowardf.c,v 1.3 2011/02/10 07:38:38 das Exp $"); #else -__RCSID("$NetBSD: s_nexttowardf.c,v 1.3 2013/02/09 23:14:44 christos Exp $"); +__RCSID("$NetBSD: s_nexttowardf.c,v 1.4 2024/05/05 11:38:03 riastradh Exp $"); #endif #include <string.h> @@ -25,7 +25,23 @@ __RCSID("$NetBSD: s_nexttowardf.c,v 1.3 #include "math.h" #include "math_private.h" -#ifdef EXT_EXP_INFNAN +/* + * On ports where long double is just double, reuse the ieee_double_u + * union as if it were ieee_ext_u -- broken-down components of (long) + * double values. + */ +#ifndef __HAVE_LONG_DOUBLE +#define ieee_ext_u ieee_double_u +#define extu_ld dblu_d +#define extu_ext dblu_dbl +#define ext_sign dbl_sign +#define ext_exp dbl_exp +#define ext_frach dbl_frach +#define ext_fracl dbl_fracl +#define EXT_EXP_INFNAN DBL_EXP_INFNAN +#define LDBL_NBIT 0 +#endif + float nexttowardf(float x, long double y) { @@ -38,7 +54,7 @@ nexttowardf(float x, long double y) memset(&uy, 0, sizeof(uy)); uy.extu_ld = y; - uy.extu_ext.ext_frach &= ~0x80000000; + uy.extu_ext.ext_frach &= ~LDBL_NBIT; if((ix>0x7f800000) || (uy.extu_ext.ext_exp == EXT_EXP_INFNAN && @@ -66,4 +82,3 @@ nexttowardf(float x, long double y) SET_FLOAT_WORD(x,hx); return x; } -#endif