Date: Wed, 22 Apr 2026 22:40:25 +0000 From: Robert Clausecker <fuz@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: =?utf-8?Q?Jes=C3=BAs?= =?utf-8?Q?Bl=C3=A1zqu?=ez <jesuscblazquez@gmail.com> Subject: git: f6e1f27e9f00 - main - lib/msun: Replace manual checks with isnan() calls Message-ID: <69e94e59.3ac96.19bd0063@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=f6e1f27e9f005447e88a9b37df8a75751b1e0c3a commit f6e1f27e9f005447e88a9b37df8a75751b1e0c3a Author: Jesús Blázquez <jesuscblazquez@gmail.com> AuthorDate: 2026-04-21 15:23:20 +0000 Commit: Robert Clausecker <fuz@FreeBSD.org> CommitDate: 2026-04-22 22:39:51 +0000 lib/msun: Replace manual checks with isnan() calls The maximum and minimum functions, as well as nextafter and nexttoward, were using manual NaN checks instead of the isnan() macro. PR: 294692 Reviewed by: fuz, kargl MFC after: 1 month --- lib/msun/src/s_fmax.c | 4 ++-- lib/msun/src/s_fmaxf.c | 4 ++-- lib/msun/src/s_fmaximum.c | 3 +-- lib/msun/src/s_fmaximum_mag.c | 3 +-- lib/msun/src/s_fmaximum_magf.c | 3 +-- lib/msun/src/s_fmaximum_magl.c | 3 +-- lib/msun/src/s_fmaximum_num.c | 4 ++-- lib/msun/src/s_fmaximum_numf.c | 4 ++-- lib/msun/src/s_fmaximum_numl.c | 4 ++-- lib/msun/src/s_fmaximumf.c | 3 +-- lib/msun/src/s_fmaximuml.c | 3 +-- lib/msun/src/s_fmaxl.c | 4 ++-- lib/msun/src/s_fmin.c | 4 ++-- lib/msun/src/s_fminf.c | 4 ++-- lib/msun/src/s_fminimum.c | 3 +-- lib/msun/src/s_fminimum_mag.c | 3 +-- lib/msun/src/s_fminimum_magf.c | 3 +-- lib/msun/src/s_fminimum_magl.c | 3 +-- lib/msun/src/s_fminimum_num.c | 4 ++-- lib/msun/src/s_fminimum_numf.c | 4 ++-- lib/msun/src/s_fminimum_numl.c | 4 ++-- lib/msun/src/s_fminimumf.c | 3 +-- lib/msun/src/s_fminimuml.c | 3 +-- lib/msun/src/s_fminl.c | 4 ++-- lib/msun/src/s_nextafter.c | 8 ++++---- lib/msun/src/s_nextafterf.c | 8 ++++---- lib/msun/src/s_nextafterl.c | 10 ++++------ lib/msun/src/s_nexttoward.c | 9 ++++----- lib/msun/src/s_nexttowardf.c | 9 ++++----- 29 files changed, 56 insertions(+), 72 deletions(-) diff --git a/lib/msun/src/s_fmax.c b/lib/msun/src/s_fmax.c index 5d437fcefc9b..c2995cb39948 100644 --- a/lib/msun/src/s_fmax.c +++ b/lib/msun/src/s_fmax.c @@ -47,9 +47,9 @@ fmax(double x, double y) u[1].d = y; /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmaxf.c b/lib/msun/src/s_fmaxf.c index 1572572e43a6..bc9b7f5e3ff6 100644 --- a/lib/msun/src/s_fmaxf.c +++ b/lib/msun/src/s_fmaxf.c @@ -46,9 +46,9 @@ fmaxf(float x, float y) u[1].f = y; /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 255 && u[0].bits.man != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 255 && u[1].bits.man != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmaximum.c b/lib/msun/src/s_fmaximum.c index f9e1998a84c2..4fe35feac88d 100644 --- a/lib/msun/src/s_fmaximum.c +++ b/lib/msun/src/s_fmaximum.c @@ -48,8 +48,7 @@ fmaximum(double x, double y) u[1].d = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0) || - (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0)) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmaximum_mag.c b/lib/msun/src/s_fmaximum_mag.c index 1b1250f4c36e..b509a275c954 100644 --- a/lib/msun/src/s_fmaximum_mag.c +++ b/lib/msun/src/s_fmaximum_mag.c @@ -47,8 +47,7 @@ fmaximum_mag(double x, double y) u[1].d = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0) || - (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0)) + if (isnan(x) || isnan(y)) return (NAN); double ax = fabs(x); diff --git a/lib/msun/src/s_fmaximum_magf.c b/lib/msun/src/s_fmaximum_magf.c index 6193b9184970..93d7150d76a8 100644 --- a/lib/msun/src/s_fmaximum_magf.c +++ b/lib/msun/src/s_fmaximum_magf.c @@ -46,8 +46,7 @@ fmaximum_magf(float x, float y) u[1].f = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 255 && u[0].bits.man != 0) || - (u[1].bits.exp == 255 && u[1].bits.man != 0)) + if (isnan(x) || isnan(y)) return (NAN); float ax = fabsf(x); diff --git a/lib/msun/src/s_fmaximum_magl.c b/lib/msun/src/s_fmaximum_magl.c index f2426b050d33..197477003bb5 100644 --- a/lib/msun/src/s_fmaximum_magl.c +++ b/lib/msun/src/s_fmaximum_magl.c @@ -41,8 +41,7 @@ fmaximum_magl(long double x, long double y) mask_nbit_l(u[1]); /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) || - (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0)) + if (isnan(x) || isnan(y)) return (NAN); long double ax = fabsl(x); diff --git a/lib/msun/src/s_fmaximum_num.c b/lib/msun/src/s_fmaximum_num.c index cf16c76f89b9..c7cfcd26fd70 100644 --- a/lib/msun/src/s_fmaximum_num.c +++ b/lib/msun/src/s_fmaximum_num.c @@ -49,8 +49,8 @@ fmaximum_num(double x, double y) u[0].d = x; u[1].d = y; - nan_x = u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0; - nan_y = u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fmaximum_numf.c b/lib/msun/src/s_fmaximum_numf.c index c30179e47f9e..60a7ccae343e 100644 --- a/lib/msun/src/s_fmaximum_numf.c +++ b/lib/msun/src/s_fmaximum_numf.c @@ -48,8 +48,8 @@ fmaximum_numf(float x, float y) u[0].f = x; u[1].f = y; - nan_x = u[0].bits.exp == 255 && u[0].bits.man != 0; - nan_y = u[1].bits.exp == 255 && u[1].bits.man != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fmaximum_numl.c b/lib/msun/src/s_fmaximum_numl.c index 2291d01ca4f4..a2a5383ab85a 100644 --- a/lib/msun/src/s_fmaximum_numl.c +++ b/lib/msun/src/s_fmaximum_numl.c @@ -43,8 +43,8 @@ fmaximum_numl(long double x, long double y) u[1].e = y; mask_nbit_l(u[1]); - nan_x = u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0; - nan_y = u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fmaximumf.c b/lib/msun/src/s_fmaximumf.c index db4b96c14749..928a75a601d1 100644 --- a/lib/msun/src/s_fmaximumf.c +++ b/lib/msun/src/s_fmaximumf.c @@ -47,8 +47,7 @@ fmaximumf(float x, float y) u[1].f = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 255 && u[0].bits.man != 0) || - (u[1].bits.exp == 255 && u[1].bits.man != 0)) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmaximuml.c b/lib/msun/src/s_fmaximuml.c index c849478cf05a..4a94dc5dad36 100644 --- a/lib/msun/src/s_fmaximuml.c +++ b/lib/msun/src/s_fmaximuml.c @@ -42,8 +42,7 @@ fmaximuml(long double x, long double y) mask_nbit_l(u[1]); /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if ((u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) || - (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0)) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmaxl.c b/lib/msun/src/s_fmaxl.c index 73e2a4bb19fd..1019612696c1 100644 --- a/lib/msun/src/s_fmaxl.c +++ b/lib/msun/src/s_fmaxl.c @@ -41,9 +41,9 @@ fmaxl(long double x, long double y) mask_nbit_l(u[1]); /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fmin.c b/lib/msun/src/s_fmin.c index a349e5ddaf0e..feefdb6f6fe4 100644 --- a/lib/msun/src/s_fmin.c +++ b/lib/msun/src/s_fmin.c @@ -47,9 +47,9 @@ fmin(double x, double y) u[1].d = y; /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fminf.c b/lib/msun/src/s_fminf.c index 5c2537e32d25..561efd3568d1 100644 --- a/lib/msun/src/s_fminf.c +++ b/lib/msun/src/s_fminf.c @@ -46,9 +46,9 @@ fminf(float x, float y) u[1].f = y; /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 255 && u[0].bits.man != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 255 && u[1].bits.man != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fminimum.c b/lib/msun/src/s_fminimum.c index fa3fd17fe241..3767db01d473 100644 --- a/lib/msun/src/s_fminimum.c +++ b/lib/msun/src/s_fminimum.c @@ -48,8 +48,7 @@ fminimum(double x, double y) u[1].d = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0 || - u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fminimum_mag.c b/lib/msun/src/s_fminimum_mag.c index cd21fb948a8e..311216d3cc56 100644 --- a/lib/msun/src/s_fminimum_mag.c +++ b/lib/msun/src/s_fminimum_mag.c @@ -47,8 +47,7 @@ fminimum_mag(double x, double y) u[1].d = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0 || - u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(x) || isnan(y)) return (NAN); double ax = fabs(x); diff --git a/lib/msun/src/s_fminimum_magf.c b/lib/msun/src/s_fminimum_magf.c index 9c04859184ea..f2181115d358 100644 --- a/lib/msun/src/s_fminimum_magf.c +++ b/lib/msun/src/s_fminimum_magf.c @@ -46,8 +46,7 @@ fminimum_magf(float x, float y) u[1].f = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 255 && u[0].bits.man != 0 || - u[1].bits.exp == 255 && u[1].bits.man != 0) + if (isnan(x) || isnan(y)) return (NAN); float ax = fabsf(x); diff --git a/lib/msun/src/s_fminimum_magl.c b/lib/msun/src/s_fminimum_magl.c index e6ab22afe7f0..cd0b366d376f 100644 --- a/lib/msun/src/s_fminimum_magl.c +++ b/lib/msun/src/s_fminimum_magl.c @@ -41,8 +41,7 @@ fminimum_magl(long double x, long double y) mask_nbit_l(u[1]); /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0 || - u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(x) || isnan(y)) return (NAN); long double ax = fabsl(x); diff --git a/lib/msun/src/s_fminimum_num.c b/lib/msun/src/s_fminimum_num.c index 71b5f072c32d..a5fd657955c5 100644 --- a/lib/msun/src/s_fminimum_num.c +++ b/lib/msun/src/s_fminimum_num.c @@ -49,8 +49,8 @@ fminimum_num(double x, double y) u[0].d = x; u[1].d = y; - nan_x = u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0; - nan_y = u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fminimum_numf.c b/lib/msun/src/s_fminimum_numf.c index d5bab31ce403..d5e8f0812bdb 100644 --- a/lib/msun/src/s_fminimum_numf.c +++ b/lib/msun/src/s_fminimum_numf.c @@ -48,8 +48,8 @@ fminimum_numf(float x, float y) u[0].f = x; u[1].f = y; - nan_x = u[0].bits.exp == 255 && u[0].bits.man != 0; - nan_y = u[1].bits.exp == 255 && u[1].bits.man != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fminimum_numl.c b/lib/msun/src/s_fminimum_numl.c index 6b26d2218d42..dc0884002499 100644 --- a/lib/msun/src/s_fminimum_numl.c +++ b/lib/msun/src/s_fminimum_numl.c @@ -43,8 +43,8 @@ fminimum_numl(long double x, long double y) u[1].e = y; mask_nbit_l(u[1]); - nan_x = u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0; - nan_y = u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0; + nan_x = isnan(x); + nan_y = isnan(y); if (nan_x || nan_y) { /* These ternary conditionals force (x+y), so that sNaN's raise exceptions */ diff --git a/lib/msun/src/s_fminimumf.c b/lib/msun/src/s_fminimumf.c index 08ac3ca4c158..072607f88166 100644 --- a/lib/msun/src/s_fminimumf.c +++ b/lib/msun/src/s_fminimumf.c @@ -47,8 +47,7 @@ fminimumf(float x, float y) u[1].f = y; /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 255 && u[0].bits.man != 0 || - u[1].bits.exp == 255 && u[1].bits.man != 0) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fminimuml.c b/lib/msun/src/s_fminimuml.c index 1ef9078ee674..d002907a7dd7 100644 --- a/lib/msun/src/s_fminimuml.c +++ b/lib/msun/src/s_fminimuml.c @@ -42,8 +42,7 @@ fminimuml(long double x, long double y) mask_nbit_l(u[1]); /* Handle NaN according to ISO/IEC 60559. NaN argument -> NaN return */ - if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0 || - u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(x) || isnan(y)) return (NAN); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_fminl.c b/lib/msun/src/s_fminl.c index 7ac17e313440..5af3bf45087a 100644 --- a/lib/msun/src/s_fminl.c +++ b/lib/msun/src/s_fminl.c @@ -41,9 +41,9 @@ fminl(long double x, long double y) mask_nbit_l(u[1]); /* Check for NaNs to avoid raising spurious exceptions. */ - if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) + if (isnan(x)) return (y); - if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + if (isnan(y)) return (x); /* Handle comparisons of signed zeroes. */ diff --git a/lib/msun/src/s_nextafter.c b/lib/msun/src/s_nextafter.c index 1b394e5109c2..8ac5b9550946 100644 --- a/lib/msun/src/s_nextafter.c +++ b/lib/msun/src/s_nextafter.c @@ -28,15 +28,15 @@ nextafter(double x, double y) int32_t hx,hy,ix,iy; u_int32_t lx,ly; + if(isnan(x) || isnan(y)) /* x or y is nan */ + return x+y; + if(x==y) return y; /* x=y, return y */ + EXTRACT_WORDS(hx,lx,x); EXTRACT_WORDS(hy,ly,y); ix = hx&0x7fffffff; /* |x| */ iy = hy&0x7fffffff; /* |y| */ - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ if((ix|lx)==0) { /* x == 0 */ INSERT_WORDS(x,hy&0x80000000,1); /* return +-minsubnormal */ t = x*x; diff --git a/lib/msun/src/s_nextafterf.c b/lib/msun/src/s_nextafterf.c index 418b126a27ab..e8527e989190 100644 --- a/lib/msun/src/s_nextafterf.c +++ b/lib/msun/src/s_nextafterf.c @@ -22,15 +22,15 @@ nextafterf(float x, float y) volatile float t; int32_t hx,hy,ix,iy; + if(isnan(x) || isnan(y)) /* x or y is nan */ + return x+y; + if(x==y) return y; /* x=y, return y */ + GET_FLOAT_WORD(hx,x); GET_FLOAT_WORD(hy,y); ix = hx&0x7fffffff; /* |x| */ iy = hy&0x7fffffff; /* |y| */ - if((ix>0x7f800000) || /* x is nan */ - (iy>0x7f800000)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ if(ix==0) { /* x == 0 */ SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */ t = x*x; diff --git a/lib/msun/src/s_nextafterl.c b/lib/msun/src/s_nextafterl.c index fe5a010e89f5..a73aabc9b6e1 100644 --- a/lib/msun/src/s_nextafterl.c +++ b/lib/msun/src/s_nextafterl.c @@ -32,15 +32,13 @@ nextafterl(long double x, long double y) volatile long double t; union IEEEl2bits ux, uy; + if (isnan(x) || isnan(y)) + return x+y; /* x or y is nan */ + if(x==y) return y; /* x=y, return y */ + ux.e = x; uy.e = y; - if ((ux.bits.exp == 0x7fff && - ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl) != 0) || - (uy.bits.exp == 0x7fff && - ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) - return x+y; /* x or y is nan */ - if(x==y) return y; /* x=y, return y */ if(x==0.0) { ux.bits.manh = 0; /* return +-minsubnormal */ ux.bits.manl = 1; diff --git a/lib/msun/src/s_nexttoward.c b/lib/msun/src/s_nexttoward.c index 5482dc21606d..d8e04b107e25 100644 --- a/lib/msun/src/s_nexttoward.c +++ b/lib/msun/src/s_nexttoward.c @@ -33,15 +33,14 @@ nexttoward(double x, long double y) int32_t hx,ix; u_int32_t lx; + if(isnan(x) || isnan(y)) + return x+y; /* x or y is nan */ + if(x==y) return (double)y; /* x=y, return y */ + EXTRACT_WORDS(hx,lx,x); ix = hx&0x7fffffff; /* |x| */ uy.e = y; - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || - (uy.bits.exp == 0x7fff && - ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) - return x+y; /* x or y is nan */ - if(x==y) return (double)y; /* x=y, return y */ if(x==0.0) { INSERT_WORDS(x,uy.bits.sign<<31,1); /* return +-minsubnormal */ t = x*x; diff --git a/lib/msun/src/s_nexttowardf.c b/lib/msun/src/s_nexttowardf.c index 05c89f4554ec..53ca3b9806af 100644 --- a/lib/msun/src/s_nexttowardf.c +++ b/lib/msun/src/s_nexttowardf.c @@ -24,15 +24,14 @@ nexttowardf(float x, long double y) volatile float t; int32_t hx,ix; + if(isnan(x) || isnan(y)) + return x+y; /* x or y is nan */ + if(x==y) return (float)y; /* x=y, return y */ + GET_FLOAT_WORD(hx,x); ix = hx&0x7fffffff; /* |x| */ uy.e = y; - if((ix>0x7f800000) || - (uy.bits.exp == LDBL_INFNAN_EXP && - ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) - return x+y; /* x or y is nan */ - if(x==y) return (float)y; /* x=y, return y */ if(ix==0) { /* x == 0 */ SET_FLOAT_WORD(x,(uy.bits.sign<<31)|1);/* return +-minsubnormal */ t = x*x;home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69e94e59.3ac96.19bd0063>
