diff options
-rw-r--r-- | ChangeLog | 27 | ||||
-rw-r--r-- | sysdeps/m68k/bits/fenv.h (renamed from sysdeps/m68k/fpu/bits/fenv.h) | 58 |
2 files changed, 74 insertions, 11 deletions
@@ -1,5 +1,32 @@ 2018-02-01 Joseph Myers <joseph@codesourcery.com> + * sysdeps/m68k/fpu/bits/fenv.h: Move to .... + * sysdeps/m68k/bits/fenv.h: ... here. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_INEXACT): Do + not define. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_DIVBYZERO): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_UNDERFLOW): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_OVERFLOW): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_INVALID): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_ALL_EXCEPT): + Define to 0. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] + (__FE_UNDEFINED): New enum constant. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_TOWARDZERO): + Do not define. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_DOWNWARD): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_UPWARD): + Likewise. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (fenv_t): Define + to match generic bits/fenv.h. + [!__HAVE_68881__ && !__HAVE_FPU__ && !__mcffpu__] (FE_NOMASK_ENV): + Do not define. + * soft-fp/double.h (union _FP_UNION_D): Do not use attribute packed on bits. * soft-fp/extended.h (union _FP_UNION_E): Likewise. diff --git a/sysdeps/m68k/fpu/bits/fenv.h b/sysdeps/m68k/bits/fenv.h index 29508afc88..7050ceff24 100644 --- a/sysdeps/m68k/fpu/bits/fenv.h +++ b/sysdeps/m68k/bits/fenv.h @@ -20,28 +20,30 @@ #endif +#if defined __HAVE_68881__ || defined __HAVE_FPU__ || defined __mcffpu__ + /* Define bits representing the exception. We use the bit positions of the appropriate bits in the FPSR Accrued Exception Byte. */ enum { FE_INEXACT = -#define FE_INEXACT (1 << 3) +# define FE_INEXACT (1 << 3) FE_INEXACT, FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 4) +# define FE_DIVBYZERO (1 << 4) FE_DIVBYZERO, FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 5) +# define FE_UNDERFLOW (1 << 5) FE_UNDERFLOW, FE_OVERFLOW = -#define FE_OVERFLOW (1 << 6) +# define FE_OVERFLOW (1 << 6) FE_OVERFLOW, FE_INVALID = -#define FE_INVALID (1 << 7) +# define FE_INVALID (1 << 7) FE_INVALID }; -#define FE_ALL_EXCEPT \ +# define FE_ALL_EXCEPT \ (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) /* The m68k FPU supports all of the four defined rounding modes. We use @@ -50,24 +52,44 @@ enum enum { FE_TONEAREST = -#define FE_TONEAREST 0 +# define FE_TONEAREST 0 FE_TONEAREST, FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 4) +# define FE_TOWARDZERO (1 << 4) FE_TOWARDZERO, FE_DOWNWARD = -#define FE_DOWNWARD (2 << 4) +# define FE_DOWNWARD (2 << 4) FE_DOWNWARD, FE_UPWARD = -#define FE_UPWARD (3 << 4) +# define FE_UPWARD (3 << 4) FE_UPWARD }; +#else + +/* In the soft-float case, only rounding to nearest is supported, with + no exceptions. */ + +# define FE_ALL_EXCEPT 0 + +enum + { + __FE_UNDEFINED = -1, + + FE_TONEAREST = +# define FE_TONEAREST 0 + FE_TONEAREST + }; + +#endif + /* Type representing exception flags. */ typedef unsigned int fexcept_t; +#if defined __HAVE_68881__ || defined __HAVE_FPU__ || defined __mcffpu__ + /* Type representing floating-point environment. This structure corresponds to the layout of the block written by `fmovem'. */ typedef struct @@ -78,10 +100,24 @@ typedef struct } fenv_t; +#else + +/* Keep ABI compatibility with the type used in the generic + bits/fenv.h, formerly used for no-FPU ColdFire. */ +typedef struct + { + fexcept_t __excepts; + } +fenv_t; + +#endif + /* If the default argument is used we use this value. */ #define FE_DFL_ENV ((const fenv_t *) -1) -#ifdef __USE_GNU +#if defined __USE_GNU && (defined __HAVE_68881__ \ + || defined __HAVE_FPU__ \ + || defined __mcffpu__) /* Floating-point environment where none of the exceptions are masked. */ # define FE_NOMASK_ENV ((const fenv_t *) -2) #endif |