This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH v3 2/3] Add default implementation of fenv.h and all methods
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.