diff options
Diffstat (limited to 'libc/sysdeps/linux/m68k/fpu_control.h')
| -rw-r--r-- | libc/sysdeps/linux/m68k/fpu_control.h | 77 | 
1 files changed, 46 insertions, 31 deletions
| diff --git a/libc/sysdeps/linux/m68k/fpu_control.h b/libc/sysdeps/linux/m68k/fpu_control.h index 35ad95e6d..c3a9c6326 100644 --- a/libc/sysdeps/linux/m68k/fpu_control.h +++ b/libc/sysdeps/linux/m68k/fpu_control.h @@ -1,6 +1,5 @@  /* 68k FPU control word definitions. -   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. -   This file is part of the GNU C Library. +   Copyright (C) 1996-2025 Free Software Foundation, Inc.     The GNU C Library is free software; you can redistribute it and/or     modify it under the terms of the GNU Lesser General Public @@ -13,8 +12,8 @@     Lesser General Public License for more details.     You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, see -   <http://www.gnu.org/licenses/>.  */ +   License along with the GNU C Library.  If not, see +   <https://www.gnu.org/licenses/>.  */  #ifndef _FPU_CONTROL_H  #define _FPU_CONTROL_H @@ -29,9 +28,9 @@   * 12     -> enable trap for OVFL exception   * 11     -> enable trap for UNFL exception   * 10     -> enable trap for DZ exception - *  9     -> enable trap for INEX2 exception - *  8     -> enable trap for INEX1 exception - *  7-6   -> Precision Control + *  9     -> enable trap for INEX2 exception (INEX on Coldfire) + *  8     -> enable trap for INEX1 exception (IDE on Coldfire) + *  7-6   -> Precision Control (only bit 6 is used on Coldfire)   *  5-4   -> Rounding Control   *  3-0   -> zero (read as 0, write as 0)   * @@ -53,50 +52,66 @@  #include <features.h> +#if defined (__mcoldfire__) && !defined (__mcffpu__) + +# define _FPU_RESERVED 0xffffffff +# define _FPU_DEFAULT  0x00000000 +# define _FPU_GETCW(cw) ((cw) = 0) +# define _FPU_SETCW(cw) ((void) (cw)) + +#else +  /* masking of interrupts */ -#define _FPU_MASK_BSUN  0x8000 -#define _FPU_MASK_SNAN  0x4000 -#define _FPU_MASK_OPERR 0x2000 -#define _FPU_MASK_OVFL  0x1000 -#define _FPU_MASK_UNFL  0x0800 -#define _FPU_MASK_DZ    0x0400 -#define _FPU_MASK_INEX1 0x0200 -#define _FPU_MASK_INEX2 0x0100 +# define _FPU_MASK_BSUN  0x8000 +# define _FPU_MASK_SNAN  0x4000 +# define _FPU_MASK_OPERR 0x2000 +# define _FPU_MASK_OVFL  0x1000 +# define _FPU_MASK_UNFL  0x0800 +# define _FPU_MASK_DZ    0x0400 +# define _FPU_MASK_INEX1 0x0200 +# define _FPU_MASK_INEX2 0x0100  /* precision control */ -#define _FPU_EXTENDED 0x00   /* RECOMMENDED */ -#define _FPU_DOUBLE   0x80 -#define _FPU_SINGLE   0x40     /* DO NOT USE */ +# ifdef __mcoldfire__ +#  define _FPU_DOUBLE   0x00 +# else +#  define _FPU_EXTENDED 0x00   /* RECOMMENDED */ +#  define _FPU_DOUBLE   0x80 +# endif +# define _FPU_SINGLE   0x40     /* DO NOT USE */  /* rounding control */ -#define _FPU_RC_NEAREST 0x00    /* RECOMMENDED */ -#define _FPU_RC_ZERO    0x10 -#define _FPU_RC_DOWN    0x20 -#define _FPU_RC_UP      0x30 +# define _FPU_RC_NEAREST 0x00    /* RECOMMENDED */ +# define _FPU_RC_ZERO    0x10 +# define _FPU_RC_DOWN    0x20 +# define _FPU_RC_UP      0x30 -#define _FPU_RESERVED 0xFFFF000F  /* Reserved bits in fpucr */ +# ifdef __mcoldfire__ +#  define _FPU_RESERVED 0xFFFF800F +# else +#  define _FPU_RESERVED 0xFFFF000F  /* Reserved bits in fpucr */ +# endif  /* Now two recommended fpucr */  /* The fdlibm code requires no interrupts for exceptions.  Don't     change the rounding mode, it would break long double I/O!  */ -#define _FPU_DEFAULT  0x00000000 +# define _FPU_DEFAULT  0x00000000  /* IEEE:  same as above, but exceptions.  We must make it non-zero so     that __setfpucw works.  This bit will be ignored.  */ -#define _FPU_IEEE     0x00000001 +# define _FPU_IEEE     0x00000001 + +/* Macros for accessing the hardware control word.  */ +# define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) +# define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw)) +#endif  /* Type of the control word.  */  typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); -/* Macros for accessing the hardware control word.  */ -#define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) -#define _FPU_SETCW(cw) __asm__ __volatile__ ("fmove%.l %0, %!" : : "dm" (cw)) - -#if 0  /* Default control word set at startup.  */  extern fpu_control_t __fpu_control; -#endif  #endif /* _M68K_FPU_CONTROL_H */ | 
