Update copyright notices with scripts/update-copyrights
[glibc.git] / ports / sysdeps / am33 / fpu / fsetexcptflg.c
blob7b7ab84082348d9515a6c9892cfc1e8aab156bd6
1 /* Set floating-point environment exception handling.
2 Copyright (C) 1998-2014 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4 Contributed by Alexandre Oliva <aoliva@redhat.com>
5 based on corresponding file in the MIPS port.
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 The GNU C Library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with the GNU C Library. If not, see
19 <http://www.gnu.org/licenses/>. */
21 #include <fenv.h>
22 #include <fpu_control.h>
23 #include <shlib-compat.h>
25 int
26 __fesetexceptflag (const fexcept_t *flagp, int excepts)
28 fpu_control_t cw, temp;
30 /* Get the current exceptions. */
31 _FPU_GETCW (cw);
33 /* Make sure the flags we want restored are legal. */
34 excepts &= FE_ALL_EXCEPT;
35 temp = *flagp & excepts;
37 /* If EF bits are clear and the user requests them to be set,
38 we have to fail, because there's no way to do it. */
39 if (~(cw & excepts) & temp)
40 return -1;
42 /* We clear EF bits by storing a 1 in them, so flip the
43 FE_ALL_EXCEPT bits. */
44 temp = (~temp & FE_ALL_EXCEPT);
46 /* Now clear the bits called for, and copy them in from flagp. Note that
47 we ignore all non-flag bits from *flagp, so they don't matter. */
48 cw = (cw & ~FE_ALL_EXCEPT) | temp;
50 _FPU_SETFCW (cw);
52 /* Success. */
53 return 0;
56 versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2);