bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] ieee754-h: port to Android NDK r26


From: Paul Eggert
Subject: [PATCH] ieee754-h: port to Android NDK r26
Date: Mon, 3 Jun 2024 22:05:43 -0700

Problem reported by Po Lu in:
https://lists.gnu.org/r/bug-gnulib/2024-06/msg00015.html
* lib/ieee754.in.h (_IEEE754_BYTE_ORDER, _IEEE754_BIG_ENDIAN)
(_IEEE754_LITTLE_ENDIAN, _IEEE754_FLOAT_WORD_ORDER): New macros.
All uses of __BYTE_ORDER, __BIG_ENDIAN, __LITTLE_ENDIAN,
__FLOAT_WORD_ORDER changed to use these new macros.
[!_GL_GNULIB_HEADER]: Include bits/endian.h, not endian.h,
as that’s what glibc does now.
[_GL_GNULIB_HEADER]: Include endian.h instead of rolling our own.
(__BEGIN_DECLS, __END_DECLS): Remove.  All uses replaced
by definiens.
* modules/ieee754-h (Depends-on): Add endian.
---
 ChangeLog         | 16 +++++++++++
 lib/ieee754.in.h  | 69 +++++++++++++++++++++--------------------------
 modules/ieee754-h |  1 +
 3 files changed, 48 insertions(+), 38 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ddc76b5201..bd38e2a79d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2024-06-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       ieee754-h: port to Android NDK r26
+       Problem reported by Po Lu in:
+       https://lists.gnu.org/r/bug-gnulib/2024-06/msg00015.html
+       * lib/ieee754.in.h (_IEEE754_BYTE_ORDER, _IEEE754_BIG_ENDIAN)
+       (_IEEE754_LITTLE_ENDIAN, _IEEE754_FLOAT_WORD_ORDER): New macros.
+       All uses of __BYTE_ORDER, __BIG_ENDIAN, __LITTLE_ENDIAN,
+       __FLOAT_WORD_ORDER changed to use these new macros.
+       [!_GL_GNULIB_HEADER]: Include bits/endian.h, not endian.h,
+       as that’s what glibc does now.
+       [_GL_GNULIB_HEADER]: Include endian.h instead of rolling our own.
+       (__BEGIN_DECLS, __END_DECLS): Remove.  All uses replaced
+       by definiens.
+       * modules/ieee754-h (Depends-on): Add endian.
+
 2024-06-03  Bruno Haible  <bruno@clisp.org>
 
        readlinkat: Work around a Cygwin 3.3.6 bug.
diff --git a/lib/ieee754.in.h b/lib/ieee754.in.h
index 805048ca9f..4dd0ff55d2 100644
--- a/lib/ieee754.in.h
+++ b/lib/ieee754.in.h
@@ -16,37 +16,28 @@
    <https://www.gnu.org/licenses/>.  */
 
 #ifndef _IEEE754_H
-
 #define _IEEE754_H 1
 
 #ifndef _GL_GNULIB_HEADER
 /* Ordinary glibc usage.  */
 # include <features.h>
-# include <endian.h>
+# include <bits/endian.h>
+# define _IEEE754_BYTE_ORDER __BYTE_ORDER
+# define _IEEE754_BIG_ENDIAN __BIG_ENDIAN
+# define _IEEE754_LITTLE_ENDIAN __LITTLE_ENDIAN
+# define _IEEE754_FLOAT_WORD_ORDER __FLOAT_WORD_ORDER
 #else
 /* Gnulib usage.  */
-# ifndef __BEGIN_DECLS
-#  ifdef __cplusplus
-#   define __BEGIN_DECLS       extern "C" {
-#   define __END_DECLS         }
-#  else
-#   define __BEGIN_DECLS
-#   define __END_DECLS
-#  endif
-# endif
-# ifndef __FLOAT_WORD_ORDER
-#  define __LITTLE_ENDIAN      1234
-#  define __BIG_ENDIAN         4321
-#  ifdef WORDS_BIGENDIAN
-#   define __BYTE_ORDER __BIG_ENDIAN
-#  else
-#   define __BYTE_ORDER __LITTLE_ENDIAN
-#  endif
-#  define __FLOAT_WORD_ORDER __BYTE_ORDER
-# endif
+# include <endian.h>
+# define _IEEE754_BYTE_ORDER BYTE_ORDER
+# define _IEEE754_BIG_ENDIAN BIG_ENDIAN
+# define _IEEE754_LITTLE_ENDIAN LITTLE_ENDIAN
+# define _IEEE754_FLOAT_WORD_ORDER BYTE_ORDER
 #endif
 
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 union ieee754_float
   {
@@ -55,12 +46,12 @@ union ieee754_float
     /* This is the IEEE 754 single-precision format.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:8;
        unsigned int mantissa:23;
 #endif                         /* Big endian.  */
-#if    __BYTE_ORDER == __LITTLE_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
        unsigned int mantissa:23;
        unsigned int exponent:8;
        unsigned int negative:1;
@@ -70,13 +61,13 @@ union ieee754_float
     /* This format makes it easier to see if a NaN is a signalling NaN.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:8;
        unsigned int quiet_nan:1;
        unsigned int mantissa:22;
 #endif                         /* Big endian.  */
-#if    __BYTE_ORDER == __LITTLE_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
        unsigned int mantissa:22;
        unsigned int quiet_nan:1;
        unsigned int exponent:8;
@@ -95,15 +86,15 @@ union ieee754_double
     /* This is the IEEE 754 double-precision format.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:11;
        /* Together these comprise the mantissa.  */
        unsigned int mantissa0:20;
        unsigned int mantissa1:32;
 #endif                         /* Big endian.  */
-#if    __BYTE_ORDER == __LITTLE_ENDIAN
-# if   __FLOAT_WORD_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
+# if   _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int mantissa0:20;
        unsigned int exponent:11;
        unsigned int negative:1;
@@ -121,7 +112,7 @@ union ieee754_double
     /* This format makes it easier to see if a NaN is a signalling NaN.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:11;
        unsigned int quiet_nan:1;
@@ -129,7 +120,7 @@ union ieee754_double
        unsigned int mantissa0:19;
        unsigned int mantissa1:32;
 #else
-# if   __FLOAT_WORD_ORDER == __BIG_ENDIAN
+# if   _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int mantissa0:19;
        unsigned int quiet_nan:1;
        unsigned int exponent:11;
@@ -157,15 +148,15 @@ union ieee854_long_double
     /* This is the IEEE 854 double-extended-precision format.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:15;
        unsigned int empty:16;
        unsigned int mantissa0:32;
        unsigned int mantissa1:32;
 #endif
-#if    __BYTE_ORDER == __LITTLE_ENDIAN
-# if   __FLOAT_WORD_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
+# if   _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int exponent:15;
        unsigned int negative:1;
        unsigned int empty:16;
@@ -184,7 +175,7 @@ union ieee854_long_double
     /* This is for NaNs in the IEEE 854 double-extended-precision format.  */
     struct
       {
-#if    __BYTE_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:15;
        unsigned int empty:16;
@@ -193,8 +184,8 @@ union ieee854_long_double
        unsigned int mantissa0:30;
        unsigned int mantissa1:32;
 #endif
-#if    __BYTE_ORDER == __LITTLE_ENDIAN
-# if   __FLOAT_WORD_ORDER == __BIG_ENDIAN
+#if    _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
+# if   _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
        unsigned int exponent:15;
        unsigned int negative:1;
        unsigned int empty:16;
@@ -217,6 +208,8 @@ union ieee854_long_double
 
 #define IEEE854_LONG_DOUBLE_BIAS 0x3fff
 
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* ieee754.h */
diff --git a/modules/ieee754-h b/modules/ieee754-h
index 4c1b7234d9..cd84128c81 100644
--- a/modules/ieee754-h
+++ b/modules/ieee754-h
@@ -6,6 +6,7 @@ lib/ieee754.in.h
 m4/ieee754-h.m4
 
 Depends-on:
+endian           [$GL_GENERATE_IEEE754_H]
 gen-header
 
 configure.ac:
-- 
2.45.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]