]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/i386/fpu/feholdexcpt.c
LoongArch: Ensure sp 16-byte aligned for tlsdesc
[thirdparty/glibc.git] / sysdeps / i386 / fpu / feholdexcpt.c
CommitLineData
63551311 1/* Store current floating-point environment and clear exceptions.
dff8da6b 2 Copyright (C) 1997-2024 Free Software Foundation, Inc.
63551311 3 This file is part of the GNU C Library.
63551311
UD
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.
63551311
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.
63551311 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/>. */
63551311
UD
18
19#include <fenv.h>
e40468fa
UD
20#include <unistd.h>
21#include <ldsodefs.h>
22#include <dl-procinfo.h>
63551311
UD
23
24int
ef9faf13 25__feholdexcept (fenv_t *envp)
63551311 26{
d0adc922
RH
27 /* Store the environment. Recall that fnstenv has a side effect of
28 masking all exceptions. Then clear all exceptions. */
29 __asm__ volatile ("fnstenv %0; fnclex" : "=m" (*envp));
63551311 30
e40468fa 31 /* If the CPU supports SSE we set the MXCSR as well. */
107e6a3c 32 if (CPU_FEATURE_USABLE (SSE))
e40468fa
UD
33 {
34 unsigned int xwork;
35
36 /* Get the current control word. */
77d08aca 37 __asm__ ("stmxcsr %0" : "=m" (envp->__eip));
e40468fa 38
34317254 39 /* Set all exceptions to non-stop and clear them. */
77d08aca 40 xwork = (envp->__eip | 0x1f80) & ~0x3f;
e40468fa
UD
41
42 __asm__ ("ldmxcsr %0" : : "m" (*&xwork));
43 }
44
8a94dfe4 45 return 0;
63551311 46}
ef9faf13
JM
47libm_hidden_def (__feholdexcept)
48weak_alias (__feholdexcept, feholdexcept)
49libm_hidden_weak (feholdexcept)