]>
Commit | Line | Data |
---|---|---|
577565f9 | 1 | /* |
83ffe9cd | 2 | * Copyright (C) 2007-2023 Free Software Foundation, Inc. |
577565f9 UB |
3 | * |
4 | * This file is free software; you can redistribute it and/or modify it | |
5 | * under the terms of the GNU General Public License as published by the | |
748086b7 | 6 | * Free Software Foundation; either version 3, or (at your option) any |
577565f9 UB |
7 | * later version. |
8 | * | |
577565f9 UB |
9 | * This file is distributed in the hope that it will be useful, but |
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * General Public License for more details. | |
13 | * | |
748086b7 JJ |
14 | * Under Section 7 of GPL version 3, you are granted additional |
15 | * permissions described in the GCC Runtime Library Exception, version | |
16 | * 3.1, as published by the Free Software Foundation. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License and | |
19 | * a copy of the GCC Runtime Library Exception along with this program; | |
20 | * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
21 | * <http://www.gnu.org/licenses/>. | |
577565f9 UB |
22 | */ |
23 | ||
61221141 | 24 | #ifndef _SOFT_FLOAT |
577565f9 UB |
25 | #if __PREC == 32 |
26 | #define X87CW (0 << 8) /* Single precision (24 bits) */ | |
27 | #elif __PREC == 64 | |
28 | #define X87CW (2 << 8) /* Double precision (53 bits) */ | |
29 | #elif __PREC == 80 | |
30 | #define X87CW (3 << 8) /* Extended precision (64 bits) */ | |
31 | #else | |
32 | #error "Wrong precision requested." | |
33 | #endif | |
34 | ||
35 | #define X87CW_PCMASK (3 << 8) | |
36 | ||
37 | static void __attribute__((constructor)) | |
38 | set_precision (void) | |
39 | { | |
40 | unsigned short int cwd; | |
41 | ||
0a76bba4 | 42 | asm volatile ("fnstcw\t%0" : "=m" (cwd)); |
577565f9 UB |
43 | |
44 | cwd &= ~X87CW_PCMASK; | |
45 | cwd |= X87CW; | |
46 | ||
47 | asm volatile ("fldcw\t%0" : : "m" (cwd)); | |
48 | } | |
61221141 | 49 | #endif |