Files
RedBear-OS/local/recipes/dev/libtool/source/gnulib/lib/fenv.in.h
T

877 lines
25 KiB
C

/* A GNU-like <fenv.h>.
Copyright (C) 1997-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Based on glibc/sysdeps/<cpu>/bits/fenv.h. */
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
#ifndef _@GUARD_PREFIX@_FENV_H
/* The include_next requires a split double-inclusion guard. */
#if @HAVE_FENV_H@
# @INCLUDE_NEXT@ @NEXT_FENV_H@
#endif
#ifndef _@GUARD_PREFIX@_FENV_H
#define _@GUARD_PREFIX@_FENV_H
/* This file uses GNULIB_POSIXCHECK. */
#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */
/* We cannot implement the #pragmas here; this needs to be done in the
compiler. */
/* ISO C 99 § 7.6.4 Environment
ISO C 23 § 7.6.6 Environment */
#if !@HAVE_FENV_H@
# if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86)
typedef struct
{
/* 7 32-bit words, see <https://stackoverflow.com/questions/10337750/> */
unsigned short __control_word; /* fctrl register */
unsigned short __reserved1;
unsigned short __status_word; /* fstat register */
unsigned short __reserved2;
unsigned short __tags;
unsigned short __reserved3;
unsigned int __instruction_pointer; /* eip register */
unsigned short __instruction_selector; /* cs register */
unsigned int __opcode : 11;
unsigned int __reserved4 : 5;
unsigned int __data_pointer;
unsigned short __data_selector;
unsigned short __reserved5;
# ifdef __x86_64__
unsigned int __mxcsr; /* mxcsr register */
# endif
}
fenv_t;
# elif defined __aarch64__ /* arm64 */
typedef struct
{
unsigned int __fpcr; /* fpcr register */
unsigned int __fpsr; /* fpsr register */
}
fenv_t;
# elif defined __arm__
typedef struct
{
unsigned int __cw; /* fpscr register */
}
fenv_t;
# elif defined __alpha
typedef unsigned long fenv_t;
# elif defined __hppa
typedef struct
{
unsigned int __status_word; /* floating point status register */
} fenv_t;
# elif defined __ia64__
typedef unsigned long fenv_t; /* fpsr = floating point status register */
# elif defined __m68k__
typedef struct
{
unsigned int __control_register; /* fpcr = floating point control register */
unsigned int __status_register; /* fpsr = floating point status register */
unsigned int __instruction_address; /* floating point instruction register */
}
fenv_t;
# elif defined __mips__ || defined __loongarch__
typedef struct
{
unsigned int __fp_control_register; /* floating point control and status register */
}
fenv_t;
# elif defined __powerpc__
typedef double /* yuck! */ fenv_t; /* fpscr register */
# elif defined __riscv
typedef unsigned int fenv_t; /* fcsr register */
# elif defined __s390__ || defined __s390x__
typedef struct
{
unsigned int __fpc; /* fpc = floating point control register */
}
fenv_t;
# elif defined __sh__
typedef struct
{
unsigned int __fpscr; /* fpscr register */
}
fenv_t;
# elif defined __sparc
typedef unsigned long fenv_t; /* fsr = floating point state register */
#else
/* A dummy fallback. */
typedef unsigned long fenv_t;
# endif
# define FE_DFL_ENV ((const fenv_t *) (-1))
#else
# if !HAVE_FE_DFL_ENV
# undef FE_DFL_ENV
# define FE_DFL_ENV ((const fenv_t *) (-1))
# endif
#endif
#if @GNULIB_FEGETENV@
/* Stores the thread's current floating-point environment in *ENVP and
returns zero. Upon failure, it returns non-zero. */
# if @REPLACE_FEGETENV@ || (!@HAVE_FEGETENV@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fegetenv
# define fegetenv rpl_fegetenv
# endif
_GL_FUNCDECL_RPL (fegetenv, int, (fenv_t *envp), );
_GL_CXXALIAS_RPL (fegetenv, int, (fenv_t *envp));
# else
# if !@HAVE_FEGETENV@
_GL_FUNCDECL_SYS (fegetenv, int, (fenv_t *envp), );
# endif
_GL_CXXALIAS_SYS (fegetenv, int, (fenv_t *envp));
# endif
_GL_CXXALIASWARN (fegetenv);
#endif
#if @GNULIB_FESETENV@
/* Activates the given object *ENVP as the thread's current floating-point
environment, without raising floating-point exceptions, and returns zero.
ENVP may be FE_DFL_ENV.
Upon failure, it returns non-zero. */
# if @REPLACE_FESETENV@ || (!@HAVE_FESETENV@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fesetenv
# define fesetenv rpl_fesetenv
# endif
_GL_FUNCDECL_RPL (fesetenv, int, (fenv_t const *envp), );
_GL_CXXALIAS_RPL (fesetenv, int, (fenv_t const *envp));
# else
# if !@HAVE_FESETENV@
_GL_FUNCDECL_SYS (fesetenv, int, (fenv_t const *envp), );
# endif
_GL_CXXALIAS_SYS (fesetenv, int, (fenv_t const *envp));
# endif
_GL_CXXALIASWARN (fesetenv);
#endif
#if @GNULIB_FEUPDATEENV@
/* Activates the given object *ENVP as the thread's current floating-point
environment, raising exactly those floating-point exceptions that were
raised before, and returns zero.
ENVP may be FE_DFL_ENV.
Upon failure, it returns non-zero. */
# if @REPLACE_FEUPDATEENV@ || (!@HAVE_FEUPDATEENV@ && (defined __FreeBSD__ || defined _MSC_VER)) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef feupdateenv
# define feupdateenv rpl_feupdateenv
# endif
_GL_FUNCDECL_RPL (feupdateenv, int, (fenv_t const *envp), );
_GL_CXXALIAS_RPL (feupdateenv, int, (fenv_t const *envp));
# else
# if !@HAVE_FEUPDATEENV@
_GL_FUNCDECL_SYS (feupdateenv, int, (fenv_t const *envp), );
# endif
_GL_CXXALIAS_SYS (feupdateenv, int, (fenv_t const *envp));
# endif
_GL_CXXALIASWARN (feupdateenv);
#endif
#if @GNULIB_FEHOLDEXCEPT@
/* Stores the thread's current floating-point environment in *ENVP, clears
the floating-point exception status flags, disables trapping for all
floating-point exceptions, and returns zero. Upon failure, it returns
non-zero. */
# if @REPLACE_FEHOLDEXCEPT@ || (!@HAVE_FEHOLDEXCEPT@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef feholdexcept
# define feholdexcept rpl_feholdexcept
# endif
_GL_FUNCDECL_RPL (feholdexcept, int, (fenv_t *envp), );
_GL_CXXALIAS_RPL (feholdexcept, int, (fenv_t *envp));
# else
# if !@HAVE_FEHOLDEXCEPT@
_GL_FUNCDECL_SYS (feholdexcept, int, (fenv_t *envp), );
# endif
_GL_CXXALIAS_SYS (feholdexcept, int, (fenv_t *envp));
# endif
_GL_CXXALIASWARN (feholdexcept);
#endif
/* ISO C 99 § 7.6.3 Rounding
ISO C 23 § 7.6.5 Rounding */
#if !@HAVE_FENV_H@
# if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86)
/* Attention: MSVC has different values for these macros! */
# define FE_TONEAREST (0 << 10)
# define FE_DOWNWARD (1 << 10)
# define FE_UPWARD (2 << 10)
# define FE_TOWARDZERO (3 << 10)
# elif defined __aarch64__ /* arm64 */
/* Attention: FreeBSD libc has these values shifted right by 22 bits! */
# define FE_TONEAREST (0 << 22)
# define FE_UPWARD (1 << 22)
# define FE_DOWNWARD (2 << 22)
# define FE_TOWARDZERO (3 << 22)
# elif defined __arm__
# define FE_TONEAREST (0 << 22)
# if !defined __SOFTFP__
# define FE_UPWARD (1 << 22)
# define FE_DOWNWARD (2 << 22)
# define FE_TOWARDZERO (3 << 22)
# endif
# elif defined __alpha
# define FE_TOWARDZERO 0
# define FE_DOWNWARD 1
# define FE_TONEAREST 2
# define FE_UPWARD 3
# elif defined __hppa
# define FE_TONEAREST (0 << 9)
# define FE_TOWARDZERO (1 << 9)
# define FE_UPWARD (2 << 9)
# define FE_DOWNWARD (3 << 9)
# elif defined __ia64__
# define FE_TONEAREST 0
# define FE_DOWNWARD 1
# define FE_UPWARD 2
# define FE_TOWARDZERO 3
# elif defined __m68k__
# define FE_TONEAREST (0 << 4)
# define FE_TOWARDZERO (1 << 4)
# define FE_DOWNWARD (2 << 4)
# define FE_UPWARD (3 << 4)
# elif defined __mips__
# define FE_TONEAREST 0
# define FE_TOWARDZERO 1
# define FE_UPWARD 2
# define FE_DOWNWARD 3
# elif defined __loongarch__
# define FE_TONEAREST (0 << 8)
# define FE_TOWARDZERO (1 << 8)
# define FE_UPWARD (2 << 8)
# define FE_DOWNWARD (3 << 8)
# elif defined __powerpc__
/* Attention: AIX has different values for these macros! */
# define FE_TONEAREST 0
# define FE_TOWARDZERO 1
# define FE_UPWARD 2
# define FE_DOWNWARD 3
# elif defined __riscv
/* Attention: FreeBSD libc has these values shifted left by 5 bits! */
# define FE_TONEAREST 0
# define FE_TOWARDZERO 1
# define FE_DOWNWARD 2
# define FE_UPWARD 3
# if 0 /* non-standard */
# define FE_TONEARESTMAXMAGNITUDE 4
# endif
# elif defined __s390__ || defined __s390x__
# define FE_TONEAREST 0
# define FE_TOWARDZERO 1
# define FE_UPWARD 2
# define FE_DOWNWARD 3
# elif defined __sh__
# define FE_TONEAREST 0
# define FE_TOWARDZERO 1
# elif defined __sparc
/* Attention: FreeBSD libc has these values shifted right by 30 bits! */
# define FE_TONEAREST (0U << 30)
# define FE_TOWARDZERO (1U << 30)
# define FE_UPWARD (2U << 30)
# define FE_DOWNWARD (3U << 30)
#else
/* A dummy fallback. */
# define FE_TONEAREST 0
# endif
#endif
#if @GNULIB_FEGETROUND@
/* Returns the current rounding direction. */
# if @REPLACE_FEGETROUND@ || (!@HAVE_FEGETROUND@ && (defined __GLIBC__ || defined __FreeBSD__)) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fegetround
# define fegetround rpl_fegetround
# endif
_GL_FUNCDECL_RPL (fegetround, int, (void), );
_GL_CXXALIAS_RPL (fegetround, int, (void));
# else
# if !@HAVE_FEGETROUND@
_GL_FUNCDECL_SYS (fegetround, int, (void), );
# endif
_GL_CXXALIAS_SYS (fegetround, int, (void));
# endif
_GL_CXXALIASWARN (fegetround);
#endif
#if @GNULIB_FESETROUND@
/* Sets the rounding direction of the current thread.
Returns zero if the argument is valid and the operation was thus successful.
Returns non-zero upon failure. */
# if @REPLACE_FESETROUND@ || (!@HAVE_FESETROUND@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fesetround
# define fesetround rpl_fesetround
# endif
_GL_FUNCDECL_RPL (fesetround, int, (int rounding_direction), );
_GL_CXXALIAS_RPL (fesetround, int, (int rounding_direction));
# else
# if !@HAVE_FESETROUND@
_GL_FUNCDECL_SYS (fesetround, int, (int rounding_direction), );
# endif
_GL_CXXALIAS_SYS (fesetround, int, (int rounding_direction));
# endif
_GL_CXXALIASWARN (fesetround);
#endif
/* ISO C 99 § 7.6.2 Floating-point exceptions
ISO C 23 § 7.6.4 Floating-point exceptions
API without fexcept_t */
#if !@HAVE_FENV_H@
# if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86)
/* Attention: MSVC has different values for these macros! */
# define FE_INVALID (1 << 0)
# if 0 /* non-standard */
# define FE_DENORMAL (1 << 1)
# endif
# define FE_DIVBYZERO (1 << 2)
# define FE_OVERFLOW (1 << 3)
# define FE_UNDERFLOW (1 << 4)
# define FE_INEXACT (1 << 5)
# elif defined __aarch64__ /* arm64 */ || defined __arm__
# define FE_INVALID (1U << 0)
# define FE_DIVBYZERO (1U << 1)
# define FE_OVERFLOW (1U << 2)
# define FE_UNDERFLOW (1U << 3)
# define FE_INEXACT (1U << 4)
# elif defined __alpha
/* Attention: The *BSDs have these values shifted right by 17 bits! */
# define FE_INVALID (1UL << 17)
# define FE_DIVBYZERO (1UL << 18)
# define FE_OVERFLOW (1UL << 19)
# define FE_UNDERFLOW (1UL << 20)
# define FE_INEXACT (1UL << 21)
# if 0 /* non-standard */
# define FE_DENORMAL (1UL << 22)
# endif
# elif defined __hppa
# define FE_INEXACT (1U << 0)
# define FE_UNDERFLOW (1U << 1)
# define FE_OVERFLOW (1U << 2)
# define FE_DIVBYZERO (1U << 3)
# define FE_INVALID (1U << 4)
# elif defined __ia64__
# define FE_INVALID (1UL << 0)
# if 0 /* non-standard */
# define FE_UNNORMAL (1UL << 1)
# endif
# define FE_DIVBYZERO (1UL << 2)
# define FE_OVERFLOW (1UL << 3)
# define FE_UNDERFLOW (1UL << 4)
# define FE_INEXACT (1UL << 5)
# elif defined __m68k__
# define FE_INEXACT (1U << 3)
# define FE_DIVBYZERO (1U << 4)
# define FE_UNDERFLOW (1U << 5)
# define FE_OVERFLOW (1U << 6)
# define FE_INVALID (1U << 7)
# elif defined __mips__
# define FE_INEXACT (1 << 2)
# define FE_UNDERFLOW (1 << 3)
# define FE_OVERFLOW (1 << 4)
# define FE_DIVBYZERO (1 << 5)
# define FE_INVALID (1 << 6)
# elif defined __loongarch__
# define FE_INEXACT (1U << 16)
# define FE_UNDERFLOW (1U << 17)
# define FE_OVERFLOW (1U << 18)
# define FE_DIVBYZERO (1U << 19)
# define FE_INVALID (1U << 20)
# elif defined __powerpc__
# define FE_INEXACT (1U << 25)
# define FE_DIVBYZERO (1U << 26)
# define FE_UNDERFLOW (1U << 27)
# define FE_OVERFLOW (1U << 28)
# define FE_INVALID (1U << 29)
# elif defined __riscv
# define FE_INEXACT (1U << 0)
# define FE_UNDERFLOW (1U << 1)
# define FE_OVERFLOW (1U << 2)
# define FE_DIVBYZERO (1U << 3)
# define FE_INVALID (1U << 4)
# elif defined __s390__ || defined __s390x__
/* Attention: musl libc has these values shifted left by 16 bits! */
# define FE_INEXACT (1U << 3)
# define FE_UNDERFLOW (1U << 4)
# define FE_OVERFLOW (1U << 5)
# define FE_DIVBYZERO (1U << 6)
# define FE_INVALID (1U << 7)
# elif defined __sh__
# define FE_INEXACT (1 << 2)
# define FE_UNDERFLOW (1 << 3)
# define FE_OVERFLOW (1 << 4)
# define FE_DIVBYZERO (1 << 5)
# define FE_INVALID (1 << 6)
# elif defined __sparc
/* Attention: Solaris has these values shifted right by 5 bits! */
# define FE_INEXACT (1UL << 5)
# define FE_DIVBYZERO (1UL << 6)
# define FE_UNDERFLOW (1UL << 7)
# define FE_OVERFLOW (1UL << 8)
# define FE_INVALID (1UL << 9)
# endif
# define FE_ALL_EXCEPT \
(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
#endif
#if @GNULIB_FECLEAREXCEPT@
/* Clears the specified exception flags, and returns 0.
Upon failure, it returns non-zero. */
# if @REPLACE_FECLEAREXCEPT@ || (!@HAVE_FECLEAREXCEPT@ && (defined __GLIBC__ || defined __FreeBSD__)) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef feclearexcept
# define feclearexcept rpl_feclearexcept
# endif
_GL_FUNCDECL_RPL (feclearexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (feclearexcept, int, (int exceptions));
# else
# if !@HAVE_FECLEAREXCEPT@
_GL_FUNCDECL_SYS (feclearexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (feclearexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (feclearexcept);
#endif
#if @GNULIB_FERAISEEXCEPT@
/* Sets the specified exception flags, triggering handlers or traps if enabled,
and returns 0. Upon failure, it returns non-zero. */
# if @REPLACE_FERAISEEXCEPT@ || (!@HAVE_FERAISEEXCEPT@ && (defined __GLIBC__ || defined __FreeBSD__ || defined _MSC_VER)) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef feraiseexcept
# define feraiseexcept rpl_feraiseexcept
# endif
_GL_FUNCDECL_RPL (feraiseexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (feraiseexcept, int, (int exceptions));
# else
# if !@HAVE_FERAISEEXCEPT@
_GL_FUNCDECL_SYS (feraiseexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (feraiseexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (feraiseexcept);
#endif
#if @GNULIB_FETESTEXCEPT@
/* Returns a bitmask of those exception flags among EXCEPTIONS that are
currently set. */
# if @REPLACE_FETESTEXCEPT@ || (!@HAVE_FETESTEXCEPT@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fetestexcept
# define fetestexcept rpl_fetestexcept
# endif
_GL_FUNCDECL_RPL (fetestexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (fetestexcept, int, (int exceptions));
# else
# if !@HAVE_FETESTEXCEPT@
_GL_FUNCDECL_SYS (fetestexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (fetestexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (fetestexcept);
#endif
/* Added in ISO C 23 § 7.6.4 Floating-point exceptions. */
#if @GNULIB_FESETEXCEPT@
/* Sets the specified exception flags, without triggering handlers or traps,
and returns 0. Upon failure, it returns non-zero. */
# if @REPLACE_FESETEXCEPT@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fesetexcept
# define fesetexcept rpl_fesetexcept
# endif
_GL_FUNCDECL_RPL (fesetexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (fesetexcept, int, (int exceptions));
# else
# if !@HAVE_FESETEXCEPT@
_GL_FUNCDECL_SYS (fesetexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (fesetexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (fesetexcept);
#elif defined GNULIB_POSIXCHECK
# undef fesetexcept
# if HAVE_RAW_DECL_FESETEXCEPT
_GL_WARN_ON_USE (fesetexcept, "fesetexcept is unportable - "
"use gnulib module fenv-exceptions-tracking-c23 for portability");
# endif
#endif
/* GNU extensions. */
#if @GNULIB_FEENABLEEXCEPT@
/* Enables trapping for the floating-point exceptions denoted by the bit mask
EXCEPTIONS.
Returns the bit mask of floating-point exceptions for which trapping was
enabled before the call, or -1 upon failure.
Note: This function is a misnomer. It does not enable the specified
floating-point exceptions; it enables *trapping* on them. It should better
be called 'feenabletraps'. */
# if @REPLACE_FEENABLEEXCEPT@ || (!@HAVE_FEENABLEEXCEPT@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef feenableexcept
# define feenableexcept rpl_feenableexcept
# endif
_GL_FUNCDECL_RPL (feenableexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (feenableexcept, int, (int exceptions));
# else
# if !@HAVE_FEENABLEEXCEPT@
_GL_FUNCDECL_SYS (feenableexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (feenableexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (feenableexcept);
#elif defined GNULIB_POSIXCHECK
# undef feenableexcept
# if HAVE_RAW_DECL_FEENABLEEXCEPT
_GL_WARN_ON_USE (feenableexcept, "feenableexcept is unportable - "
"use gnulib module fenv-exceptions-trapping for portability");
# endif
#endif
#if @GNULIB_FEDISABLEEXCEPT@
/* Disables trapping for the floating-point exceptions denoted by the bit mask
EXCEPTIONS.
Returns the bit mask of floating-point exceptions for which trapping was
enabled before the call, or -1 upon failure.
Note: This function is a misnomer. It does not disable the specified
floating-point exceptions; it disables *trapping* on them. It should better
be called 'fedisabletraps'. */
# if @REPLACE_FEDISABLEEXCEPT@ || (!@HAVE_FEDISABLEEXCEPT@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fedisableexcept
# define fedisableexcept rpl_fedisableexcept
# endif
_GL_FUNCDECL_RPL (fedisableexcept, int, (int exceptions), );
_GL_CXXALIAS_RPL (fedisableexcept, int, (int exceptions));
# else
# if !@HAVE_FEDISABLEEXCEPT@
_GL_FUNCDECL_SYS (fedisableexcept, int, (int exceptions), );
# endif
_GL_CXXALIAS_SYS (fedisableexcept, int, (int exceptions));
# endif
_GL_CXXALIASWARN (fedisableexcept);
#elif defined GNULIB_POSIXCHECK
# undef fedisableexcept
# if HAVE_RAW_DECL_FEDISABLEEXCEPT
_GL_WARN_ON_USE (fedisableexcept, "fedisableexcept is unportable - "
"use gnulib module fenv-exceptions-trapping for portability");
# endif
#endif
#if @GNULIB_FEGETEXCEPT@
/* Returns the bit mask of floating-point exceptions for which trapping is
enabled.
Note: This function is an even bigger misnomer:
- It does not test for the specified floating-point exceptions;
fetestexcept() does that. It tests whether *trapping* on these
exceptions is enabled.
- It is in no way the opposite of fesetexcept().
It should better be called 'fegettraps'. */
# if @REPLACE_FEGETEXCEPT@ || (!@HAVE_FEGETEXCEPT@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fegetexcept
# define fegetexcept rpl_fegetexcept
# endif
_GL_FUNCDECL_RPL (fegetexcept, int, (void), );
_GL_CXXALIAS_RPL (fegetexcept, int, (void));
# else
# if !@HAVE_FEGETEXCEPT@
_GL_FUNCDECL_SYS (fegetexcept, int, (void), );
# endif
_GL_CXXALIAS_SYS (fegetexcept, int, (void));
# endif
_GL_CXXALIASWARN (fegetexcept);
#elif defined GNULIB_POSIXCHECK
# undef fegetexcept
# if HAVE_RAW_DECL_FEGETEXCEPT
_GL_WARN_ON_USE (fegetexcept, "fegetexcept is unportable - "
"use gnulib module fenv-exceptions-trapping for portability");
# endif
#endif
/* ISO C 99 § 7.6.2 Floating-point exceptions
ISO C 23 § 7.6.4 Floating-point exceptions
API with fexcept_t.
The return type changed from 'void' to 'int' in ISO C 11. */
#if !@HAVE_FENV_H@
# if (defined __x86_64__ || defined _M_X64) || (defined __i386 || defined _M_IX86)
typedef unsigned short fexcept_t;
# elif defined __aarch64__ /* arm64 */ || defined __arm__
typedef unsigned int fexcept_t;
# elif defined __alpha
typedef unsigned long fexcept_t;
# elif defined __hppa
typedef unsigned int fexcept_t;
# elif defined __ia64__
typedef unsigned long fexcept_t;
# elif defined __m68k__
typedef unsigned int fexcept_t;
# elif defined __mips__
typedef unsigned short fexcept_t;
# elif defined __loongarch__
typedef unsigned int fexcept_t;
# elif defined __powerpc__
typedef unsigned int fexcept_t;
# elif defined __riscv
typedef unsigned int fexcept_t;
# elif defined __s390__ || defined __s390x__
typedef unsigned int fexcept_t;
# elif defined __sh__
typedef unsigned short fexcept_t;
# elif defined __sparc
typedef unsigned long fexcept_t;
# else
/* A dummy fallback. */
typedef unsigned long fexcept_t;
# endif
#endif
#if @GNULIB_FEGETEXCEPTFLAG@
/* Stores the current floating-point exception status flags denoted
by EXCEPTIONS in *SAVED_FLAGS. */
# if @REPLACE_FEGETEXCEPTFLAG@ || (!@HAVE_FEGETEXCEPTFLAG@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fegetexceptflag
# define fegetexceptflag rpl_fegetexceptflag
# endif
_GL_FUNCDECL_RPL (fegetexceptflag, int,
(fexcept_t *saved_flags, int exceptions), );
_GL_CXXALIAS_RPL (fegetexceptflag, int,
(fexcept_t *saved_flags, int exceptions));
# else
# if !@HAVE_FEGETEXCEPTFLAG@
_GL_FUNCDECL_SYS (fegetexceptflag, int,
(fexcept_t *saved_flags, int exceptions), );
# endif
_GL_CXXALIAS_SYS (fegetexceptflag, int,
(fexcept_t *saved_flags, int exceptions));
# endif
_GL_CXXALIASWARN (fegetexceptflag);
#endif
#if @GNULIB_FESETEXCEPTFLAG@
/* Copies the flags denoted by EXCEPTIONS from *SAVED_FLAGS to the
floating-point exception status flags. */
# if @REPLACE_FESETEXCEPTFLAG@ || (!@HAVE_FESETEXCEPTFLAG@ && defined __FreeBSD__) /* has an inline definition */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fesetexceptflag
# define fesetexceptflag rpl_fesetexceptflag
# endif
_GL_FUNCDECL_RPL (fesetexceptflag, int,
(fexcept_t const *saved_flags, int exceptions), );
_GL_CXXALIAS_RPL (fesetexceptflag, int,
(fexcept_t const *saved_flags, int exceptions));
# else
# if !@HAVE_FESETEXCEPTFLAG@
_GL_FUNCDECL_SYS (fesetexceptflag, int,
(fexcept_t const *saved_flags, int exceptions), );
# endif
_GL_CXXALIAS_SYS (fesetexceptflag, int,
(fexcept_t const *saved_flags, int exceptions));
# endif
_GL_CXXALIASWARN (fesetexceptflag);
#endif
/* Added in ISO C 23 § 7.6.4 Floating-point exceptions. */
#if @GNULIB_FETESTEXCEPTFLAG@
/* Copies the flags denoted by EXCEPTIONS from *SAVED_FLAGS to the
floating-point exception status flags. */
# if 0
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef fetestexceptflag
# define fetestexceptflag rpl_fetestexceptflag
# endif
_GL_FUNCDECL_RPL (fetestexceptflag, int,
(fexcept_t const *saved_flags, int exceptions), );
_GL_CXXALIAS_RPL (fetestexceptflag, int,
(fexcept_t const *saved_flags, int exceptions));
# else
# if !@HAVE_FETESTEXCEPTFLAG@
_GL_FUNCDECL_SYS (fetestexceptflag, int,
(fexcept_t const *saved_flags, int exceptions), );
# endif
_GL_CXXALIAS_SYS (fetestexceptflag, int,
(fexcept_t const *saved_flags, int exceptions));
# endif
_GL_CXXALIASWARN (fetestexceptflag);
#elif defined GNULIB_POSIXCHECK
# undef fetestexceptflag
# if HAVE_RAW_DECL_FETESTEXCEPTFLAG
_GL_WARN_ON_USE (fetestexceptflag, "fetestexceptflag is unportable - "
"use gnulib module fenv-exceptions-state-c23 for portability");
# endif
#endif
#endif /* _@GUARD_PREFIX@_FENV_H */
#endif /* _@GUARD_PREFIX@_FENV_H */