[PATCH v3 2/3] Add default implementation of fenv.h and all methods
Brian Inglis
Brian.Inglis@SystematicSw.ab.ca
Thu Aug 8 00:01:00 GMT 2019
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.
More information about the Newlib
mailing list