1 /* FPU control word bits. SPARC version. 2 Copyright (C) 1997-2021 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 Contributed by Miguel de Icaza 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <https://www.gnu.org/licenses/>. */ 19 20 #ifndef _FPU_CONTROL_H 21 #define _FPU_CONTROL_H 1 22 23 24 #include <features.h> 25 #include <bits/wordsize.h> 26 27 /* masking of interrupts */ 28 #define _FPU_MASK_IM 0x08000000 29 #define _FPU_MASK_OM 0x04000000 30 #define _FPU_MASK_UM 0x02000000 31 #define _FPU_MASK_ZM 0x01000000 32 #define _FPU_MASK_PM 0x00800000 33 34 /* precision control */ 35 #define _FPU_EXTENDED 0x00000000 /* RECOMMENDED */ 36 #define _FPU_DOUBLE 0x20000000 37 #define _FPU_80BIT 0x30000000 38 #define _FPU_SINGLE 0x10000000 /* DO NOT USE */ 39 40 /* rounding control / Sparc */ 41 #define _FPU_RC_DOWN 0xc0000000 42 #define _FPU_RC_UP 0x80000000 43 #define _FPU_RC_ZERO 0x40000000 44 #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ 45 46 #define _FPU_RESERVED 0x30300000 /* Reserved bits in cw */ 47 48 49 /* Now two recommended cw */ 50 51 /* Linux and IEEE default: 52 - extended precision 53 - rounding to nearest 54 - no exceptions */ 55 #define _FPU_DEFAULT 0x0 56 #define _FPU_IEEE 0x0 57 58 /* Type of the control word. */ 59 typedef unsigned long int fpu_control_t; 60 61 #if __WORDSIZE == 64 62 # define _FPU_GETCW(cw) __asm__ __volatile__ ("stx %%fsr,%0" : "=m" (*&cw)) 63 # define _FPU_SETCW(cw) __asm__ __volatile__ ("ldx %0,%%fsr" : : "m" (*&cw)) 64 #else 65 # define _FPU_GETCW(cw) __asm__ __volatile__ ("st %%fsr,%0" : "=m" (*&cw)) 66 # define _FPU_SETCW(cw) __asm__ __volatile__ ("ld %0,%%fsr" : : "m" (*&cw)) 67 #endif 68 69 /* Default control word set at startup. */ 70 extern fpu_control_t __fpu_control; 71 72 #endif /* fpu_control.h */