Re: [PATCH v3 2/3] Add default implementation of fenv.h and all methods
Joel Sherrill <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAF9ehCXw2QNdGSg0sxGykeqX-0CAejq1jq4k-Egj7WDeA3-VQA@mail.gmail.com> |
On Wed, Aug 7, 2019 at 8:27 AM Howland, Craig D. - US via newlib < [email protected]> wrote: > > > From: [email protected] <[email protected]> on > behalf of Corinna Vinschen <[email protected]> > > Sent: Wednesday, August 7, 2019 4:36 AM > > To: Joel Sherrill > > Cc: [email protected] > > Subject: Re: [PATCH v3 2/3] Add default implementation of fenv.h and all > methods > > > > Hi Joel, > > > > On Aug 6 14:13, Joel Sherrill wrote: > > > [...] > > > +//#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) > > > +#define FE_ALL_EXCEPT 0 /* NONE SUPPORTED IN PLACEHOLDER > TEMPLATE */ > > > + > > > +/* > > > + * 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 > > > + > > > +/* > > > + * 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*() <https://pubs.opengroup.org/onlinepubs/009695399/functions/feclearexcept.html> , *fegetexceptflag*() <https://pubs.opengroup.org/onlinepubs/009695399/functions/fegetexceptflag.html> , *feraiseexcept*() <https://pubs.opengroup.org/onlinepubs/009695399/functions/feraiseexcept.html> , *fesetexceptflag*() <https://pubs.opengroup.org/onlinepubs/009695399/functions/fesetexceptflag.html>, and *fetestexcept*() <https://pubs.opengroup.org/onlinepubs/009695399/functions/fetestexcept.html>. Each expands to an integer constant expression with values such that bitwise-inclusive ORs of all combinations of the constants result in distinct values." I don't mind changing size_t to int. That seems reasonable --joel > > > > > Thanks, > > Corinna > Craig