1 /* FPU control word definitions. SH version. 2 Copyright (C) 1999-2025 Free Software Foundation, Inc. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #ifndef _FPU_CONTROL_H 19 #define _FPU_CONTROL_H 20 21 #if !defined(__SH_FPU_ANY__) 22 23 #define _FPU_RESERVED 0xffffffff 24 #define _FPU_DEFAULT 0x00000000 25 typedef unsigned int fpu_control_t; 26 #define _FPU_GETCW(cw) (cw) = 0 27 #define _FPU_SETCW(cw) (void) (cw) 28 extern fpu_control_t __fpu_control; 29 30 #else 31 32 #include <features.h> 33 34 /* masking of interrupts */ 35 #define _FPU_MASK_VM 0x0800 /* Invalid operation */ 36 #define _FPU_MASK_ZM 0x0400 /* Division by zero */ 37 #define _FPU_MASK_OM 0x0200 /* Overflow */ 38 #define _FPU_MASK_UM 0x0100 /* Underflow */ 39 #define _FPU_MASK_IM 0x0080 /* Inexact operation */ 40 41 /* rounding control */ 42 #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ 43 #define _FPU_RC_ZERO 0x1 44 45 #define _FPU_RESERVED 0xffc00000 /* These bits are reserved. */ 46 47 /* The fdlibm code requires strict IEEE double precision arithmetic, 48 and no interrupts for exceptions, rounding to nearest. */ 49 #define _FPU_DEFAULT 0x00080000 /* Default value. */ 50 #define _FPU_IEEE 0x00080f80 /* Default + exceptions enabled. */ 51 52 /* Type of the control word. */ 53 typedef unsigned int fpu_control_t; 54 55 /* Macros for accessing the hardware control word. */ 56 #define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw)) 57 58 #if defined __GNUC__ 59 __BEGIN_DECLS 60 61 /* GCC provides this function. */ 62 extern void __set_fpscr (unsigned long); 63 #define _FPU_SETCW(cw) __set_fpscr ((cw)) 64 #else 65 #define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw)) 66 #endif 67 68 /* Default control word set at startup. */ 69 extern fpu_control_t __fpu_control; 70 71 __END_DECLS 72 73 #endif /* __SH_FPU_ANY__ */ 74 75 #endif /* _FPU_CONTROL_H */ 76