From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 2BECA3858D39; Wed, 27 Dec 2023 01:24:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2BECA3858D39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1703640272; bh=eNVW07xyH9TnyaAUjgDvc90gHNoLxBfTubZgqobL9l0=; h=From:To:Subject:Date:From; b=lxJbAUmXH9ae61w1koy8rK3GOtfV70WaXKpYGrqQxohBnzjQc2WFthcgseAmq2bKC wbDxmbnHGZf5sQUUmUPl9940yqdQv/Xhc74S2Cc6OLd5PN6gaEhXH1q/VYOyf9czfq /L2NJ/SxFLqb+dKu3/socyWOpeln9iCiFRntRmkE= From: "kargl at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/113152] New: Fortran 2023 half-cycle trigonometric functions Date: Wed, 27 Dec 2023 01:24:29 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 13.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: kargl at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D113152 Bug ID: 113152 Summary: Fortran 2023 half-cycle trigonometric functions Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: kargl at gcc dot gnu.org Target Milestone: --- Created attachment 56949 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D56949&action=3Dedit patch with implementation The attach patch implements the half-cycle trigonometric functions that are now contained within Fortran 2023. There a few things to note. 1) IEEE 754-2008, ISO/IEC TS 18661-4, C23, and Fortran 2023 all contain these functions. This likely means that the functions acospi(), asinpi(= ), ..., tanpi() may be available as part of an operating system's libm. In fact, FreeBSD has implementations of cospi, sinpi, and tanpi in libm, and these conform to the requirements of IEEE 754-2008 and ISO/IEC TS 18661-= 4. The file libgfortran/intrinsics/trigpi_fallback1.c provides fallbacks for float, double, and long double functions. As I don't know the internals for libquadmath or ibm double-double, the REAL(16) (and GFC_REAL_17) fallback functions are in libgfortran/intrinsics/trigpi_fallback1.F90. I have tested REAL(16) that sits on top of libquadmath. I have not test= ed the double-double situation. Finally, the fallback functions do not go to any length in meeting all of the requirements of IEEE 754-2008. For example, sinpi(n+0.5) is exactly +-1 for representable integer n. The fallbacks may raise an FE_INEXACT exception.=20 2) I tried adding math builtins in gcc/fortran/mathbuiltins.def to directly map to libm functions, but this ultimately led to much frustration. I g= ave up and wrap, for example, cospi() in _gfortran_cospi_r8(). So, there is= a level of in-direction. This is done in libgfortran/intrinsics/trigpi.c. Someone smarter than I can do the math builtins. 3) I tried inserting GFC_ISYM_ACOSPI, ..., GFC_ISYM_TANPI in alphabetical order in 'enum gfc_isym_id' of gfortran.h. This runs into some obscure issue with libgomp where C_ASSOCIATED is no longer recognized. So, I placed the new members of the enum at its end. 4) I don't use git. I tried to do 'git add libgfortran/intrinsics/trigpi\*' followed by 'git commit libgfortran/intrinsics/trigpi\*', and then=20 finally 'git diff > z_halfcycle.diff'. This does not generate one=20 unified diff file. Sigh. I'll attach the new files along with the mangled diff.=