mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Add fesetexcept.
TS 18661-1 defines an fesetexcept function for setting floating-point exception flags without the side-effect of causing enabled traps to be taken. This patch series implements this function for glibc. The present patch adds the fallback stub implementation, x86 and x86_64 implementations, documentation, tests and ABI baseline updates. The remaining patches, some of them untested, add implementations for other architectures. The implementations generally follow those of the fesetexceptflag function. As for fesetexceptflag, the approach taken for architectures where setting flags causes enabled traps to be taken is to set the flags (and potentially cause traps) rather than refusing to set the flags and returning an error. Since ISO C and TS 18661 provide no way to enable traps, this is formally in accordance with the standards. The NEWS entry should be considered a placeholder, since this patch series is intended to be followed by further such series adding other TS 18661-1 features, so that the NEWS entry would end up looking more like * New <fenv.h> features from TS 18661-1:2014 are added to libm: the fesetexcept, fetestexceptflag, fegetmode and fesetmode functions, the femode_t type and the FE_DFL_MODE macro. with hopefully more such entries for other features, rather than having an entry for a single function in the end. I believe we have consensus for adding TS 18661-1 interfaces as per <https://sourceware.org/ml/libc-alpha/2016-06/msg00421.html>. Tested for x86_64, x86, mips64 (hard float, and soft float to test the fallback version), arm (hard float) and powerpc (hard float, soft float and e500). * math/fesetexcept.c: New file. * sysdeps/i386/fpu/fesetexcept.c: Likewise. * sysdeps/x86_64/fpu/fesetexcept.c: Likewise. * math/fenv.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. [__GLIBC_USE (IEC_60559_BFP_EXT)] (fesetexcept): New function declaration. * manual/arith.texi (fesetexcept): Document function. * math/Versions (fesetexcept): New libm symbol at version GLIBC_2.25. * math/Makefile (libm-support): Add fesetexcept. (tests): Add test-fesetexcept and test-fesetexcept-traps. * math/test-fesetexcept.c: New file. * math/test-fesetexcept-traps.c: Likewise. * sysdeps/nacl/libm.abilist: Update. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
This commit is contained in:
parent
056dd72af8
commit
5146356f5a
51
ChangeLog
51
ChangeLog
@ -1,3 +1,54 @@
|
||||
2016-08-16 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* math/fesetexcept.c: New file.
|
||||
* sysdeps/i386/fpu/fesetexcept.c: Likewise.
|
||||
* sysdeps/x86_64/fpu/fesetexcept.c: Likewise.
|
||||
* math/fenv.h: Define
|
||||
__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
|
||||
<bits/libc-header-start.h> instead of including <features.h>.
|
||||
[__GLIBC_USE (IEC_60559_BFP_EXT)] (fesetexcept): New function
|
||||
declaration.
|
||||
* manual/arith.texi (fesetexcept): Document function.
|
||||
* math/Versions (fesetexcept): New libm symbol at version
|
||||
GLIBC_2.25.
|
||||
* math/Makefile (libm-support): Add fesetexcept.
|
||||
(tests): Add test-fesetexcept and test-fesetexcept-traps.
|
||||
* math/test-fesetexcept.c: New file.
|
||||
* math/test-fesetexcept-traps.c: Likewise.
|
||||
* sysdeps/nacl/libm.abilist: Update.
|
||||
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
|
||||
|
||||
2016-08-16 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
* nptl/tst-tls3.c (default_stack_size_in_mb, stack_size_in_mb):
|
||||
|
2
NEWS
2
NEWS
@ -32,6 +32,8 @@ Version 2.25
|
||||
presently cannot avoid being compiled under _GNU_SOURCE, exacerbating the
|
||||
problem.
|
||||
|
||||
* The fesetexcept function from TS 18661-1:2014 is added to libm.
|
||||
|
||||
Security related changes:
|
||||
|
||||
On ARM EABI (32-bit), generating a backtrace for execution contexts which
|
||||
|
@ -757,6 +757,18 @@ The function returns zero in case the operation was successful, a
|
||||
non-zero value otherwise.
|
||||
@end deftypefun
|
||||
|
||||
@comment fenv.h
|
||||
@comment ISO
|
||||
@deftypefun int fesetexcept (int @var{excepts})
|
||||
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
||||
This function sets the supported exception flags indicated by
|
||||
@var{excepts}, like @code{feraiseexcept}, but without causing enabled
|
||||
traps to be taken. @code{fesetexcept} is from TS 18661-1:2014.
|
||||
|
||||
The function returns zero in case the operation was successful, a
|
||||
non-zero value otherwise.
|
||||
@end deftypefun
|
||||
|
||||
@comment fenv.h
|
||||
@comment ISO
|
||||
@deftypefun int fetestexcept (int @var{excepts})
|
||||
|
@ -41,7 +41,7 @@ libm-support = s_lib_version s_matherr s_signgam \
|
||||
fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg \
|
||||
ftestexcept fegetround fesetround fegetenv feholdexcpt \
|
||||
fesetenv feupdateenv t_exp fedisblxcpt feenablxcpt \
|
||||
fegetexcept
|
||||
fegetexcept fesetexcept
|
||||
|
||||
libm-calls = \
|
||||
e_acosF e_acoshF e_asinF e_atan2F e_atanhF e_coshF e_expF e_fmodF \
|
||||
@ -146,7 +146,8 @@ tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
|
||||
test-nearbyint-except-2 test-signgam-uchar test-signgam-uchar-init \
|
||||
test-signgam-uint test-signgam-uint-init test-signgam-ullong \
|
||||
test-signgam-ullong-init test-nan-overflow test-nan-payload \
|
||||
test-fexcept test-fexcept-traps $(tests-static)
|
||||
test-fexcept test-fexcept-traps test-fesetexcept \
|
||||
test-fesetexcept-traps $(tests-static)
|
||||
tests-static = test-fpucw-static test-fpucw-ieee-static \
|
||||
test-signgam-uchar-static test-signgam-uchar-init-static \
|
||||
test-signgam-uint-static test-signgam-uint-init-static \
|
||||
|
@ -214,4 +214,7 @@ libm {
|
||||
nextup; nextupf; nextupl;
|
||||
nextdown; nextdownf; nextdownl;
|
||||
}
|
||||
GLIBC_2.25 {
|
||||
fesetexcept;
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,8 @@
|
||||
#ifndef _FENV_H
|
||||
#define _FENV_H 1
|
||||
|
||||
#include <features.h>
|
||||
#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
|
||||
#include <bits/libc-header-start.h>
|
||||
|
||||
/* Get the architecture dependend definitions. The following definitions
|
||||
are expected to be done:
|
||||
@ -70,6 +71,12 @@ extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
|
||||
/* Raise the supported exceptions represented by EXCEPTS. */
|
||||
extern int feraiseexcept (int __excepts) __THROW;
|
||||
|
||||
#if __GLIBC_USE (IEC_60559_BFP_EXT)
|
||||
/* Set the supported exception flags represented by EXCEPTS, without
|
||||
causing enabled traps to be taken. */
|
||||
extern int fesetexcept (int __excepts) __THROW;
|
||||
#endif
|
||||
|
||||
/* Set complete status for exceptions indicated by EXCEPTS according to
|
||||
the representation in the object pointed to by FLAGP. */
|
||||
extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
|
||||
|
27
math/fesetexcept.c
Normal file
27
math/fesetexcept.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* Set given exception flags.
|
||||
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fesetexcept (int excepts)
|
||||
{
|
||||
/* This always fails unless nothing needs to be done. */
|
||||
return (excepts != 0);
|
||||
}
|
||||
stub_warning (fesetexcept)
|
68
math/test-fesetexcept-traps.c
Normal file
68
math/test-fesetexcept-traps.c
Normal file
@ -0,0 +1,68 @@
|
||||
/* Test fesetexcept: exception traps enabled.
|
||||
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <stdio.h>
|
||||
#include <math-tests.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
fedisableexcept (FE_ALL_EXCEPT);
|
||||
int ret = feenableexcept (FE_ALL_EXCEPT);
|
||||
if (!EXCEPTION_ENABLE_SUPPORTED (FE_ALL_EXCEPT) && (ret == -1))
|
||||
{
|
||||
puts ("feenableexcept (FE_ALL_EXCEPT) not supported, cannot test");
|
||||
return 77;
|
||||
}
|
||||
else if (ret != 0)
|
||||
{
|
||||
puts ("feenableexcept (FE_ALL_EXCEPT) failed");
|
||||
result = 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
if (EXCEPTION_SET_FORCES_TRAP)
|
||||
{
|
||||
puts ("setting exceptions traps, cannot test on this architecture");
|
||||
return 77;
|
||||
}
|
||||
/* Verify fesetexcept does not cause exception traps. */
|
||||
ret = fesetexcept (FE_ALL_EXCEPT);
|
||||
if (ret == 0)
|
||||
puts ("fesetexcept (FE_ALL_EXCEPT) succeeded");
|
||||
else
|
||||
{
|
||||
puts ("fesetexcept (FE_ALL_EXCEPT) failed");
|
||||
if (EXCEPTION_TESTS (float))
|
||||
{
|
||||
puts ("failure of fesetexcept was unexpected");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
puts ("failure of fesetexcept OK");
|
||||
}
|
||||
feclearexcept (FE_ALL_EXCEPT);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
129
math/test-fesetexcept.c
Normal file
129
math/test-fesetexcept.c
Normal file
@ -0,0 +1,129 @@
|
||||
/* Test fesetexcept.
|
||||
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <stdio.h>
|
||||
#include <math-tests.h>
|
||||
|
||||
static int
|
||||
test_fesetexcept (int exc, const char *exc_name)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
printf ("Testing %s\n", exc_name);
|
||||
feclearexcept (FE_ALL_EXCEPT);
|
||||
int ret = fesetexcept (exc);
|
||||
if (ret == 0)
|
||||
printf ("fesetexcept (%s) succeeded\n", exc_name);
|
||||
else
|
||||
{
|
||||
printf ("fesetexcept (%s) failed\n", exc_name);
|
||||
if (exc == 0 || EXCEPTION_TESTS (float))
|
||||
{
|
||||
puts ("failure of fesetexcept was unexpected");
|
||||
result = 1;
|
||||
}
|
||||
else
|
||||
puts ("failure of fesetexcept OK, skipping further tests");
|
||||
return result;
|
||||
}
|
||||
ret = fetestexcept (FE_ALL_EXCEPT);
|
||||
if (ret != exc)
|
||||
{
|
||||
printf ("raised exceptions %x, expected %x\n",
|
||||
(unsigned int) ret, (unsigned int) exc);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
ret = feraiseexcept (FE_ALL_EXCEPT);
|
||||
if (ret != 0)
|
||||
{
|
||||
if (exc == 0 && !EXCEPTION_TESTS (float))
|
||||
{
|
||||
puts ("feraiseexcept (FE_ALL_EXCEPT) failed, skipping further tests");
|
||||
return result;
|
||||
}
|
||||
puts ("feraiseexcept (FE_ALL_EXCEPT) unexpectedly failed");
|
||||
result = 1;
|
||||
}
|
||||
ret = fesetexcept (exc);
|
||||
if (ret != 0)
|
||||
{
|
||||
puts ("fesetexcept (second test) unexpectedly failed");
|
||||
result = 1;
|
||||
}
|
||||
ret = fetestexcept (FE_ALL_EXCEPT);
|
||||
if (ret != FE_ALL_EXCEPT)
|
||||
{
|
||||
printf ("raised exceptions (second test) %x, expected %x\n",
|
||||
(unsigned int) ret, (unsigned int) FE_ALL_EXCEPT);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
feclearexcept (FE_ALL_EXCEPT);
|
||||
ret = feraiseexcept (FE_ALL_EXCEPT & ~exc);
|
||||
if (ret != 0)
|
||||
{
|
||||
puts ("feraiseexcept (third test) unexpectedly failed");
|
||||
result = 1;
|
||||
}
|
||||
ret = fesetexcept (exc);
|
||||
if (ret != 0)
|
||||
{
|
||||
puts ("fesetexcept (third test) unexpectedly failed");
|
||||
result = 1;
|
||||
}
|
||||
ret = fetestexcept (FE_ALL_EXCEPT);
|
||||
if (ret != FE_ALL_EXCEPT)
|
||||
{
|
||||
printf ("raised exceptions (third test) %x, expected %x\n",
|
||||
(unsigned int) ret, (unsigned int) FE_ALL_EXCEPT);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
result |= test_fesetexcept (0, "0");
|
||||
result |= test_fesetexcept (FE_ALL_EXCEPT, "FE_ALL_EXCEPT");
|
||||
#ifdef FE_DIVBYZERO
|
||||
result |= test_fesetexcept (FE_DIVBYZERO, "FE_DIVBYZERO");
|
||||
#endif
|
||||
#ifdef FE_INEXACT
|
||||
result |= test_fesetexcept (FE_INEXACT, "FE_INEXACT");
|
||||
#endif
|
||||
#ifdef FE_INVALID
|
||||
result |= test_fesetexcept (FE_INVALID, "FE_INVALID");
|
||||
#endif
|
||||
#ifdef FE_OVERFLOW
|
||||
result |= test_fesetexcept (FE_OVERFLOW, "FE_OVERFLOW");
|
||||
#endif
|
||||
#ifdef FE_UNDERFLOW
|
||||
result |= test_fesetexcept (FE_UNDERFLOW, "FE_UNDERFLOW");
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
31
sysdeps/i386/fpu/fesetexcept.c
Normal file
31
sysdeps/i386/fpu/fesetexcept.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Set given exception flags. i386 version.
|
||||
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fesetexcept (int excepts)
|
||||
{
|
||||
fenv_t temp;
|
||||
|
||||
__asm__ ("fnstenv %0" : "=m" (*&temp));
|
||||
temp.__status_word |= excepts & FE_ALL_EXCEPT;
|
||||
__asm__ ("fldenv %0" : : "m" (*&temp));
|
||||
|
||||
return 0;
|
||||
}
|
@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -410,3 +410,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -420,6 +420,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.3.4 GLIBC_2.3.4 A
|
||||
GLIBC_2.3.4 __c1_cabsf F
|
||||
GLIBC_2.3.4 __c1_cacosf F
|
||||
|
@ -68,6 +68,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 _LIB_VERSION D 0x4
|
||||
GLIBC_2.4 __clog10 F
|
||||
|
@ -380,5 +380,7 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 exp2l F
|
||||
|
@ -422,4 +422,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -351,4 +351,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -68,6 +68,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 _LIB_VERSION D 0x4
|
||||
GLIBC_2.4 __clog10 F
|
||||
|
@ -420,4 +420,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -381,6 +381,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 exp2l F
|
||||
_gp_disp _gp_disp A
|
||||
|
@ -412,4 +412,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -421,6 +421,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 __clog10l F
|
||||
GLIBC_2.4 __finitel F
|
||||
|
@ -420,6 +420,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 __clog10l F
|
||||
GLIBC_2.4 __finitel F
|
||||
|
@ -415,3 +415,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -96,6 +96,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.3 GLIBC_2.3 A
|
||||
GLIBC_2.3 _LIB_VERSION D 0x4
|
||||
GLIBC_2.3 __clog10 F
|
||||
|
@ -410,6 +410,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 __clog10l F
|
||||
GLIBC_2.4 __finitel F
|
||||
|
@ -408,6 +408,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 __clog10l F
|
||||
GLIBC_2.4 __finitel F
|
||||
|
@ -380,5 +380,7 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 exp2l F
|
||||
|
@ -413,6 +413,8 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
GLIBC_2.4 __clog10l F
|
||||
GLIBC_2.4 __finitel F
|
||||
|
@ -411,4 +411,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
@ -411,4 +411,6 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -410,3 +410,5 @@ GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 fesetexcept F
|
||||
|
31
sysdeps/x86_64/fpu/fesetexcept.c
Normal file
31
sysdeps/x86_64/fpu/fesetexcept.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Set given exception flags. x86_64 version.
|
||||
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fenv.h>
|
||||
|
||||
int
|
||||
fesetexcept (int excepts)
|
||||
{
|
||||
unsigned int mxcsr;
|
||||
|
||||
__asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
|
||||
mxcsr |= excepts & FE_ALL_EXCEPT;
|
||||
__asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user