annotate libatomic/fenv.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1 /* Copyright (C) 2012-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 This file is part of the GNU Atomic Library (libatomic).
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 Libatomic is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
6 under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
7 the Free Software Foundation; either version 3 of the License, or
kono
parents:
diff changeset
8 (at your option) any later version.
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
kono
parents:
diff changeset
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
kono
parents:
diff changeset
12 FOR A PARTICULAR PURPOSE. See the GNU General Public License for
kono
parents:
diff changeset
13 more details.
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 Under Section 7 of GPL version 3, you are granted additional
kono
parents:
diff changeset
16 permissions described in the GCC Runtime Library Exception, version
kono
parents:
diff changeset
17 3.1, as published by the Free Software Foundation.
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 You should have received a copy of the GNU General Public License and
kono
parents:
diff changeset
20 a copy of the GCC Runtime Library Exception along with this program;
kono
parents:
diff changeset
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
kono
parents:
diff changeset
22 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 #include "libatomic_i.h"
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 #ifdef HAVE_FENV_H
kono
parents:
diff changeset
27 # include <fenv.h>
kono
parents:
diff changeset
28 #endif
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 /* Raise the supported floating-point exceptions from EXCEPTS. Other
kono
parents:
diff changeset
31 bits in EXCEPTS are ignored. */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void
kono
parents:
diff changeset
34 __atomic_feraiseexcept (int excepts __attribute__ ((unused)))
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 volatile float r __attribute__ ((unused));
kono
parents:
diff changeset
37 #ifdef FE_INVALID
kono
parents:
diff changeset
38 if (excepts & FE_INVALID)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 volatile float zero = 0.0f;
kono
parents:
diff changeset
41 r = zero / zero;
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43 #endif
kono
parents:
diff changeset
44 #ifdef FE_DIVBYZERO
kono
parents:
diff changeset
45 if (excepts & FE_DIVBYZERO)
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 volatile float zero = 0.0f;
kono
parents:
diff changeset
48 r = 1.0f / zero;
kono
parents:
diff changeset
49 }
kono
parents:
diff changeset
50 #endif
kono
parents:
diff changeset
51 #ifdef FE_OVERFLOW
kono
parents:
diff changeset
52 if (excepts & FE_OVERFLOW)
kono
parents:
diff changeset
53 {
kono
parents:
diff changeset
54 volatile float max = __FLT_MAX__;
kono
parents:
diff changeset
55 r = max * max;
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57 #endif
kono
parents:
diff changeset
58 #ifdef FE_UNDERFLOW
kono
parents:
diff changeset
59 if (excepts & FE_UNDERFLOW)
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 volatile float min = __FLT_MIN__;
kono
parents:
diff changeset
62 r = min * min;
kono
parents:
diff changeset
63 }
kono
parents:
diff changeset
64 #endif
kono
parents:
diff changeset
65 #ifdef FE_INEXACT
kono
parents:
diff changeset
66 if (excepts & FE_INEXACT)
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 volatile float three = 3.0f;
kono
parents:
diff changeset
69 r = 1.0f / three;
kono
parents:
diff changeset
70 }
kono
parents:
diff changeset
71 #endif
kono
parents:
diff changeset
72 }