]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/powerpc/fpu/feholdexcpt.c
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / powerpc / fpu / feholdexcpt.c
CommitLineData
1f205a47 1/* Store current floating-point environment and clear exceptions.
581c785b 2 Copyright (C) 1997-2022 Free Software Foundation, Inc.
1f205a47
UD
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
41bdb6e2
AJ
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.
1f205a47
UD
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
41bdb6e2 13 Lesser General Public License for more details.
1f205a47 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6 16 License along with the GNU C Library; if not, see
5a82c748 17 <https://www.gnu.org/licenses/>. */
1f205a47
UD
18
19#include <fenv_libc.h>
edba7a54 20#include <fpu_control.h>
1f205a47
UD
21
22int
ef9faf13 23__feholdexcept (fenv_t *envp)
1f205a47 24{
4a59e9ad 25 fenv_union_t old, new;
1f205a47 26
4a59e9ad
UD
27 /* Save the currently set exceptions. */
28 old.fenv = *envp = fegetenv_register ();
1f205a47 29
4a59e9ad 30 /* Clear everything except for the rounding modes and non-IEEE arithmetic
1f205a47 31 flag. */
4a28b3ca 32 new.l = old.l & 0xffffffff00000007LL;
9c84384c 33
18f2945a
AZ
34 if (new.l == old.l)
35 return 0;
36
e3d85df5 37 __TEST_AND_ENTER_NON_STOP (old.l, 0ULL);
1f205a47
UD
38
39 /* Put the new state in effect. */
4a59e9ad 40 fesetenv_register (new.fenv);
1f205a47 41
8a94dfe4 42 return 0;
1f205a47 43}
ef9faf13
JM
44libm_hidden_def (__feholdexcept)
45weak_alias (__feholdexcept, feholdexcept)
46libm_hidden_weak (feholdexcept)