[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.