This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This change exposes a few bugs in the soft-fp implementations for PPC. The current feholdexcept implementation has where it uses fesetenv to resort the current env: /* Get the current state. */ fegetenv (envp); u.fenv = *envp; /* Clear everything except the rounding mode. */ u.l[0] &= 0x3; /* ?? Should we clear the disabled exceptions as well ?? */ /* Put the new state in effect. */ fesetenv (envp); Which is incorrect. It should disable exceptions and pass the updated env to fesetenv: /* Disable exceptions */ u.l[1] = FE_ALL_EXCEPT; /* Put the new state in effect. */ fesetenv (&u.fenv); Finally the powerpc/nofpu version is missing the libm_hidden_def which results in a link error in make check. The attached patch fixes all of these problems.
2007-04-02 Steven Munroe <sjmunroe@us.ibm.com> * sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable exceptions. Use the updated env in fesetenv(). Add libm_hidden_def. diff -urN libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c --- libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2002-10-19 15:06:29.000000000 -0500 +++ libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2007-04-02 10:57:50.350540888 -0500 @@ -1,6 +1,6 @@ /* Store current floating-point environment and clear exceptions (soft-float edition). - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2007 Free Software Foundation, Inc. Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002. This file is part of the GNU C Library. @@ -33,11 +33,12 @@ u.fenv = *envp; /* Clear everything except the rounding mode. */ u.l[0] &= 0x3; - - /* ?? Should we clear the disabled exceptions as well ?? */ + /* Disable exceptions */ + u.l[1] = FE_ALL_EXCEPT; /* Put the new state in effect. */ - fesetenv (envp); + fesetenv (&u.fenv); return 0; } +libm_hidden_def (feholdexcept)
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |