public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Steve Kargl <sgk@troutmask.apl.washington.edu>
To: fortran@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: [Fortran] half-cycle trig functions and atan[d] fixes
Date: Sat, 20 Jan 2024 12:10:11 -0800	[thread overview]
Message-ID: <Zawoo1Ofk56wNa7m@troutmask.apl.washington.edu> (raw)

All, 

I have attached a new patch to 

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113152

which addresses the following issues.

PR113152 -- implement half-cycle trigonometric functions
PR113412 -- better error message for atan(y,x)
PR113413 -- implement atand(y,x)

The patch clocks in at 3488 lines, so will not be attached
here.   

There are a few items that may need some explanation.  First, some
(if not all) of the half-cycle functions are contained in ISO/IEC
TS 18661-4, IEEE754-2008, and now Fortran 2023.  The patch assumes
that an OS's libm may/will contain cospi(), etc. (see for example
FreeBSD's libm).  If these are not in libm, then fallback routines
are provided by libgfortran.  The fallback routines have seen limited
testing, so your mileage may vary.  Second, I have no idea what REAL17
entails; however, I provide untested routines in trigpi_fallback2.F90
where I use REAL(16) in the declarations (yikes).  Third, MPFR provides
half-cycle functions in version 4.2.0 (and later).  For simplicifation,
the patch checks for an adequate MPFR version, if an older version is
found fallback algorithms are used.  These have had limited testing.

The patch appears to pass regression testing. Hopefully, someone will
find time to test and commit the patch.  The remainder is an attempt
to write ChangeLog entries.

gcc/fortran:

	* gfortran.h (gfc_isym_id): Add GFC_ISYM_ACOSPI, GFC_ISYM_ASINPI,
	GFC_ISYM_ATANPI, GFC_ISYM_ATAN2PI, GFC_ISYM_COSPI, GFC_ISYM_SINPI, and
	GFC_ISYM_TANPI
	* intrinsic.cc (do_check): Whitespace and typo in comments.
	(add_functions): Add two-argument form of ATAND.  Add half-cycle 
	trigonometric functions ACOSPI, ASINPI, ATANPI, ATAN2PI, COSPI,
	SINPI, and TANPI.
	(sort_actual): Generate sensible error messages for two argument
	versions of ATAN, ATAND, and ATANPI.
	* intrinsic.h: New prototypes for gfc_simplify_acospi, 
	gfc_simplify_asinpi, gfc_simplify_atanpi, gfc_simplify_atan2pi,
	gfc_simplify_cospi, gfc_simplify_sinpi, gfc_simplify_tanpi,
	gfc_resolve_acospi, gfc_resolve_asinpi, gfc_resolve_atanpi,
	gfc_resolve_atan2pi, gfc_resolve_cospi, gfc_resolve_sinpi, and
	gfc_resolve_tanpi
	* intrinsic.texi: Document new functions ACOSPI, ASINPI, ATANPI,
	ATAN2PI, COSPI, SINPI, and TANPI.  Put the ATAN* family of functions
	in lexigraphical order.
	* iresolve.cc (gfc_resolve_acospi, gfc_resolve_asinpi,
	gfc_resolve_atanpi, gfc_resolve_atan2pi, gfc_resolve_cospi,
	gfc_resolve_sinpi, gfc_resolve_tanpi):  New functions.
	* simplify.cc (gfc_simplify_acospi, gfc_simplify_asinpi,
	gfc_simplify_atanpi, gfc_simplify_atan2pi, gfc_simplify_cospi,
	gfc_simplify_sinpi, gfc_simplify_tanpi): New functions.
	Introduce MPFR_HALF_CYCLE macros to use MPFR half-cycle functions
	if available.
	* trans-intrinsic.cc: Declare asinpi, acospi, atanpi, atan2pi, sinpi, 
	cospi, and tanpi as LIB_FUNCTION's.

libgfortran:

	*Makefile.am: New files trigpi.c, trigpi_fallback1.c, and
	trigpi_fallback2.F90
	* configure.ac: Check libm for float, double, and long double
	functions for asinpi, acospi, atanpi, atan2pi, sinpi, cospi, and
	tanpi
	* Makefile.in: Regenerated.
	* config.h.in: Ditto.
	* configure: Ditto.
	* gfortran.map: Add GFORTRAN_14 section to expose the library
	symbols.
	* trigpi.c: Fallback implementations of the half-cycle trigonometric
	functions.
	* trigpi_fallback1.c: Fallback functions for float, double, and
	long double routines if libm does provide them.
	* trigpi_fallback2.F90: REAL(16)/REAL(17?) fallback implementations
	of the half-cycle trigonometric functions.

-- 
Steve

             reply	other threads:[~2024-01-20 20:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-20 20:10 Steve Kargl [this message]
2024-01-23  9:08 ` FX Coudert
2024-01-23 11:37   ` Janne Blomqvist
2024-01-23 17:30     ` Steve Kargl
2024-01-24  6:21     ` Steve Kargl
2024-01-24  8:28       ` FX Coudert
2024-01-24  9:13         ` Janne Blomqvist
2024-01-24 17:23           ` Harald Anlauf
2024-01-24 19:28           ` Steve Kargl
2024-01-23 14:40   ` Steve Kargl
2024-01-23 17:21     ` Steve Kargl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zawoo1Ofk56wNa7m@troutmask.apl.washington.edu \
    --to=sgk@troutmask.apl.washington.edu \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).