[PATCH V3] Aarch32/64: Support __FLT_EVAL_METHOD__ values other than 0, 1, 2
Andrea Corallo <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
Jeff Johnston <[email protected]> writes: >> On Fri, Apr 8, 2022 at 6:09 AM Richard Earnshaw <mailto:[email protected]> wrote: >> >> I think the hunks in machine/ieeefp.h warrant a comment as to why we >> can't rely on __FLT_EVAL_METHOD__. Other than that it LGTM, but you'll >> need Corinna or Jeff to approve. > > R. > Please add the comment as suggested by Richard and it will be pushed.-- Jeff J. Hi all, please find attached the updated version of the patch implementing Richard's suggestion. Best Regards Andrea PS I've no write access to newlib's repo so feel free to push it if okay.
0001-PATH-Aarch32-64-Support-__FLT_EVAL_METHOD__-values-o.patch
(text/plain, 2.5 KB)
From a70d1a11c53d6d6797c5df859dea5b1e584fa9ac Mon Sep 17 00:00:00 2001 From: Andrea Corallo <[email protected]> Date: Wed, 30 Mar 2022 15:40:59 +0200 Subject: [PATCH] [PATH] Aarch32/64: Support __FLT_EVAL_METHOD__ values other than 0, 1, 2 2022-03-30 Andrea Corallo <[email protected]> * libc/include/machine/ieeefp.h (__FLOAT_TYPE, __DOUBLE_TYPE): New macros. * libc/include/math.h: Uses __DOUBLE_TYPE __FLOAT_TYPE to define double_t float_t if possible. --- newlib/libc/include/machine/ieeefp.h | 14 ++++++++++++++ newlib/libc/include/math.h | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/newlib/libc/include/machine/ieeefp.h b/newlib/libc/include/machine/ieeefp.h index 4dc13828c..1e0680432 100644 --- a/newlib/libc/include/machine/ieeefp.h +++ b/newlib/libc/include/machine/ieeefp.h @@ -90,6 +90,13 @@ #ifndef __SOFTFP__ # define _SUPPORTS_ERREXCEPT #endif +/* As per ISO/IEC TS 18661 '__FLT_EVAL_METHOD__' will be defined to 16 + (if compiling with +fp16 support) so it can't be used by math.h to + define float_t and double_t. For values of '__FLT_EVAL_METHOD__' + other than 0, 1, 2 the definition of float_t and double_t is + implementation-defined. */ +#define __DOUBLE_TYPE double +#define __FLOAT_TYPE float #endif #if defined (__aarch64__) @@ -102,6 +109,13 @@ #ifdef __ARM_FP # define _SUPPORTS_ERREXCEPT #endif +/* As per ISO/IEC TS 18661 '__FLT_EVAL_METHOD__' will be defined to 16 + (if compiling with +fp16 support) so it can't be used by math.h to + define float_t and double_t. For values of '__FLT_EVAL_METHOD__' + other than 0, 1, 2 the definition of float_t and double_t is + implementation-defined. */ +#define __DOUBLE_TYPE double +#define __FLOAT_TYPE float #endif #ifdef __epiphany__ diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index ba1a8a17e..af5b5e653 100644 --- a/newlib/libc/include/math.h +++ b/newlib/libc/include/math.h @@ -158,6 +158,15 @@ extern int isnan (double); #else /* Implementation-defined. Assume float_t and double_t have been * defined previously for this configuration (e.g. config.h). */ + + /* If __DOUBLE_TYPE is defined (__FLOAT_TYPE is then supposed to be + defined as well) float_t and double_t definition is suggested by + an arch specific header. */ + #ifdef __DOUBLE_TYPE + typedef __DOUBLE_TYPE double_t; + typedef __FLOAT_TYPE float_t; + #endif + /* Assume config.h has provided these types. */ #endif #else /* Assume basic definitions. */ -- 2.25.1