From nobody Fri Apr 12 15:28:54 2024 X-Original-To: dev-commits-src-all@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 4VGL7p6Zcpz5HZ2D; Fri, 12 Apr 2024 15:28:54 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4VGL7p5Wzsz4jQD; Fri, 12 Apr 2024 15:28:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1712935734; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=b3RoKgisMD/VIgI42uiuXgkWZUhC4qLB7h1V9FWHEjo=; b=qPhDoOrFZp5NOPMQAdXV9TaGclKWS7vKbuMH7jQZXmD4p1rZiSNv+lRiv+A6lRR79ckUSa w8IlBFMr6LSWcygZ8by2yVkGtJ8nVLn5GN1g8PO6ALGBl2GJObWfCxBz3mtmC/ZakSPPWh gDX3dzpHwHl1MO1crW0Cz4TEUvJImTdwZ7Ky7pzQbFVRoRlmP9vRkCruHIVzs//7VMFuV+ iDakzB00OmhKj4xdbDFbd1T/3cXMyXLHyhm0BtvUEbL05woiHWF1xmw8e6cVat29wSGn39 OmTpQFbNVsr7xxDZ+B0pm56xHXK0uZvUMJzR13XrMcKK5YvsixXo296Gre8qeg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1712935734; a=rsa-sha256; cv=none; b=Fa2FlDkKtwOvgNYM6gBa8RvPDbx0vm0Hp6Cx50ix1E4fjwQVPhXYk6FO7zFV1nVbGAbTuB 6XKNhmnaIVIOsj/Ryu9GjGksJVw/1M+K6oYJY3/TZRz4KUsOs4TlA+cfn5RNZjKucqOXfG TEwvTMEHXo+PkORp7Xsv8O0Vdw1DBRsK5DN2zEFLV+26oD8DALV/5XpSafWxV3KqFUPIn5 KPU5FuofD5QQwKySCIifo9UZ5+8p1U/qSOlv0CB862TKEPvtWpvWsEJVjtmPgPJeErvMoh pjm2wiwyHctcA8CnSZaak34kvVnDa7I63mJ82/rhA1PLWsST4lMao/KwaYF+lQ== 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=1712935734; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=b3RoKgisMD/VIgI42uiuXgkWZUhC4qLB7h1V9FWHEjo=; b=SyotNHlEAD+yZ8VYoV1k6kD6YP7T7n+1fCWNmwocUr96AqXEar7jddmUtmeqp142IcI9rq pAbKfasehYh3xqYlB2IyY3tt1RbgcJ59Hu3CWzAx2YPYzYrgzLyDscmFpHtlraPwrYmE8L D3ZJ8iB8qUqiVWb1xFPEtlWfoAXilQOg7F+KRo5DCjBtZDQmebDpri/gSy+cxsdeOXc37p 844FDJC8MS6rHJRrRDa8zTqc00MmhnV36AzngpxY5NzdRoT1TSoZI2PoMQAK2a/z/Tr9D+ UqiPyUJEDym+L45YNg5wgtmT7WuwPceU7zabeYCICAydAiwMCNqKl6tor9mHXA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4VGL7p549MztvT; Fri, 12 Apr 2024 15:28:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 43CFSspg087936; Fri, 12 Apr 2024 15:28:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 43CFSsEn087933; Fri, 12 Apr 2024 15:28:54 GMT (envelope-from git) Date: Fri, 12 Apr 2024 15:28:54 GMT Message-Id: <202404121528.43CFSsEn087933@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Murray Subject: git: 8df6c930c151 - stable/14 - lib/msun: Fix tgammal(3) on IEEE 128-bit platforms List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markm X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 8df6c930c15121a1b6a9d21e12f4421ef78617bb Auto-Submitted: auto-generated The branch stable/14 has been updated by markm: URL: https://cgit.FreeBSD.org/src/commit/?id=8df6c930c15121a1b6a9d21e12f4421ef78617bb commit 8df6c930c15121a1b6a9d21e12f4421ef78617bb Author: Mark Murray AuthorDate: 2024-03-01 15:53:58 +0000 Commit: Mark Murray CommitDate: 2024-04-12 15:27:21 +0000 lib/msun: Fix tgammal(3) on IEEE 128-bit platforms Undo the 80-bit "stub" implementation of the 128-bit long double tgammal(3) function. The latest (as of Feb 2024) version of the src/contrib/arm-optimised-routines library includes a standalone, full 128-bit replacement. This needs a small bit of wrapping to fit it in, but is otherwise a drop-in replacement. Testing this is hard, as most maths packages blow up as soon as their 80-bit floating-point capability is exceeded. With 128-bit tgammal(), this is easy to do, and this is the range that needs to be checked the most carefully. Using my copy of Maple, I was able to check that the output was within a few ULP of the correct answer, right up to the point of 128-bit over- and underflow. Additionally, the results are no worse, and indeed better than the 80-bit version. Steve Kargl sent me his libm testing code, which I used to verify that the excpetions for certain key values were correct. Tested in this case were +-Inf, +-NaN, +-1 and +-0. Differential Revision: https://reviews.freebsd.org/D44168 Reviewed by: theraven, andrew, imp (cherry-picked from commit e38f2308273c8a51ec45f013d22c963590917cca) --- lib/msun/Makefile | 2 +- lib/msun/ld128/b_tgammal.c | 53 +++++----------------------------------------- lib/msun/man/lgamma.3 | 21 ++++++++---------- 3 files changed, 15 insertions(+), 61 deletions(-) diff --git a/lib/msun/Makefile b/lib/msun/Makefile index 9b64674bbe7d..4b164545f0b8 100644 --- a/lib/msun/Makefile +++ b/lib/msun/Makefile @@ -28,7 +28,7 @@ CFLAGS+= -I${.CURDIR}/x86 CFLAGS+= -I${.CURDIR}/ld80 .elif ${LDBL_PREC} == 113 .PATH: ${.CURDIR}/ld128 -CFLAGS+= -I${.CURDIR}/ld128 +CFLAGS+= -I${.CURDIR}/ld128 -I${SRCTOP}/contrib/arm-optimized-routines/math .endif CFLAGS+= -I${.CURDIR}/${ARCH_SUBDIR} diff --git a/lib/msun/ld128/b_tgammal.c b/lib/msun/ld128/b_tgammal.c index 4bae4f3aded6..6df7264a4c9e 100644 --- a/lib/msun/ld128/b_tgammal.c +++ b/lib/msun/ld128/b_tgammal.c @@ -1,55 +1,12 @@ /*- * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2013 David Chisnall - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * Copyright (c) 2024 The FreeBSD Foundation */ -#include -#include - /* - * If long double is not the same size as double, then these will lose - * precision and we should emit a warning whenever something links against - * them. + * This is a pure C function generously donated by ARM. + * See src/contrib/arm-optimized-routines/math/tgamma128.[ch]. */ -#if (LDBL_MANT_DIG > 53) -#define WARN_IMPRECISE(x) \ - __warn_references(x, # x " has lower than advertised precision"); -#else -#define WARN_IMPRECISE(x) -#endif -/* - * Declare the functions as weak variants so that other libraries providing - * real versions can override them. - */ -#define DECLARE_WEAK(x)\ - __weak_reference(imprecise_## x, x);\ - WARN_IMPRECISE(x) - -#define DECLARE_IMPRECISE(f) \ - long double imprecise_ ## f ## l(long double v) { return f(v); }\ - DECLARE_WEAK(f ## l) - -DECLARE_IMPRECISE(tgamma); +#define tgamma128 tgammal +#include "tgamma128.c" diff --git a/lib/msun/man/lgamma.3 b/lib/msun/man/lgamma.3 index cf80c9e7f365..41d680e41bda 100644 --- a/lib/msun/man/lgamma.3 +++ b/lib/msun/man/lgamma.3 @@ -25,9 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" from: @(#)lgamma.3 6.6 (Berkeley) 12/3/92 -.\" -.Dd December 8, 2017 +.Dd April 12, 2024 .Dt LGAMMA 3 .Os .Sh NAME @@ -169,15 +167,6 @@ non-positive integers. For large non-integer negative values, .Fn tgamma will underflow. -.Sh BUGS -To conform with newer C/C++ standards, a stub implementation for -.Nm tgammal -was committed to the math library, where -.Nm tgammal -is mapped to -.Nm tgamma . -Thus, the numerical accuracy is at most that of the 53-bit double -precision implementation. .Sh SEE ALSO .Xr math 3 .Sh STANDARDS @@ -214,3 +203,11 @@ The .Fn tgamma function appeared in .Fx 5.0 . +The 128-bit +.Ft long double +version of +.Fn tgammal +replaced the 80-bit stub version in +version in +.Fx 14.1 , +thanks to an appropriate implementation from Arm.