From nobody Wed Apr 22 22:40:25 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g1DhG4h2Nz6b0T5 for ; Wed, 22 Apr 2026 22:40:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g1DhG4S2bz3THj for ; Wed, 22 Apr 2026 22:40:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776897630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LAZijgvHSfvcG3i74eK5n+LV/52uLQvkf8BGrjHK2mk=; b=sgjSviXl7GUoI3eRJzjoyVTF1CZi2x4sqlBRJDGUHRLKeu3WEr1YxN57YothK5DjztIH1u LyWHofTRe60bSU1t08ZtMKa1mPqjdeN5hhKCwafE3ie8fkBtjM4P+MKKPOjFPVP2m321UE VFUlTBfuudcCBaZ0/ukB5Q2MITiR9SzLlqFq7IHRiToM7xsgU5a3k7LROPlYrw+SDlwI+v lNKybWHzR6X+TryOuLJb8A6TLdmvwUCuoBwX59OT0hpoDFmbWP3CvHA6WVPawUQAHyXDN4 4Q1XAgMt3COOL+w52zTf3MQpuZnYwYhqwwHc3K9+vgJY2VcnYJl1+qsXtXJQ6g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776897630; a=rsa-sha256; cv=none; b=VYdKPvYQ2heA1yWjlHJ/57jL4wdM1n4JOlY3siqbVxm0pfJvKaHnawYj7VelHuN8wVSMGG LuVz8pnzVTgaMKxods/ggcWesyIWrTIQL8nxZqc4kXJaEwTAZWHf9DOicHysUN6zfGliWo k8v2NVTvlbhgX+OXEkMOpPiv3gEoG5jmQKp6qY6jAeIpDWSWfQyu7Aldmtuy/GCANxfGEM IwFN1XdwJBeR34eSjg+fSUaZERST1DqzJV6DGZ0Vt1fo6KbQ0Z6G2OMupU4c04Z1kGP+Qr /gITATTGUxkInUwJS/KWqeNwkqIUu3Kzc54LIMdgcjNNFezIXIhDV1Iio3pGXw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776897630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LAZijgvHSfvcG3i74eK5n+LV/52uLQvkf8BGrjHK2mk=; b=TpwQ7HE8nF7iwymabe0xgf86autHnw6FvfRLCYwnrGg0nAC0+fzDADc1APl7JQ6jRbKRfD j4RUyY/yle+khMD3DT2zFBBXYf5c9JtQ0JNJb6V0dfzVrg6bD/IowxFdouUlSsW4h2FSWI dWPOIAYDMSuSEOKubvtGzSdlpmPJjDphyjJcXy4M6k5v1cynMkGCAKR8DZ2C+hAxz1Bohm DyFoh4s6fWMFCO+3YW/dLgeS1uk/dTsLu78og7hXoCIvaGQZqoaVUiU3J/1W9FLqjtPV+1 O5/DmCLqbXhwOvJ3H1EfuyEd3rhIlgQ6c3AFIm+sBFcRP9qutvAcM+p9FvITQg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g1DhG3qX6zr0G for ; Wed, 22 Apr 2026 22:40:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3ac96 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Apr 2026 22:40:25 +0000 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 From: Robert Clausecker Subject: git: f6e1f27e9f00 - main - lib/msun: Replace manual checks with isnan() calls List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fuz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f6e1f27e9f005447e88a9b37df8a75751b1e0c3a Auto-Submitted: auto-generated Date: Wed, 22 Apr 2026 22:40:25 +0000 Message-Id: <69e94e59.3ac96.19bd0063@gitrepo.freebsd.org> The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=f6e1f27e9f005447e88a9b37df8a75751b1e0c3a commit f6e1f27e9f005447e88a9b37df8a75751b1e0c3a Author: Jesús Blázquez AuthorDate: 2026-04-21 15:23:20 +0000 Commit: Robert Clausecker 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;