public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
From: Brian Inglis <Brian.Inglis@SystematicSw.ab.ca>
To: newlib@sourceware.org
Subject: Re: [PATCH v3 2/3] Add default implementation of fenv.h and all methods
Date: Thu, 08 Aug 2019 00:01:00 -0000	[thread overview]
Message-ID: <7c7366c4-17be-0b8e-3f79-4971e741253f@SystematicSw.ab.ca> (raw)
In-Reply-To: <CAF9ehCXw2QNdGSg0sxGykeqX-0CAejq1jq4k-Egj7WDeA3-VQA@mail.gmail.com>

On 2019-08-07 07:28, Joel Sherrill wrote:
> On Wed, Aug 7, 2019 at 8:27 AM Howland, Craig D. via newlib wrote:
>> On Wednesday, August 7, 2019 4:36 AM Corinna Vinschen wrote:
>>> On Aug  6 14:13, Joel Sherrill wrote:

Wouldn't it be clearer to conditionally define those constants based on some
obviously fictional symbol e.g.

#if FLOATING_POINT_EXCEPTIONS_SUPPORTED	// replace by implementation symbol
/*
 * The following macros are to be defined if the respective exception is
 * supported by the implementation, each with a unique bit mask:
 *
 *	FE_DIVBYZERO
 *	FE_INEXACT
 *	FE_INVALID
 *	FE_OVERFLOW
 *	FE_UNDERFLOW
 *
 * Other implementation-specific exceptions may be defined, and must start
 * with FE_ followed by a capital letter.
 *
 * FE_ALL_EXCEPT must be defined as the logical OR of all exceptions.
 */
#define FE_DIVBYZERO 0x00000001
#define FE_INEXACT   0x00000002
#define FE_INVALID   0x00000004
#define FE_OVERFLOW  0x00000008
#define FE_UNDERFLOW 0x00000010

#define FE_ALL_EXCEPT \
	(FE_DIVBYZERO|FE_INEXACT|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW)

/*
 * The following macros are to be defined if the respective rounding direction
 * is supported by the implementation via the fegetround() and fesetround()
 * functions, each with a unique positive value.
 *
 *   FE_DOWNWARD
 *   FE_TONEAREST
 *   FE_TOWARDZERO
 *   FE_UPWARD
 *
 * Other implementation-specific rounding modes may be defined, and must start
 * with FE_ followed by a capital letter.
 */
#define FE_DOWNWARD        1
#define FE_TONEAREST       2
#define FE_TOWARDZERO      3
#define FE_UPWARD          4

#endif // FLOATING_POINT_EXCEPTIONS_SUPPORTED - replace by implementation symbol

#define FE_ALL_EXCEPT 0      /* NONE SUPPORTED IN PLACEHOLDER TEMPLATE */

>>>> +/*
>>>> + * The following typedefs are required. See the C and POSIX standards
>> for
>>>> + * details:
>>>> + *
>>>> + *   fenv_t
>>>> + *   fexcept_t
>>>> + */
>>>> +typedef size_t fenv_t;
>>>> +typedef size_t fexcept_t;

>>> While these types are defined, the above macros are not.  Wouldn't
>>> it make sense to define all or nothing by default?

>> The standards require the types to be defined, but the individual macros
>> are to be defined only if supported by the implementation.  The
>> default implementation being provided supports nothing, only
>> returning error, so it is proper for them to not be defined.  But having
>> them there commented out to serve as a template seems to be a good thing.

> Quick reply. :)
> This is the POSIX language:
> "The *<fenv.h>* header shall define the following constants if and only if
> the implementation supports the floating-point exception by means of the
> floating-point functions *feclearexcept*(), *fegetexceptflag*(),
> *feraiseexcept*(), *fesetexceptflag*() and *fetestexcept*().
> Each expands to an integer constant expression with values such that
> bitwise-inclusive ORs of all combinations of the constants result in
> distinct values."

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.

  reply	other threads:[~2019-08-08  0:01 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-06 19:13 [PATCH v3 0/3] fenv stubs and documentation series Joel Sherrill
2019-08-06 19:13 ` [PATCH v3 2/3] Add default implementation of fenv.h and all methods Joel Sherrill
2019-08-07  8:36   ` Corinna Vinschen
2019-08-07 13:27     ` Howland, Craig D. - US via newlib
2019-08-07 13:29       ` Joel Sherrill
2019-08-08  0:01         ` Brian Inglis [this message]
2019-08-08  3:24           ` Howland, Craig D. - US via newlib
2019-08-06 19:13 ` [PATCH v3 3/3] Regenerated files from fenv.h addition Joel Sherrill
2019-08-06 19:13 ` [PATCH v3 1/3] Miscellaneous Makefile.in regenerated Joel Sherrill

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=7c7366c4-17be-0b8e-3f79-4971e741253f@SystematicSw.ab.ca \
    --to=brian.inglis@systematicsw.ab.ca \
    --cc=newlib@sourceware.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).