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