From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92899 invoked by alias); 8 Aug 2019 00:01:25 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Received: (qmail 88706 invoked by uid 89); 8 Aug 2019 00:01:06 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 spammy=H*i:sk:CAF9ehC, H*f:sk:CAF9ehC X-HELO: smtp-out-so.shaw.ca Received: from smtp-out-so.shaw.ca (HELO smtp-out-so.shaw.ca) (64.59.136.137) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Aug 2019 00:01:05 +0000 Received: from [192.168.1.114] ([24.64.172.44]) by shaw.ca with ESMTP id vVrTh7SRkIhW9vVrUhXjx8; Wed, 07 Aug 2019 18:00:56 -0600 Reply-To: Brian.Inglis@SystematicSw.ab.ca Subject: Re: [PATCH v3 2/3] Add default implementation of fenv.h and all methods To: newlib@sourceware.org References: <1565118798-16391-1-git-send-email-joel@rtems.org> <1565118798-16391-3-git-send-email-joel@rtems.org> <20190807083634.GA11632@calimero.vinschen.de> <1565184419338.12435@caci.com> From: Brian Inglis Openpgp: preference=signencrypt Message-ID: <7c7366c4-17be-0b8e-3f79-4971e741253f@SystematicSw.ab.ca> Date: Thu, 08 Aug 2019 00:01:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2019/txt/msg00430.txt.bz2 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 ** 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.